Elasticsearch Безразлично 't поддерживать такую операцию из коробки. Можно написать такую грань, но это не очень практично, поскольку для этого потребуется написать довольно сложный пользовательский фасет-процессор и, при необходимости, управлять тем, как записи разбиваются на осколки (так называемая маршрутизация).
В поиске elastics любая операция, которая опирается на глобальный порядок элементов, является несколько проблематичной с точки зрения архитектуры. Elasticsearch разбивает записи на осколки, и большинство операций, включая поиск и вычисление фасетов, происходят на осколках, а затем результаты этих операций на уровне шара собираются и объединяются в глобальный результат. Это, в основном, карта/сокращение архитектуры, и это ключ к горизонтальной масштабируемости elasticsearch. Оптимальная реализация вашей грани потребует изменения маршрутизации таким образом, что записи разбиваются на осколки на основе их порядка, а не хеш-кода id. В качестве альтернативы это можно сделать, ограничив фазу уровня наложения до простого извлечения значений полей и выполнения фактического вычисления фасета в фазе слияния. Последний подход представляется более практичным, но в то же время он не сильно отличается от простого извлечения значений полей для всех записей и выполнения расчетов на стороне клиента, что я и предлагаю сделать здесь. Просто извлеките все значения, используя нужный порядок сортировки, и вычислите всю статистику на клиенте. Если количество записей в вашем индексе велико, вы можете использовать Scroll API для извлечения всех записей с использованием нескольких запросов.
Можете ли вы дать более подробный пример того, как рассчитываются значения 3, 7 и 11? – imotov
Добавляя серию чисел в группах из 2, поэтому 1 + 2, 3 + 4 и т. Д. –