2013-11-22 52 views
0

我正嘗試使用elasticsearch爲電子商務網站構建方面導航。在結果集中獲取elasticsearch嵌套對象的值

商店產品可以有多個變種。我想到的文檔結構如下所示:

PUT /products_test/product/1 
{ 
    "id": "1", 
    "manufacturer": "foobar", 
    "categories": [ 
        "28554568", 
        "28554577", 
        "28554578" 
    ], 
    "variants": [ 
    { 
     "id": "1_a", 
     "color": "blue", 
     "size": "L" 
     "price": "67.99" 
    }, 
    { 
     "id": "1_b", 
     "color": "red", 
     "size": "L" 
     "price": "69.99" 
    } 
    ] 
} 

我將變體定義爲嵌套類型。這樣,下面的查詢將返回包含一個變體相匹配的過濾器的所有文件:

POST /products_test/product/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
      "and": [ 
      {"term": {"categories": "28554568"}}, 
      {"terms": { 
       "variants.color": [ 
       "red" 
       ] 
      }} 
      ] 
     } 
    } 
    } 
} 

現在,我真的想獲得的是,爲了顯示對產品的變型匹配過濾器的變體的ID在類別頁面上。所以在這個例子中,我希望返回第二個變體(1_b)的id。我只獲取結果集中返回的文檔的id。有沒有什麼方法可以從嵌套對象中定義一個值,並返回呢?

回答

1

目前沒有辦法獲取與查詢匹配的嵌套文檔。這是一個known issue和工作/思想已經給予解決它。這個問題的當前狀態是Elasticsearch的獲取階段需要被重構以支持這個特性。

這很重要,會發生,因爲重構也會使elasticsearch的其他部分受益,但它是一個重要的重構。目前沒有ETA可用時間。

我會考慮非規範化您的數據,以便每個變體包含「根對象」數據,然後在您的客戶端內進行分組。

或者,你可以調查父/子映射,但類似的一些限制(不能確定哪些孩子相匹配的has_child查詢),但它確實給多一點靈活性,因爲孩子們可以搜索

+0

感謝獨立文件信息 – user1036651