Я играю с фильтрами в elasticsearch (мы используем старую версию 1.3.1), и мне нужно отфильтровать результаты поиска по любому полю. При запросе, это можно сделать так:Elasticsearch: фильтр по любому полю
"query": {
"query_string": {
"query": "_all:test"
}
}
Но фильтры, кажется, не работает с _all заявление. Что я могу сделать? Может ли новая версия elasticsearch решить мою проблему?
Заранее благодарен!
PS: Мне нужно найти точные значения, поэтому я не могу использовать запросы. Существует разница между запросами и фильтров - если вы ищете my brown
, то вы можете ожидать результатов, как:
my brown
This is my brown dog.
someone stolen my brown wallet
Но фильтр будет возвращать только my brown
, и это Что мне нужно.
Спасибо за ваши советы. Однако вся полевая документация говорит, что это поле анализируется, и это не хорошо для меня, потому что фильтры работают IMHO только с not_analyzed полями. И я не могу использовать запрос соответствия, потому что он не возвращает точно точные результаты - найденная строка не обязательно такая же, как заданное выражение поиска. – Firzen
Gotcha. На всех этих ограничениях ваш вопрос был не совсем ясен. Во-первых, вы можете установить анализатор в поле '_all'; здесь [пример] (http://sense.qbox.io/gist/9f897c2a17078a48a8a88b14e9f93a0d83a1c493) с использованием токенизатора пробелов (похоже, это может быть правильным для вашего прецедента). Вы также можете использовать настраиваемое поле «все», как описано [здесь] (https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html#custom-all-fields) , –
Это именно то, чего я не хочу - когда я ищу «Тест», результат правильный, потому что возвращается только запись с полем 2 = «Тест». Bud, когда я ищу «тест», возвращает упругую запись с полем 2 = «это тест», и это неверно, потому что строки не совсем одинаковы. Мне нужны действительно точные результаты поиска с полем _all. – Firzen