У меня есть этот запрос, который возвращает, если слово «mumbai» появляется в любом месте заголовка.Точный поиск запроса в elasticsearch
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"title": "mumbai"
}
}
}
}
}
Так что результат содержит ...
mumbai
mumbai ports
financial capital mumbai
Мне нужно возвращать только «Мумбай» термин, а не другие документы, в которых Mumbai слово, связанные с другими фразами. Верно только первый результат. Как отказаться от других результатов?
обновление
Этот запрос работает, как ожидалось, и в нем перечислены значения сортировки 58 (случайное значение), если матч точно.
curl -XPOST "localhost:9200/enwiki_content/page/_search?pretty" -d'
{
"fields": "title",
"query": {
"match": {"title": "Mumbai"}
},
"sort": {
"_script": {
"script": "_source.title == \"Mumbai\" ? \"58\": \"78\";",
"type": "string"
}
}
}'
Мне нужно вернуть название, в котором соответствует точное Мумбаи (и, следовательно, значение сортировки 58). Как фильтровать или добавлять скрипт к параметру "fields"?
Обратите внимание, что shantanuo уже имеет запрос терминов и просит другое решение. Таким образом, только ваш второй вариант будет жизнеспособным вариантом. – Val
Shantanuo использует отфильтрованный запрос, который применяет фильтр в результате запроса match_all в приведенном выше случае. Также отфильтрованный запрос устарел в версии 2.0-бета https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html –
Это не имеет значения, match_all является сквозным для всех документов. Было бы то же самое, если бы этого не было. Я хочу сказать, что ваш запрос и его эквивалент. 'отфильтрованный' может быть устаревшим в ES 2.0, но 1), который все еще работает, и 2) мы не знаем, использует ли он 2.0 или нет. На мой взгляд, это не проблема.Вместо этого я бы расширил ваш второй вариант, более вероятно, что он после. – Val