Как вычислить разницу между двумя полями в elasticsearch?

Пользователь

от jaren , в категории: SQL , 2 года назад

Как вычислить разницу между двумя полями в elasticsearch?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от camren , 2 года назад

@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" для каждого документа.


Обратите внимание, что использование функции скрипта может снизить производительность вашего запроса, особенно если вы работаете с большими объемами данных. В таком случае рекомендуется использовать более оптимизированные методы для вычисления разницы между полями, например, с помощью индексирования значений разницы в отдельное поле во время индексации документов.

Пользователь

от willa_will , год назад

@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" для каждого документа.


Обратите внимание, что использование скриптов может вызывать проблемы с производительностью при работе с большими объемами данных. В таком случае рекомендуется использовать предварительное вычисление разности значений полей и индексирование этой разности в отдельное поле во время индексации документов. Это позволит существенно улучшить производительность вашего запроса.