我刚刚将本地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": []
}
}
答案 0 :(得分:0)
在更新#2后,我尝试删除package
映射,确定嵌套查询现在可以按预期工作。我会更新我的映射以避免此问题。
ES嵌套对象文档中没有任何内容表明这应该是一个问题,并且它显然已在1.7.5和2.1.8之间修复,因此如果有人知道此类文档或指向修复的bug的链接,请随意添加。发布此作为答案,以防其他任何人点击它。