2015-03-25 31 views
7

我剛剛升級到彈性搜索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固定,見下文

回答

2

的Bug。1如說here

所以這句法作品(和正常工作)

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "filter": { 
      "term": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

謝謝你們!

5

我的評論下面似乎工作:固定ElasticSearch 1.5

GET my_index/movie/_search 
{ 
    "query": { 
     "nested": { 
      "path": "actors", 
      "query": { 
       "filtered": { 
        "filter": { 
         "term": {"actors.id": 12345} 
        } 
       } 
      }, 
      "inner_hits" : {} 
     } 
    } 
}' 
+0

是的它的工作原理,謝謝你!不過,由於您提供的語法與官方的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

+0

這確實有效。 – 2017-11-13 11:23:47