我刚刚升级到Elastic Search 1.5.0,到目前为止我无法使inner_hits使用嵌套过滤器,尽管它适用于嵌套查询。
假设我想在电影对象中检索内部嵌套对象 actor 。
当我运行以下嵌套查询:
时语法1
GET my_index/movie/_search
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "actors",
"query": {
"match": {
"actors.id": 12345
}
},
"inner_hits" : {}
}
}
}
}
}
=>我得到了记录为here的inner_hits,这很好。
但是,当我尝试使用嵌套过滤器执行等效查询时:
语法2
GET my_index/movie/_search
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "actors",
"filter": {
"term": {
"actors.id": 12345
}
},
"inner_hits" : {}
}
}
}
}
}
=>我得到以下解析错误
QueryParsingException [[my_index] [nested]需要'query'或 '过滤'字段]
(当我删除inner_hits时,这最后一个查询工作正常 - 当然除了我没有得到内部命中...)
我使用的语法是否有问题,或者嵌套过滤器还没有实现inner_hits?
提前致谢
编辑3-30-2015
它使用@mdewit下面提供的语法(谢谢!)
语法3
GET my_index/movie/_search
{
"query": {
"nested": {
"path": "actors",
"query": {
"filtered": {
"filter": {
"term": {"actors.id": 12345}
}
}
},
"inner_hits" : {}
}
}
}
即使此语法与Nested Filter doc
不匹配=>我仍然不明白Syntax 2有什么问题。对我来说这似乎是一个ES错误。
编辑04-22-2015:错误已修复在ES 1.5.1中,请参阅下面的评论
答案 0 :(得分:6)
以下似乎有效:
GET my_index/movie/_search
{
"query": {
"nested": {
"path": "actors",
"query": {
"filtered": {
"filter": {
"term": {"actors.id": 12345}
}
}
},
"inner_hits" : {}
}
}
}'
答案 1 :(得分:3)
在ElasticSearch 1.5.1中修复了错误here
所以这种语法有效(并且工作正常)
GET my_index/movie/_search
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "actors",
"filter": {
"term": {
"actors.id": 12345
}
},
"inner_hits" : {}
}
}
}
}
}
谢谢你们!