当前位置:  开发笔记 > 数据库 > 正文

Elasticsearch Bool搜索不正确匹配

如何解决《ElasticsearchBool搜索不正确匹配》经验,为你挑选了1个好方法。

所以我有一个对象,其ID字段由Guid填充。我正在使用“必须”子句进行Elasticsearch查询,以匹配该字段中的特定ID。问题是elasticsearch返回的结果与我提供的Guid完全不匹配。我注意到我正在提供的Guid,Elasticsearch返回的结果之一在Guid的特定部分共享相同的数字。

这是我的查询源(我正在使用Elasticsearch控制台):

{
 query: 
 {
  bool: 
  {
    must: [
    {
      text: 
      {
        couchbaseDocument.doc.Id: 5cd1cde9-1adc-4886-a463-7c8fa7966f26
      }
    }]
    must_not: [ ]
    should: [ ]
   }
 }
 from: 0
 size: 10
 sort: [ ]
 facets: { }
}

它返回两个结果。编号为

5cd1cde9-1adc-4886-a463-7c8fa7966f26

另一个ID为

34de3d35-5a27-4886-95e8-a2d6dcf253c2

如您所见,它们都有相同的中间术语“ -4886-”。但是,我希望该查询仅在记录完全匹配而不是部分匹配时才返回记录。我在这里做错了什么?



1> Geert-Jan..:

该查询是(可能)正确的。

您几乎可以肯定看到的是“标准分析器”的工作,默认情况下在索引时间使用它。该分析器将在连字符('-')和其他字符中标记输入(将其分割为术语)。这就是找到匹配项的原因。

为了解决这个问题,您想将couchbaseDocument.doc.Id字段设置为not_analyzed

请参阅:如何在ElasticSearch中不进行分析?以及从那里到官方文档的链接。

映射将类似于:

{
    "yourType" : {
        "properties" : {
            "couchbaseDocument.doc.Id" : {"type" : "string", "index" : "not_analyzed"},
        }
    }
}


您必须指定一个对象结构。但是,您只需要为这一领域这样做。所有其他(未定义的字段)将获得默认处理。查看最新答案(最重要的,因此请检查)
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有