2014-10-17 5 views
0

Я немного смущен насчет Bool Query против Finding Exact Values в поиске elastics. В частности, у меня есть title_field и post_field, которые я хочу найти. Но все мои другие поля я использую, потому что я хочу искать, если они существуют или нет, или сколько раз (например, url или имя пользователя, которое должно быть точным).ElasticSearch Bool Query или поиск точных значений

Так что я могу видеть из документации, что я могу сделать multimatch query на title_field и post_field.

Но как насчет других полей, от которых я хочу получить точный ответ? Делаю ли я boolean query (используя обязательно)? Или мне нужно переназначить все эти поля как not_analyzed? Или мне нужно сопоставить их как not_anayzed сначала и , затем делать булевский запрос?

ответ

0

Действительно, вы должны сопоставить поля, в которых вы хотите делать точные совпадения, как not_analyzed, что означает, что они рассматриваются как один токен, а не разбиты на несколько токенов.

Затем вы должны использовать термин запрос или фильтр, чтобы точно соответствовать токену. Если вы используете фильтр, вы можете использовать и/или, а не фильтры (более удобно, чем bool).

Поскольку отображение всех полей немного утомительно, вы могли бы использовать вместо dynamic_mapping, чтобы отобразить все строковые поля в not_analyzed, а затем просто добавить отображение для этих полей вы хотите проанализированы:

"dynamic_templates": [ 
    { 
     "non_analyzed_string": { 
     "match": "*", 
     "match_mapping_type": "string", 
     "mapping": { 
      "type": "string", 
      "index": "not_analyzed" 
     } 
     } 
    } 
    ] 
+0

имеет смысл Jilles. Огромное спасибо. – Chris

Смежные вопросы