2015-02-03 7 views
-1

Я новичок в ElasticSearch, и у меня возникла проблема. У меня есть индекс пользователей и после добавления уникального пользователя с именем пользователя и appId. Я хочу быть уверенным, что ни один пользователь в приложении не может быть зарегистрирован.И запрос в Elastic Search

BoolQueryBuilder query = boolQuery(). 
       must(termQuery("user", "ara")). 
       must(termQuery("appId", "appId")); 

Java запрос выглядит следующим образом:

SearchResponse existResponse = elClient.prepareSearch("baas").setTypes("users") 
       .setSearchType(SearchType.DEFAULT) 
       .setQuery(query) 
       .setSize(1) 
       .setExplain(false) 
       .execute().actionGet(); 

Но в результате хиты нулевой длины. Ответ после добавления индекса выглядит следующим образом:

{"appId":"appId", 
"updated":1422992226921,"created":1422992226921,"user":"ara", 
"password":"9c4a1178d8611f1146b7386e56fbd827", 
"salt":"8a669b1562c8c8714fbe9545df719fae"} 

Что случилось с моей просьбой?

ответ

1

Я считаю, что это побочный эффект использования термина-запроса. Термин запрос не применяется анализатор на стороне поиска, что означает, что он ожидает точного соответствия appId, и на самом деле, токен был бы в нижнем регистре до appid перед индексированием по умолчанию анализатора. В основном следующие будут работать, но тогда я предлагаю перейти к match query

BoolQueryBuilder query = boolQuery(). 
       must(termQuery("user", "ara")). 
       must(termQuery("appId", "appid")); 
+0

кажется, что да. Я решил проблему, но установил сопоставление и сказал ей «not_analyze» эти два поля. Работал как шарм. Спасибо за ответ, Винеет. –

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