我刚刚升级到Elastic Search
1.5.0,到目前为止,尽管嵌套查询可以正常工作,但我无法使inner_hits与嵌套过滤器一起使用。
比方说,我要检索的内部嵌套对象 演员 一中 的电影 对象。
当我运行以下 嵌套查询时 :
语法1
GET my_index/movie/_search
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "actors",
"query": {
"match": {
"actors.id": 12345
}
},
"inner_hits" : {}
}
}
}
}
}
=>我得到了这里记录的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] [嵌套]需要“查询”或“过滤器”字段]
(当我删除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" : {}
}
}
}
即使此语法与嵌套过滤器文档不匹配
=>我仍然不了解语法2的问题。在我看来,这似乎是一个ES错误。
编辑04-22-2015: ES 1.5.1中已 修复的错误 ,请参阅下面的评论
臭虫固定在ElasticSearch
1.5.1的规定在这里
因此,此语法有效(并且工作正常)
GET my_index/movie/_search
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"nested": {
"path": "actors",
"filter": {
"term": {
"actors.id": 12345
}
},
"inner_hits" : {}
}
}
}
}
}
多谢你们!