Query-Term和Filter-Term在完全匹配时返回零结果,但查询匹配返回结果。为什么?

时间:2014-11-10 04:14:05

标签: elasticsearch

假设:

  • 我在ElasticSearch中加载了一个实例,其placeId属性设置为"Foo"

  • 我运行以下搜索:

    {
      "query": {
        "term": {
          "placeId": {
            "value": "Foo"
          }
        }
      }
    }
    
    {
      "filter": {
        "term": {
          "placeId": "Foo"
        }
      }
    }
    
    {
      "query": {
        "match": {
          "placeId": {
            "query": "Foo"
          }
        }
      }
    }
    

但是在这三个中,只有第三个返回了结果。

这是为什么?难道他们都不应该返回结果吗?

2 个答案:

答案 0 :(得分:2)

默认情况下,使用标准分析器,ES将“Foo”放在索引中作为“foo”(意思是小写)。在搜索term时,ES不使用分析器,因此它实际上是在搜索“Foo”(确切的情况)。然而,在其索引中存在“foo”(因为分析器)。

分析了传递给match的值,ES实际上在其索引中搜索“foo”,而不是像term那样搜索“Foo”。

所以,你看到的行为是正常的,这就是它应该如何运作。 Here关于match

  

一系列匹配查询,接受文本/数字/日期,分析,并从中构建查询。

Here关于term

  

匹配包含字词(未分析)的字段的文档。

答案 1 :(得分:0)

如果未使用u,则分析器表示弹性搜索词查询和术语查询过滤器不应支持大写值。请使用" foo"在您的查询中。请用这种方式

curl -XGET localhost:9200/index/incident/_search -d '{
"query":{
"term":{"field1":{"value":"value1"}
}}}'

但匹配所有查询是支持大小写。 希望它能奏效。