Для каждого запроса поиска я разрешил список тэгов. Например,
["search", "open_source", "freeware", "linux"]
И я хочу получить документы со всеми тегами в этом списке. Я хочу получить:
{
"tags": ["search", "freeware"]
}
и исключить
{
"tags": ["search", "windows"]
}
потому что список не содержит тега windows
.
В документации Elasticsearch есть пример для equals:
https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html
Во-первых, мы включаем поле, которое поддерживает количество тегов:
{ "tags" : ["search"], "tag_count" : 1 }
{ "tags" : ["search", "open_source"], "tag_count" : 2 }
Во-вторых, мы получаем требуемый tag_count
GET /my_index/my_type/_search
{
"query": {
"filtered" : {
"filter" : {
"bool" : {
"must" : [
{ "term" : { "tags" : "search" } },
{ "term" : { "tags" : "open_source" } },
{ "term" : { "tag_count" : 2 } }
]
}
}
}
}
}
Проблема в том, что я не знаю tag_count
.
Также я попытался написать запрос с script_field
tags_count
, записать каждый разрешенный тег в запросе терминов и установить minimal_should_match
в tags_count
, но я не могу установить переменную script в minimal_should_match
.
Что я могу исследовать?