我刚刚升级到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的规定在这里
因此,此语法有效(并且工作正常)
多谢你们!