Язык выражений Lucene
Выражения Lucene компилируют выражение javascript в байткод. Они предназначены для высокопроизводительных пользовательских функций ранжирования и сортировки и включены по умолчанию для скриптов inline и stored.
Производительность
Выражения были разработаны для достижения конкурентоспособной производительности с пользовательским кодом Lucene. Эта производительность обусловлена низкой накладными расходами на документ по сравнению с другими движками скриптов: выражения выполняют больше предварительных операций.
Это позволяет добиться очень быстрой работы, даже быстрее, чем если бы вы написали скрипт native.
Синтаксис
Выражения поддерживают подмножество синтаксиса JavaScript: одно выражение.
Для получения подробной информации об доступных операторах и функциях обратитесь к документации модуля выражений.
Переменные в скриптах expression доступны для доступа к:
- полям документов, например,
doc['myfield'].value - переменным и методам, которые поддерживает поле, например,
doc['myfield'].empty - параметрам, переданным в скрипт, например,
mymodifier - текущему значению оценки документа,
_score(доступно только при использовании вscript_score)
Вы можете использовать скрипты выражений для script_score, script_fields, скриптов сортировки и числовых скриптов агрегации, просто установите параметр lang в значение expression.
API числовых полей
| Выражение | Описание |
|---|---|
| Значение поля в качестве |
| Логическое значение, указывающее, нет ли значений поля в документе. |
| Количество значений в этом документе. |
| Минимальное значение поля в этом документе. |
| Максимальное значение поля в этом документе. |
| Медианное значение поля в этом документе. |
| Среднее значение значений в этом документе. |
| Сумма значений в этом документе. |
Если поле отсутствует в документе, по умолчанию оно обрабатывается как 0. Вы можете задать другое значение, например, doc['myfield'].empty ? 100 : doc['myfield'].value
Если у документа несколько значений для поля, по умолчанию возвращается минимальное значение. Вы можете выбрать другое значение, например, doc['myfield'].sum().
Если поле отсутствует в документе, по умолчанию оно обрабатывается как 0.
Булевы поля представлены как числовые, где true отображается как 1, а false отображается как 0. Например: doc['on_sale'].value ? doc['price'].value * 0.5 : doc['price'].value
API полей даты
Поля дат обрабатываются как количество миллисекунд с момента 1 января 1970 года и поддерживают API числовых полей выше, плюс доступ к некоторым полям, специфичным для дат:
| Выражение | Описание |
|---|---|
| Века (1-2920000) |
| День (1-31), например, |
| День недели (1-7), например, |
| День года, например, |
| Эра: |
| Час (0-23). |
| Миллисекунды в течение дня (0-86399999). |
| Миллисекунды в течение секунды (0-999). |
| Минуты в течение дня (0-1439). |
| Минуты в течение часа (0-59). |
| Месяц в году (1-12), например, |
| Секунды в течение дня (0-86399). |
| Секунды в течение минуты (0-59). |
| Год (-292000000 - 292000000). |
| Год в рамках века (1-100). |
| Год в рамках эры (1-292000000). |
Следующий пример показывает разницу в годах между полями дат date0 и date1:
doc['date1'].date.year - doc['date0'].date.year
geo_point API поля
| Выражение | Описание |
|---|---|
| Логическое значение, указывающее, нет ли значений поля в документе. |
| Широта гео-точки. |
| Долгота гео-точки. |
Следующий пример вычисляет расстояние в километрах от Вашингтона, округ Колумбия:
haversin(38.9072, 77.0369, doc['field_name'].lat, doc['field_name'].lon)
В этом примере координаты могли быть переданы в скрипт в качестве параметров, например, на основе геолокации пользователя.
Ограничения
Существует несколько ограничений по сравнению с другими языками сценариев:
- Доступны только числовые,
boolean,dateиgeo_pointполя - Не доступны сохраненные поля
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/modules-scripting-expression.html