Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Elasticsearch返回精确值的Java查询_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

从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是否会将其视为
用户名和关键字
,或
用户名或关键字
?您可以这样做将必须表示和、应该表示或。另外,请不要在评论中问不同的问题,以保持此线程干净。