2017-08-04 79 views
0

您好我有ES這個文件與嵌套類型:嵌套查詢應適用於所有對象中嵌套數組

{ 
     "id": "92210f7f-b8a4-4d55-877d-8708154aa004", 
      "additionalData": { 

       "devices_nested": [ 
       { 
        "version_string": "1" 
       }, 
       { 
        "os_string": "Windows", 
        "version_string": "3" 
       }, 
       { 
        "os_string": "Centos" 
       } 
       ] 

      } 

我想要做的查詢additionalData.devices_nested不包含任何元素os_string屬性不存在,這意味着我想避免這樣的文件,其中一些條目可能具有或不具有os_string屬性。這裏是我的查詢:

{ 
    "query": { 
    "nested": { 
     "query": { 
     "bool": { 
      "must": { 
      "exists": { 
       "field": "additionalData.devices_nested.os_string" 
      } 
      } 
     } 
     }, 
     "path": "additionalData.devices_nested" 
    } 
    } 
} 

但我總是得到例如文檔作爲結果,因爲至少有一個元素滿足查詢有os_string財產。 是否有可能使查詢返回文檔,其中devices_nested中的所有元素都有os_string屬性?

回答

0

是否有可能使查詢將返回文件,其中devices_nested中的所有元素都具有os_string屬性?

是的,這是可能的。而不是必須存在,你必須使用必須不缺的方法。

在下面的查詢,裏面nested的布爾條件將匹配沒有os_string場嵌套對象中的至少一個,然後,外面must_not查詢將排除這些文件的所有文件。因此,您將只在所有嵌套對象中獲得包含os_string字段的文檔:

{ 
    "query": { 
    "bool": { 
     "must_not": { 
      "nested": { 
       "query": { 
       "bool": { 
        "must_not": { 
         "exists": { 
          "field": "additionalData.devices_nested.os_string" 
         } 
        } 
       } 
       }, 
       "path": "additionalData.devices_nested" 
      } 
     } 
    } 
    } 
}