Запрос по расстоянию
Увеличивает релевантность документов, находящихся ближе к предоставленной origin дате или точке. Например, можно использовать этот запрос для придания большего веса документам, более близким к определённой дате или местоположению.
Можно использовать запрос distance_feature для поиска ближайших соседей к определённому местоположению. Также запрос можно использовать в фильтре поиска с помощью запроса bool для добавления увеличенных оценок релевантности к результатам запроса bool.
Пример запроса
Настройка индекса
Для использования запроса distance_feature индекс должен содержать поле date, date_nanos или geo_point.
Чтобы увидеть, как настроить индекс для запроса distance_feature, попробуйте следующий пример.
-
Создайте индекс
itemsсо следующей картой полей:PUT /items { "mappings": { "properties": { "name": { "type": "keyword" }, "production_date": { "type": "date" }, "location": { "type": "geo_point" } } } } -
Добавьте несколько документов в этот индекс.
PUT /items/_doc/1?refresh { "name" : "chocolate", "production_date": "2018-02-01", "location": [-71.34, 41.12] } PUT /items/_doc/2?refresh { "name" : "chocolate", "production_date": "2018-01-01", "location": [-71.3, 41.15] } PUT /items/_doc/3?refresh { "name" : "chocolate", "production_date": "2017-12-01", "location": [-71.3, 41.12] }
Примеры запросов
Увеличение релевантности документов по дате
Следующий bool поиск возвращает документы с значением name равным chocolate. Поиск также использует запрос distance_feature для повышения релевантности документов со значением production_date, более близким к значению now.
GET /items/_search
{
"query": {
"bool": {
"must": {
"match": {
"name": "chocolate"
}
},
"should": {
"distance_feature": {
"field": "production_date",
"pivot": "7d",
"origin": "now"
}
}
}
}
} Увеличение релевантности документов по местоположению
Следующий bool поиск возвращает документы с значением name равным chocolate. Поиск также использует запрос distance_feature для повышения релевантности документов со значением location, более близким к значению [-71.3, 41.15].
GET /items/_search
{
"query": {
"bool": {
"must": {
"match": {
"name": "chocolate"
}
},
"should": {
"distance_feature": {
"field": "location",
"pivot": "1000m",
"origin": [-71.3, 41.15]
}
}
}
}
} Параметры верхнего уровня для запроса distance_feature
-
field -
(Обязательно, строка) Имя поля, используемого для расчёта расстояний. Это поле должно соответствовать следующим критериям:
- Быть полем типа
date,date_nanosилиgeo_point - Иметь значение параметра отображения
indexравноеtrue, что является значением по умолчанию - Иметь значение параметра отображения
doc_valuesравноеtrue, что является значением по умолчанию
- Быть полем типа
-
origin -
(Обязательно, строка) Дата или точка происхождения, используемые для расчёта расстояний.
Если значение
fieldявляется полем типаdateилиdate_nanos, значениеoriginдолжно быть датой. Поддерживается Date Math, например,now-1h.Если значение
fieldявляется полем типаgeo_point, значениеoriginдолжно быть геокоординатами. -
pivot -
(Обязательно, единица измерения времени или единица измерения расстояния) Расстояние от
origin, на котором оценки релевантности получат половину от значенияboost.Если значение
fieldявляется полем типаdateилиdate_nanos, значениеpivotдолжно быть единицей измерения времени, например,1hили10d.Если значение
fieldявляется полем типаgeo_point, значениеpivotдолжно быть единицей измерения расстояния, например,1kmили12m. -
boost -
(Необязательно, число с плавающей запятой) Число с плавающей запятой, используемое для умножения оценки релевантности соответствующих документов. Это значение не может быть отрицательным. По умолчанию
1.0.
Примечания
Как запрос distance_feature рассчитывает оценки релевантности
Запрос distance_feature динамически рассчитывает расстояние между значением origin и значениями поля документа. Затем он использует это расстояние как признак для повышения оценки релевантности более близких документов.
Запрос distance_feature вычисляет оценку релевантности документа следующим образом:
relevance score = boost * pivot / (pivot + distance)
distance — это абсолютное различие между значением origin и значением поля документа.
Пропуск неконкурентных результатов
В отличие от запроса function_score или других способов изменения оценок релевантности, запрос distance_feature эффективно пропускает неконкурентные результаты, когда параметр track_total_hits не true.
© 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/query-dsl-distance-feature-query.html
|
|