2012-05-03 2 views
1

Я не вижу, как это будет сделано, но возможно ли иметь фасет, который использует интервал, чтобы дать статистику для каждого Х числа вхождений? В качестве примера, если сетка была последовательность чисел упорядоченных по дате, как:Может ли elasticsearch создавать гистограммы по X вхождениям поля?

1,2,3,4,5,6,7 

и я установить интервал 2, я хотел бы получить обратно гистограмма, как:

count: 2 
value: 3, 

count: 2, 
value: 7, 

count: 2, 
value: 11, 

... 
+0

Можете ли вы дать более подробный пример того, как рассчитываются значения 3, 7 и 11? – imotov

+0

Добавляя серию чисел в группах из 2, поэтому 1 + 2, 3 + 4 и т. Д. –

ответ

3

Elasticsearch Безразлично 't поддерживать такую ​​операцию из коробки. Можно написать такую ​​грань, но это не очень практично, поскольку для этого потребуется написать довольно сложный пользовательский фасет-процессор и, при необходимости, управлять тем, как записи разбиваются на осколки (так называемая маршрутизация).

В поиске elastics любая операция, которая опирается на глобальный порядок элементов, является несколько проблематичной с точки зрения архитектуры. Elasticsearch разбивает записи на осколки, и большинство операций, включая поиск и вычисление фасетов, происходят на осколках, а затем результаты этих операций на уровне шара собираются и объединяются в глобальный результат. Это, в основном, карта/сокращение архитектуры, и это ключ к горизонтальной масштабируемости elasticsearch. Оптимальная реализация вашей грани потребует изменения маршрутизации таким образом, что записи разбиваются на осколки на основе их порядка, а не хеш-кода id. В качестве альтернативы это можно сделать, ограничив фазу уровня наложения до простого извлечения значений полей и выполнения фактического вычисления фасета в фазе слияния. Последний подход представляется более практичным, но в то же время он не сильно отличается от простого извлечения значений полей для всех записей и выполнения расчетов на стороне клиента, что я и предлагаю сделать здесь. Просто извлеките все значения, используя нужный порядок сортировки, и вычислите всю статистику на клиенте. Если количество записей в вашем индексе велико, вы можете использовать Scroll API для извлечения всех записей с использованием нескольких запросов.

+0

Благодарим вас за подробный ответ. Я думаю, что я нахожусь в том, что я использую ES исключительно как статистический агрегатор, но чем глубже, тем больше я вижу, что его корни поисковой системы приближаются к сути. Думаю, мне придется делать некоторые подсчеты на стороне сервера :) Спасибо за вашу работу над ES imotov! –