在ElasticSearch中,哪种存储产品属性的方式更正确?
嵌套对象:
"attributes": [
{
"name": "color",
"value": "White"
},
{
"name": "size",
"value": "S"
}
]
或键值数组?
"attributes": [
{"color": White"}
{"size": "S"}
]
假设属性是可搜索的,它们也将用于分面搜索(聚合)。 每个产品都可以有不同的属性,因此密钥(属性名称)不固定。
答案 0 :(得分:2)
我发现第一种方式(嵌套)更好,因为它允许甚至在解决此类问题的属性名称上进行聚合查询:
等
答案 1 :(得分:1)
如果您使用第二种方法
"attributes": [
{"color": White"}
{"size": "S"}
]
您可以直接在字段中搜索并在这些值上构建方面。
答案 2 :(得分:-1)
动态映射模板解决了这个问题:
"dynamic_templates": [{
"string_template": {
"path_match": "attributes.*",
"mapping": {
"index": "not_analyzed"
}
}
}]