如果存在具有相同名称的映射,则嵌套查询无法在Elasticsearch 1.7上运行

时间:2016-05-29 17:10:28

标签: elasticsearch

我刚刚将本地ES从2.1.8降级到1.7.5以匹配AWS Elasticsearch,现在我的嵌套查询无效。我不得不承认我很困惑,在网上找不到任何有用的东西。

为了清晰起见,我缩写了以下内容并更改了一些名称,但这些都是我本地ES的实际输出。最终的嵌套结果正确地返回了2.1上匹配包的文件文档,但在1.7上没有任何内容。

更新:我实际上有另一个没有出现此问题的嵌套字段。区别在于它是单个嵌套对象而不是数组。已知问题?

更新#2:将值更改为单个值没有任何区别。但是,将嵌套属性名称从package更改为packages会使问题消失。我唯一能想到的是我还有一个名为package的映射,会导致问题吗?

映射

"file": {
    "dynamic": "strict",
    "_all": {
      "enabled": false
    },
    "properties": {
      "name": {
        "type": "string"
      },
      "type": {
        "type": "string",
        "index": "not_analyzed"
      },
      "package": {
        "type": "nested",
        "dynamic": "strict",
        "properties": {
          "name": {
            "type": "string",
            "index": "not_analyzed"
          },
          "path": {
            "type": "string",
            "index": "not_analyzed"
          }            
      }
   }
}

文档

搜索

{ "query": {"term": {"type": "file"}} }

结果

{
    "_index": "blah",
    "_type": "file",
    "_id": "slkdfjsdfjsoijfoisjfisdjf",
    "_score": 7.8872123,
    "_source": {
      "name": "foo",
      "type": "file",
      "package": [
        {
          "name": "the_package",
          "path": "the_package!path"
        }
      ]
    }
 }

术语载体

localhost:9200/blah/file/slkdfjsdfjsoijfoisjfisdjf/_termvector?pretty=true&fields=package.name

{
  "_index": "blah",
  "_type": "file",
  "_id": "slkdfjsdfjsoijfoisjfisdjf",
  "_version": 1,
  "found": true,
  "took": 1,
  "term_vectors": {
    "package.name": {
      "field_statistics": {
        "sum_doc_freq": 1040,
        "doc_count": 1040,
        "sum_ttf": 1040
      },
      "terms": {
        "the_package": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 0,
              "start_offset": 0,
              "end_offset": 7
            }
          ]
        }
      }
    }
  }
}

嵌套查询

{
    "query": {
        "nested":{
            "path": "package",
            "query": {
                "term": {
                    "package.name": "the_package"
                }
            }
        }
    }           
}

结果

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 10,
    "successful": 10,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

1 个答案:

答案 0 :(得分:0)

在更新#2后,我尝试删除package映射,确定嵌套查询现在可以按预期工作。我会更新我的映射以避免此问题。

ES嵌套对象文档中没有任何内容表明这应该是一个问题,并且它显然已在1.7.5和2.1.8之间修复,因此如果有人知道此类文档或指向修复的bug的链接,请随意添加。发布此作为答案,以防其他任何人点击它。