并在 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"));
我是 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"));