我剛剛升級到彈性搜索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" : {}
}
}
}
}
}
=>我得到的記錄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] [嵌套]需要'查詢'或 '過濾器'字段]
(這最後的查詢工作正常,當我刪除inner_hits - 當然除了我沒有得到內命中......)
有什麼錯在我使用或者是語法inner_hits尚未實現與嵌套過濾器?
在此先感謝
編輯2015年3月30日
它的工作原理與@mdewit下面提供的語法(謝謝!)
語法3
GET my_index/movie/_search
{
"query": {
"nested": {
"path": "actors",
"query": {
"filtered": {
"filter": {
"term": {"actors.id": 12345}
}
}
},
"inner_hits" : {}
}
}
}
即使此語法與012不匹配
=>我還是不明白Syntax 2出了什麼問題。對我來說這看起來像是ES錯誤。
編輯2015年4月22日:臭蟲在ES 1.5.1固定,見下文
是的它的工作原理,謝謝你!不過,由於您提供的語法與官方的Nested Filter文檔中描述的語法不完全相同,因此我會將問題留給開放人員:http://www.elastic.co/guide/en/elasticsearch/reference/1.x/ query-dsl-nested-filter.html 我仍然認爲在我提供的示例中,從ES獲得的錯誤消息中存在錯誤 – benoit 2015-03-30 13:15:03
這確實有效。 – 2017-11-13 11:23:47