从Elasticsearch返回精确值的Java查询
我正在使用以下查询搜索文档:从Elasticsearch返回精确值的Java查询,java,elasticsearch,Java,elasticsearch,我正在使用以下查询搜索文档: QueryBuilder qb = matchQuery( "username_field", "user123" ); SearchResponse response = Client().prepareSearch("users_dashboard").setQuery(qb) .setSource("username_field")
QueryBuilder qb = matchQuery(
"username_field",
"user123"
);
SearchResponse response = Client().prepareSearch("users_dashboard").setQuery(qb)
.setSource("username_field")
.execute().actionGet();
但是我想让它返回给我一个包含确切用户名的文档。但当前返回的是一个示例:
搜索user123
以下各项均已退回:
user123
user123 lastname
firstname user123
但我只想返回user123
我正在使用Elasticsearch 2.1.0进行精确匹配。我假设您对用户字段使用标准分析器
(默认值),因此反向索引中有以下标记
- 用户123(文件1、2、3)
- 名字(文件3)
- 姓氏(文件2)
当您使用匹配查询时
,它将返回所有三个文档。您需要将用户字段映射为索引:未分析
,以便不执行任何分析。您的反向索引将如下所示
- 用户123
- user123 lastname
- 名字user123
然后,此查询将为您提供所需的结果
QueryBuilder qb = termQuery(
"username_field",
"user123"
);
你需要使用精确匹配。我假设您对用户字段使用标准分析器
(默认值),因此反向索引中有以下标记
- 用户123(文件1、2、3)
- 名字(文件3)
- 姓氏(文件2)
当您使用匹配查询时
,它将返回所有三个文档。您需要将用户字段映射为索引:未分析
,以便不执行任何分析。您的反向索引将如下所示
- 用户123
- user123 lastname
- 名字user123
然后,此查询将为您提供所需的结果
QueryBuilder qb = termQuery(
"username_field",
"user123"
);
如何将映射设置为not\u analyzed
到现有索引?虽然可以将not\u analyzed
设置为现有索引,但它不会影响当前值,最好创建新索引,然后重新索引所有内容。我明白了。另一个问题是,设置多个查询将是query1和query2,还是query1或query2?意思是,我想匹配一个提到一组单词的用户名:QueryBuilder qb1=termQuery(“user.screen\u name”,username);QueryBuilder qb2=匹配查询(“文本”,关键字)
并返回文档的计数。ES是否会将其视为用户名和关键字
,或用户名或关键字
?您可以这样做将必须表示和、应该表示或。另外,请不要在评论中提出不同的问题以保持此线程干净。我如何将映射设置为未分析
到现有索引?虽然可以将未分析
设置为现有索引,但它不会影响当前值,最好创建新索引,然后重新索引所有内容。我明白了。另一个问题是,设置多个查询将是query1和query2,还是query1或query2?意思是,我想匹配一个提到一组单词的用户名:QueryBuilder qb1=termQuery(“user.screen\u name”,username);QueryBuilder qb2=匹配查询(“文本”,关键字)
并返回文档的计数。ES是否会将其视为用户名和关键字
,或用户名或关键字
?您可以这样做将必须表示和、应该表示或。另外,请不要在评论中问不同的问题,以保持此线程干净。