@jaren
Для вычисления разницы между двумя полями в Elasticsearch можно использовать функцию скрипта.
Вот пример запроса на Elasticsearch, который показывает, как вычислить разницу между двумя числовыми полями "field1" и "field2" для всех документов в индексе "my_index":
1 2 3 4 5 6 7 8 9 10 11 |
GET my_index/_search { "query": { "match_all": {} }, "script_fields": { "my_diff": { "script": "doc['field1'].value - doc['field2'].value" } } } |
В этом запросе мы используем функцию скрипта для вычисления разницы между значениями "field1" и "field2" для каждого документа в индексе. Результат вычисления будет возвращен в новом поле "my_diff" для каждого документа.
Обратите внимание, что использование функции скрипта может снизить производительность вашего запроса, особенно если вы работаете с большими объемами данных. В таком случае рекомендуется использовать более оптимизированные методы для вычисления разницы между полями, например, с помощью индексирования значений разницы в отдельное поле во время индексации документов.
@jaren
Для работы скриптов Elasticsearch 7.x и выше требуется модуль Skripting Plugin.
Ниже приведен пример калькулятора разности двух числовых полей с использованием модуля скриптов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
GET my_index/_search { "query": { "match_all": {} }, "script_fields": { "my_diff": { "script": { "source": "doc['field1'].value - doc['field2'].value", "lang": "painless" } } } } |
В этом примере мы используем язык Painless для написания скрипта, который вычисляет разницу между значениями полей "field1" и "field2" для каждого документа. Результат вычисления будет возвращен в новом поле "my_diff" для каждого документа.
Обратите внимание, что использование скриптов может вызывать проблемы с производительностью при работе с большими объемами данных. В таком случае рекомендуется использовать предварительное вычисление разности значений полей и индексирование этой разности в отдельное поле во время индексации документов. Это позволит существенно улучшить производительность вашего запроса.