2017-01-27 66 views
0

大家好,我的數據是通過以下方式構成:如何使用彈性搜索查詢對象的鍵?

student{ 
subjects{ 
    biology:{ 
    0: "A2-Level" 
    1:"AS-Level" 
    2:"University" 
    } 
} 
} 

我的主要指標是學生,所以我的屬性如下

"mappings":{"student":{"properties":{"subjects":{"type":"nested","properties":{"biology":{"type":"string"},"english":{"type":"string"}}} 

即時通訊目前這樣做搜索:

var query = { 
      index: 'firebase', 
      type: 'student', 
      "body": { 
      "query": { 
       "bool": { 
       "must": [ 
     { 
     "nested": { 
      "path": "subjects", 
      "query": { 
      "bool": { 
       "must": [ 
       { "exists": { "field": english } } 
       ] 
      } 
      } 
     } 
     } 

    ] 

返回正在學習英語的學生。但是沒有任何東西被退回?任何人都可以建議我去哪裏錯了嗎?

+0

您需要檢查的'subjects.english'的存在字段,不僅是'英文' – Val

回答

3

您應該檢查subjects.english代替英語 所以,你的查詢應該是這個樣子領域:

{ 
"query": { 
    "bool": { 
    "must": [ 
     { 
      "nested": { 
       "path": "subjects", 
       "query": { 
       "bool": { 
        "must": [ 
         { 
          "exists": { 
          "field": "subjects.english" 
          } 
         } 
        ] 
       } 
       } 
      } 
     } 
    ] 
    } 
} 
} 
+0

由於某種原因,這似乎不再起作用了?任何想法爲什麼?我檢查了彈性搜索文檔 –

+0

不知道..如果您可以提供更多詳細信息,例如您正在查看的是什麼異常或正在搜索的字段映射......您希望在搜索響應中使用的文檔 –

+0

不必擔心它仍然有效!正在撓我的頭一陣子,但意識到我在我的查詢中有一個尾隨空間:) –