我有产品,有很多功能。Schema看起来像这样
[{
name: "Test product 1",
features: [
...
{name: "color", value: "Blue"},
{name: "size", value: "M"},
...
]
},{
name: "Test product 2",
features: [
...
{name: "color", value: "Blue"},
{name: "size", value: "XL"}
...
]
},{
name: "Test product 3",
features: [
...
{name: "color", value: "White"},
{name: "size", value: "XL"}
...
]
}]
我想要得到每个特征的每个不同值的facet。像这样:
{
color: {
Blue: 2,
White: 1
},
size: {
M: 1,
XL: 2
}
}
如何设计一个合适的索引模式和如何查询这些方面?我是否应该创建两个不同的数组,一个用于功能名称,另一个用于"对象"类型的项…然后进行多个查询,首先为功能名称,然后为每个嵌套的方面?…
对不起,我很困惑,不明白如何得到这个结果与facet
为什么要使用facet ?facet已被弃用,使用聚合…
这是一种使用facet和聚合进行搜索的方法。1. 创建索引并放置映射
PUT x3
POST x3/x2/_mapping
{
"x2":{
"properties": {
"features" :{
"type": "nested"
}
}
}
}
POST x3/x2/1
{
"name" :"Test product 1",
"features": [
{"name": "color", "value": "Blue"},
{"name": "size", "value": "M"}
]
}
POST x3/x2/2
{
"name": "Test product 2",
"features": [
{"name": "color", "value": "Blue"},
{"name": "size", "value": "XL"}
]
}
使用facet搜索
POST x3/x2/_search
{
"size": 0,
"facets": {
"sizeFacet": {
"terms": {
"field": "features.value",
"size": 10000
},
"facet_filter": {
"term": {
"features.name": "color"
}
},
"nested": "features"
},
"colorFacet": {
"terms": {
"field": "features.value",
"size": 10000
},
"facet_filter": {
"term": {
"features.name": "size"
}
},
"nested": "features"
}
}
}
使用聚合进行搜索。
POST x3/x2/_search
{
"size": 0,
"aggs": {
"features": {
"nested": {
"path": "features"
},
"aggs": {
"names": {
"terms": {
"field": "features.name",
"size": 0
},
"aggs": {
"value": {
"terms": {
"field": "features.value",
"size": 0
}
}
}
}
}
}
}
}