2014-07-27 241 views
0

我想使用彈性搜索,我卡住試圖查詢嵌套的對象。彈性搜索嵌套對象映射和查詢搜索

基本上我的目的是以下格式我用於嵌套字段

{ 
    "name" : "Some Name", 
    "field2": [ 
      { 
      "prop1": "val1", 
      "prop2": "val2" 
      }, 
      { 
      "prop1": "val3", 
      "prop2":: "val4" 
      } 
     ] 
} 

映射的是以下內容。

PUT /someval/posts/_mapping 
{ 
    "posts": { 
     "properties": { 
      "field2": { 
       "type": "nested" 
      } 
     } 
    } 
} 

現在說我插入了/域元素/職位/ 1 /場/職位/ 2等我有field2.prop1的k值,我想查詢它獲取排序的職位基於最匹配field2.prop1之間的K值我有。什麼是適當的查詢。 另外我嘗試了一個簡單的過濾器,但即使這似乎沒有正確工作。

GET /someval/posts/_search 
{ 
"query": { 
    "filtered": { 
    "query": { 
     "match_all": {} 
    } 
    }, 
    "filter" : { 
     "nested" : { 
      "path" : "field2", 
      "filter" : { 
       "bool" : { 
        "must" : [ 
         { 
          "term" : {"field2.prop1" : "val1"} 
         } 
        ] 
       } 
      }, 
      "_cache" : true 
     } 
    } 
    } 
} 

以上查詢應至少匹配第一篇文章。但它不會返回匹配。任何人都可以幫助澄清這裏有什麼錯嗎?

回答

1

您的json結構中存在問題,您使用了過濾的查詢,但是過濾器(對象)與查詢不同。

找到區別。

POST /someval/posts/_search 
{ 
    "query": { 
     "filtered": { 
     "query": { 
      "match_all": {} 
     }, 
     "filter": { 
      "nested": { 
       "path": "field2", 
       "filter": { 
        "bool": { 
        "must": [ 
         { 
          "term": { 
           "field2.prop1": "val1" 
          } 
         } 
        ] 
        } 
       }, 
       "_cache": true 
      } 
     } 
     } 
    } 
} 
+0

謝謝!有沒有可用於查詢的調試器?還有什麼方法去查詢對象數組中的大多數匹配?與我在帖子 – sriram

+0

中發佈的帖子類似,我使用感,我不知道任何。對於下一部分,也許你會作爲單獨的問題提出,所以其他用戶很容易找到它。 – progrrammer

+0

好的。這也起作用:) – sriram