并在 Elastic Search 中查询

And query in Elastic Search

我是 ElasticSearch 的新手,我遇到了一个问题。 我有用户索引,在添加具有用户名和 appId 的唯一用户后,我想确保应用程序中没有其他用户可以注册。

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

我的请求有什么问题?

我相信这是使用术语查询的副作用。术语查询不会在搜索端应用分析器,这意味着它期望 appId 完全匹配,实际上在默认分析器进行索引之前,令牌将小写为 appid。 大多数情况下都可以使用,但我建议转到 match query

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