term_set
Возвращает документы, содержащие минимальное количество точных терминов в предоставленном поле
Это может использоваться для возврата документов, когда запрос содержит минимальное количество токенов, присутствующих в документе. Сначала необходимо проиндексировать документ с типом данных token_count .
Поле типа token_count действительно является целочисленным полем, которое принимает строковые значения, анализирует их, а затем индексирует количество токенов в строке.
В индексе мы будем сохранить номер токена для рецепта.
Пример: Для «рецепт»: «Яблочно-яблочный картофель» recipe.length = 3 Для "recipe": "egg apple" recipe.length = 2
Отображение:
PUT index12
{
"mappings": {
"properties": {
"id":{
"type": "integer"
},
"recipe":{
"type": "text",
"fields": {
"length":{
"type":"token_count",
"analyzer":"standard"
}
}
}
}
}
}
Запрос:
{
"query": {
"terms_set": {
"recipe": {
"terms": [
"egg",
"apple",
"peach"
],
"minimum_should_match_script": {
"source": """ if(doc['recipe.length'].size()==0) return 0; else return doc['recipe.length'].value"""
}
}
}
}
}
Результат:
"hits" : [
{
"_index" : "index12",
"_type" : "_doc",
"_id" : "Wj563XEBly0sCU1FGf2v",
"_score" : 1.1871837,
"_source" : {
"id" : 1,
"recipe" : "egg apple peach"
}
},
{
"_index" : "index12",
"_type" : "_doc",
"_id" : "Wz563XEBly0sCU1FIf06",
"_score" : 0.29748765,
"_source" : {
"id" : 2,
"recipe" : "egg apple"
}
}
]