Насколько я понимаю, единственный способ сделать это - использовать Span Queries , однако он не будет применим к массиву значений.
Вам необходимо объединить значения в одно поле text
с whitespace
в качестве разделителя, повторно обработать документы и использовать запрос Span Near для этого поля:
Найдите приведенное ниже сопоставление, образец документа, запрос и ответ:
Сопоставление:
PUT my_test_index
{
"mappings": {
"properties": {
"data":{
"type": "text"
}
}
}
}
Образцы документов:
POST my_test_index/_doc/1
{
"data": "a b"
}
POST my_test_index/_doc/2
{
"data": "b a"
}
Запрос диапазона:
POST my_test_index/_search
{
"query": {
"span_near" : {
"clauses" : [
{ "span_term" : { "data" : "a" } },
{ "span_term" : { "data" : "b" } }
],
"slop" : 0, <--- This means only `a b` would return but `a c b` won't.
"in_order" : true <--- This means a should come first and the b
}
}
}
Обратите внимание, что slop controls the maximum number of intervening unmatched positions permitted.
Ответ:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.36464313,
"hits" : [
{
"_index" : "my_test_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.36464313,
"_source" : {
"data" : "a b"
}
}
]
}
}
Дайте мне знать, если это поможет!