并在弹性搜索中查询

时间:2015-02-03 19:40:44

标签: java elasticsearch term

我是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"}

我的要求出了什么问题?

1 个答案:

答案 0 :(得分:1)

我认为这是使用术语查询的副作用。术语查询不会在搜索方面应用分析器,这意味着它期望appId的完全匹配,并且实际上在默认分析器索引之前,令牌将小写为appid。 大部分以下内容都有效,但我建议转到match query

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