Elasticsearch未找到使用DSL

时间:2016-06-24 15:55:15

标签: elasticsearch

我不知道为什么,使用URI Search方式搜索文档会返回正确的文档,但如果我使用API DSL则找不到文档。

要重现此问题:

如果没有创建任何索引,我会插入此文档:

curl http://localhost:9299/integrationtest-index/searchable/ID_XXXX2 -d '{ "ref" : "XXXX2", "field1" : "value1" }'

因此,索引是使用默认映射(类型可搜索)自动创建的:

curl http://localhost:9299/integrationtest-index?pretty
{
  "integrationtest-index" : {
    "aliases" : { },
    "mappings" : {
      "searchable" : {
        "properties" : {
          "field1" : {
            "type" : "string"
          },
          "ref" : {
            "type" : "string"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "field1" : "value1",
        "ref" : "XXXX2",
        "number_of_shards" : "5",
        "creation_date" : "1466780216631",
        "number_of_replicas" : "1",
        "uuid" : "GBj2VF-wQy6JP74AqoIn5g",
        "version" : {
          "created" : "2020099"
        }
      }
    },
    "warmers" : { }
  }
}

此查询返回一个文档:

curl http://localhost:9299/integrationtest-index/searchable/_search?q=ref:XXXX2

但是这个不存在的其他查询响应:

curl -XPOST http://localhost:9299/integrationtest-index/searchable/_search/exists -d '
{
 "query":  {
       "term" : {
         "ref" : "XXXX2"
       }
     }  
 }'

为什么最后一个查询说文档不存在?

环境:

  • ElasticSearch 2.2.0
  • Ubuntu 16.04 LTS
  • OpenJDK Runtime Environment(build 1.8.0_91-8u91-b14-0ubuntu4~16.04.1-b14)

1 个答案:

答案 0 :(得分:0)

我每隔几个月就会遇到同样的问题,所以我决定自己回答并分享我的愚蠢错误。 默认情况下,elasticsearch使用索引:已分析,因此带有术语的查询未找到任何文档。 如果您使用URI Search way,则弹性搜索正在执行query_string而不是术语查询。

此查询有效:

curl -XPOST http://localhost:9299/integrationtest-index/searchable/_search/exists -d '
{
 "query":  {
       "match" : {
         "ref" : "XXXX2"
       }
     }  
 }'

文档中的更多信息,请参阅Why doesn’t the term query match my document?

部分