2016-11-07 71 views
1

我有以下映射ElasticSearch 2.X存在嵌套場過濾器不工作

{ 
    "properties": { 
    "restaurant_name": {"type": "string"}, 
    "menu": { 
     "type": "nested", 
     "properties": { 
     "name": {"type": "string"} 
     } 
    } 
    } 
} 

我試圖過濾所有那些具有可選的「菜單」文件領域存在

GET /restaurnats/_search 
{ 
    "filter": { 
    "query": { 
     "bool": { 
     "must": [ 
      {"exists" : { "field" : "menu" }} 
     ] 
     } 
    } 
    } 
} 

但是,當我嘗試相同的查詢來過濾那些具有「restaurant_name」的文檔時,它工作正常。那麼爲什麼嵌套的現場檢查不起作用?如何讓它工作?

回答

3

您需要使用nested查詢,而不是:

{ 
    "filter": { 
    "query": { 
     "nested": { 
     "path": "menu", 
     "query": { 
      "bool": { 
      "must": [ 
       { 
       "exists": { 
        "field": "menu" 
       } 
       } 
      ] 
      } 
     } 
     } 
    } 
    } 
} 
+0

感謝@val爲解決 – JVK

+0

這似乎不工作的時候可以反邏輯** ** must_not。在我的使用案例中,它返回0個文檔,雖然有很多缺少的字段 – pmishev

+0

@pmishev可以隨意爲您的具體問題創建一個新問題。 – Val