Запросы на уровне термина в Elasticsearch: запрос набора терминов (terms_set)
Возвращает документы, содержащие минимальное количество точных терминов в указанном поле.
Запрос terms_set аналогичен запросу terms, за исключением того, что вы можете определить количество совпадающих терминов, необходимых для возврата документа. Например:
- Поле programming_languages содержит список известных языков программирования, таких как c++, java или php для кандидатов на работу. Вы можете использовать запрос terms_set для возврата документов, которые соответствуют как минимум двум из этих языков.
- Поле permissions содержит список возможных разрешений пользователя для приложения. Вы можете использовать запрос terms_set для возврата документов, которые соответствуют подмножеству этих разрешений.
Пример запроса
Настройка индекса
В большинстве случаев вам нужно будет включить отображение числового поля в свой индекс, чтобы использовать запрос terms_set. Это числовое поле содержит количество совпадающих терминов, необходимых для возврата документа.
Чтобы узнать, как настроить индекс для запроса terms_set, попробуйте следующий пример.
1. Создайте индекс, job-candidates, со следующими сопоставлениями полей:
- name, поле ключевого слова. Это поле содержит имя кандидата на работу.
- programming_languages, поле ключевого слова. Это поле содержит языки программирования, известные соискателю.
- required_matches, long числовое поле. Это поле содержит количество совпадающих терминов, необходимых для возврата документа.
PUT /job-candidates
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"programming_languages": {
"type": "keyword"
},
"required_matches": {
"type": "long"
}
}
}
}
2. Проиндексируйте документ с идентификатором 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
}
3. Проиндексируйте другой документ с идентификатором 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
(Необязательный, строка) Числовое поле, содержащее количество совпадающих терминов, необходимых для возврата документа.
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
}
}
}
}
Читайте также:
Комментарии
Отправить комментарий