我是ElasticSearch的新手,我遇到了问题。 我有用户索引,在添加了用户名和appId的唯一用户后,我想确保app中没有其他用户可以注册。
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"}
我的要求出了什么问题?
答案 0 :(得分:1)
我认为这是使用术语查询的副作用。术语查询不会在搜索方面应用分析器,这意味着它期望appId的完全匹配,并且实际上在默认分析器索引之前,令牌将小写为appid。 大部分以下内容都有效,但我建议转到match query
BoolQueryBuilder query = boolQuery().
must(termQuery("user", "ara")).
must(termQuery("appId", "appid"));