Elasticsearch bool搜索匹配不正确

时间:2014-04-02 19:40:17

标签: elasticsearch

所以我有一个带有Id字段的对象,该字段由Guid填充。我正在使用" Must"进行弹性搜索查询。子句匹配该字段中的特定Id。问题是,弹性搜索返回的结果与Guid I提供的结果完全不符。我注意到我提供的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: { }
}

它返回了两个结果。 ID为

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

和ID为

的另一个
34de3d35-5a27-4886-95e8-a2d6dcf253c2

正如你所看到的,他们都有相同的中期和#34; -4886 - "。但是,如果记录完全匹配,而不是部分匹配,我希望此查询仅返回记录。我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

查询(可能)正确。

您几乎可以肯定看到的是'Standard Analyzer`的工作,它在索引时默认使用。此分析器将在连字符(' - ')和其他字符之间对输入(将其拆分为术语)进行标记。这就是找到匹配的原因。

要解决此问题,您需要将couchbaseDocument.doc.Id字段设置为not_analyzed

请参阅:How to not-analyze in ElasticSearch?以及从那里到官方文档的链接。

映射将类似于:

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