Запрос на основе набора терминов
Возвращает документы, содержащие минимальное количество точных терминов в заданном поле.
Запрос terms_set аналогичен запросу terms, за исключением возможности определения необходимого количества совпадающих терминов для возврата документа. Например:
- Поле
programming_languagesсодержит список известных языков программирования, таких какc++,javaилиphpдля кандидатов на работу. Вы можете использовать запросterms_setдля возврата документов, соответствующих по крайней мере двум из этих языков. - Поле
permissionsсодержит список возможных разрешений пользователя для приложения. Вы можете использовать запросterms_setдля возврата документов, соответствующих подмножеству этих разрешений.
Пример запроса
Настройка индекса
В большинстве случаев для использования запроса terms_set необходимо включить отображение числового поля в индексе. Это числовое поле содержит количество требуемых совпадающих терминов для возврата документа.
Чтобы увидеть, как настроить индекс для запроса terms_set, попробуйте следующий пример.
-
Создайте индекс
job-candidatesс такими отображениями полей:PUT /job-candidates { "mappings": { "properties": { "name": { "type": "keyword" }, "programming_languages": { "type": "keyword" }, "required_matches": { "type": "long" } } } } -
Добавьте документ с ID
1и следующими значениями:-
Jane Smithв полеname. -
["c++", "java"]в полеprogramming_languages. -
2в полеrequired_matches.
Включите параметр
?refresh, чтобы документ стал сразу доступным для поиска.PUT /job-candidates/_doc/1?refresh { "name": "Jane Smith", "programming_languages": [ "c++", "java" ], "required_matches": 2 } -
-
Добавьте другой документ с ID
2и следующими значениями:-
Jason Responseв полеname. -
["java", "php"]в полеprogramming_languages. -
2в полеrequired_matches.
PUT /job-candidates/_doc/2?refresh { "name": "Jason Response", "programming_languages": [ "java", "php" ], "required_matches": 2 } -
Теперь вы можете использовать значение поля required_matches в качестве количества требуемых совпадающих терминов для возврата документа в запросе terms_set.
Пример запроса
Следующий поиск возвращает документы, где поле programming_languages содержит по крайней мере два из следующих терминов:
-
c++ -
java -
php
Значением параметра minimum_should_match_field является required_matches. Это означает, что требуется 2 совпадающих терминов, значение поля required_matches.
GET /job-candidates/_search
{
"query": {
"terms_set": {
"programming_languages": {
"terms": [ "c++", "java", "php" ],
"minimum_should_match_field": "required_matches"
}
}
}
} Параметры верхнего уровня для запроса terms_set
-
<field> - (Обязательно, объект) Поле, которое необходимо искать.
Параметры запроса <field>
-
terms -
(Обязательно, массив строк) Массив терминов, которые вы хотите найти в указанном поле
<field>. Для возврата документа требуется точное совпадение определенного количества терминов, включая пробелы и регистр.Требуемое количество совпадений определяется параметром
minimum_should_match_fieldилиminimum_should_match_script. -
minimum_should_match_field - (Необязательно, строка) Числовое поле Numeric, содержащее количество требуемых совпадающих терминов для возврата документа.
-
minimum_should_match_script -
(Необязательно, строка) Пользовательский скрипт, содержащий количество требуемых совпадающих терминов для возврата документа.
См. параметры и допустимые значения в Скриптинге.
Пример запроса с параметром
minimum_should_match_scriptсм. в Как использовать параметрminimum_should_match_script.
Примечания
Как использовать параметр minimum_should_match_script
Вы можете использовать minimum_should_match_script для определения требуемого количества совпадающих терминов с помощью скрипта. Это полезно, если нужно динамически устанавливать количество требуемых терминов.
Пример запроса с использованием minimum_should_match_script
Следующий поиск возвращает документы, где поле programming_languages содержит по крайней мере два из следующих терминов:
-
c++ -
java -
php
Параметр source этого запроса указывает:
- Требуемое количество совпадающих терминов не может превышать
params.num_terms, количество терминов, указанных в полеterms. - Требуемое количество совпадающих терминов равно
2, значению поляrequired_matches.
GET /job-candidates/_search
{
"query": {
"terms_set": {
"programming_languages": {
"terms": [ "c++", "java", "php" ],
"minimum_should_match_script": {
"source": "Math.min(params.num_terms, doc['required_matches'].value)"
},
"boost": 1.0
}
}
}
}
© 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-terms-set-query.html