Гистограмма Searchkick (Elasticsearch) с агрегациями — расширение границ

#ruby-on-rails #elasticsearch #searchkick

#ruby-on-rails #эластичный поиск #searchkick

Вопрос:

Я использую драгоценный камень searchkick в приложении Rails для доступа к данным Elasticsearch. Я использую функцию агрегации для отображения гистограммы цены; соответствующая часть body_options выглядит следующим образом:

             price: {
                histogram: {
                    field: :low_rate,
                    interval: 50
                }
            }
  

Проблема, с которой я сталкиваюсь, заключается в том, что мне также нужно иметь возможность предоставлять фильтр для low_rate. Итак, например, если у меня изначально есть гистограмма с диапазоном ставок от 50 до 500 долларов, и я добавляю ее в следующий запрос where low_rate < 300 , сегменты гистограммы пересчитываются, и диаграмма полностью перерисовывается. Но в моем приложении мне нужно, чтобы диаграмма по-прежнему отображала те же сегменты.

Это довольно распространенное поведение для фильтров — смотрите пример ниже с сайта Airbnb, на котором показан график после перетаскивания верхнего предела вниз — и поэтому я надеюсь, что кто-нибудь сможет дать несколько советов о том, как достичь этого с помощью searchkick.

Пример поведения гистограммы

Ответ №1:

Я могу помочь вам с запросом E.S, если это поможет.

 {
  "size": 0, 
  "aggs": {
    "hist": {
      "histogram": {
        "field": "low_rate",
        "interval": 50,
        "extended_bounds": { // <======= It is used to extend bounds
          "min": 50,      // <========== Specify the min bound
          "max": 500      // <========== Specify the max bound
        },
          "missing":10    // <========== value of the missing docs in the range
      }
    }
  }
}
  

Комментарии:

1. Спасибо за это. Это помогает мне частично, поскольку сегменты теперь распространяются на весь диапазон возможных значений. Однако сегменты за пределами выбранного диапазона отображаются как пустые, и мне все еще нужны подсчеты в них, чтобы отобразить гистограмму. Например, если пользователь перетаскивает минимальный ползунок на 100, а запрос имеет low_rate > 100, все последующие сегменты (start_price 100, 150, 200 и т.д.) Показывают значение 0.

2. Вы хотите, чтобы результат запроса находился между выбранным диапазоном и гистограммой с расширенными сегментами? На airbnb гистограмма цен имеет 2 аспекта: (1) Заполнение гистограммы и (2) Выбор диапазона с помощью-в гистограмме для создания запроса для получения фактических данных, пожалуйста, поддержите ответ, если он вам каким-либо образом помог.

3. Да, я хочу, чтобы результат запроса находился между выбранным диапазоном. Но я хочу, чтобы гистограмма продолжала показывать сегменты и их количество, независимо от запроса на low_rate. Имеет ли это смысл? Возможно, это даже невозможно в Elasticsearch? Еще раз спасибо.

4. @alpheus: Вы можете загрузить гистограмму один раз, а затем на основе выбранного пользователем диапазона может быть выполнен запрос. Я вижу, что это выполнимо. Другими словами, отделите заполнение гистограммы от части выполнения запроса.