2015-02-09 186 views
6

我想寫一個查詢使用query_string檢索嵌套對象的數據查詢。Elasticsearch query_string嵌套查詢

我願做查詢的例子是這樣的一個:

{ 
    "query": { 
    "query_string": { 
     "query": "a.id:2" 
    } 
    } 
} 

其中「A」是一個嵌套的對象,「ID」是「一」的字段。

我知道我可以成功地執行使用使用嵌套查詢這個任務,編寫一個查詢,如:

{ 
    "nested": { 
    "path": "a" 
    "query_string": { 
     "query": "a.id:2" 
    } 
    } 
} 

不過,我想,以避免它。我不想弄清楚用戶正在搜索嵌套字段並修改查詢。 我試圖使用「fields」參數,但它看起來不適用於嵌套對象。

是否可以使用「query_string」查詢直接編寫此查詢? 可以獲得什麼語義? (例如,如果我寫「a.id:2 AND ab:10」,我在同一個對象或不同對象中匹配兩個字段?)

+0

我試圖找到這個問題的答案。只是想知道你是否能夠找到任何解決方案。任何幫助將是偉大的!謝謝 – Vineet 2015-05-10 01:25:12

+0

不幸的是我沒有找到解決方案。 – Cale 2015-05-10 15:03:54

回答

7

我正在做更多的研究,發現這可以通過在映射中將include_in_parent設置設置爲true。

現在你應該可以做一個查詢像

{ 
    "query": { 
    "query_string": { 
     "query": "fields.fieldvalue:sometext" 
    } 
    } 
} 

如: -

"mappings": { 
     "documentmetadatavalue": { 
      "properties": { 
       "id": { 
        "type": "string" 
       }, 
       "fields": { 
       "type": "nested", 
       "include_in_parent": true, 
       "properties": { 
        "fieldId": {"type": "string"}, 
        "fieldvalue": {"type": "string"} 
       } 
       } 
      } 
     } 
    } 

讓我知道是否有幫助。

+4

你的建議是一個很好的選擇。但是,請注意,使用「include_in_parent」設置,將嵌套資源展平爲父級對象。 實際上,您將文檔重新編排爲扁平對象。 您正在失去嵌套對象的一些不錯的功能。例如,如果搜索具有至少一個具有特定值的TWO屬性的子對象的父對象,查詢將不會檢查TWO屬性是否具有唯一子對象中的這些值。 – Cale 2015-05-11 13:21:13

+0

查看最近發佈的inner_hits的文檔。你應該能夠使它適用於這個新功能。 (https://www.elastic.co/guide/en/elasticsearch/reference/1.x/search-request-inner-hits.html#nested-inner-hits – Vineet 2015-05-16 21:38:11