#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: Вы можете загрузить гистограмму один раз, а затем на основе выбранного пользователем диапазона может быть выполнен запрос. Я вижу, что это выполнимо. Другими словами, отделите заполнение гистограммы от части выполнения запроса.