Язык выражений 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
API поля geo_point
| Выражение | Описание |
|---|---|
| Булево значение, указывающее, нет ли значений в документе для поля. |
| Широта гео-точки. |
| Долгота гео-точки. |
Следующий пример вычисляет расстояние в километрах от Вашингтона, округ Колумбия:
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/8.17/modules-scripting-expression.html