2014-10-08 71 views
2

ElasticSearch中哪種存儲產品屬性的方法更加正確?ElasticSearch:如何存儲產品屬性

嵌套對象:

"attributes": [ 
    { 
     "name": "color", 
     "value": "White" 
    }, 
    { 
     "name": "size", 
     "value": "S" 
    } 
] 

或鍵值數組?

"attributes": [ 
    {"color": White"} 
    {"size": "S"} 
] 

假設屬性是可搜索的,它們也將用於分面搜索(聚合)。 每個產品可以有不同的屬性,所以鍵(屬性名稱)不固定。

+1

鍵值在ElasticSearch中搜索幾乎總是更好! – 2014-10-08 07:47:18

回答

1

如果您使用

"attributes": [ 
    {"color": White"} 
    {"size": "S"} 
] 

第二種方法您可以直接在字段進行搜索,並建立在這些價值觀方面。

+0

對於每個產品來說,這組屬性是不是不同的問題?我怎樣才能定義這種結構的映射? – 2014-10-08 08:20:20

+0

不,這沒有問題。你必須確保你的領域,你想建立方面,不分析。如果字段非常不同,則可以爲您的屬性應用動態映射:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-dynamic-mapping.html – 2014-10-08 08:29:01

+0

我使用索引將文檔編入索引鍵值屬性結構,但搜索不起作用。所以當我嘗試通過術語「屬性。色彩」來查找時:「紅色」,儘管它們應該是沒有結果的。 – 2014-10-08 08:36:01

0

動態映射模板解決了這個問題:

"dynamic_templates": [{ 
    "string_template": { 
     "path_match": "attributes.*", 
     "mapping": { 
      "index": "not_analyzed" 
     } 
    } 
}]