есть очень простая вещь, которую я пытался сделать с ES, и справился только с помощью обходного пути: учитывая запрос и поле документа, сопоставьте все условия запроса со всеми терминами поля.Другими словами:
- условия запроса являются подмножеством поля
- условия поля являются подмножеством запроса
1)удовлетворен использованием оператора and
в запросе на совпадение.Но я не смог найти способ для 2).
Пока мне удалось достичь этого, только используя highlight
и требуя, чтобы вся строка была выделена (в моей логике приложения))
Есть ли другой способ?
Пример:
PUT bananas/banana/1
{ "name" : "banana"}
PUT bananas/banana/2
{ "name" : "ripe banana"}
PUT bananas/banana/3
{ "name" : "not so ripe banana"}
GET bananas/_search
{
"query" : {
"match": { "_all": { "query": "ripe banana", "operator": "and" } }
},
"highlight" : {
"fields" : { "*" : { } },
"require_field_match": false
}
}
# Result (hits only):
"hits" : {
"hits" : [
{
"_index" : "bananas",
"_type" : "banana",
"_id" : "3",
"_score" : 0.5753642,
"_source" : {
"name" : "not so ripe banana"
},
"highlight" : {
"name" : [
"not so <em>ripe</em> <em>banana</em>"
]
}
},
{
"_index" : "bananas",
"_type" : "banana",
"_id" : "2",
"_score" : 0.51623213,
"_source" : {
"name" : "ripe banana"
},
"highlight" : {
"name" : [
"<em>ripe</em> <em>banana</em>"
]
}
}
]
}
Так что в этом случае я бы хотел исключить результат для "не очень спелых бананов" (он даже возвращается по какой-то причине первым!).Мой обходной путь - проверка части ответа highlight
, чтобы увидеть, есть ли что-то невыделенное