我目前的文档索引具有以下结构:
"ProductInteractions": {
"properties": {
"SKU": {
"type": "string"
},
"Name": {
"type": "string"
},
"Sources": {
"properties": {
"Source": {
"type": "string"
},
"Type": {
"type": "string"
},
}
}
}
}
我想在搜索此类型时聚合结果。我最初只想要Source
字段中的术语,这很容易。我刚刚为terms
字段使用了Source
聚合。
现在我想聚合Type
字段。但是,类型与来源有关。例如,我可以这样有两个Sources
:
{
"Source": "The Store",
"Type": "Purchase"
}
和
{
"Source": "The Store",
"Type": "Return"
}
我想展示每种不同来源的不同类型及其数量。换句话说,我希望我的回答是这样的:
{
"aggs": {
"Sources": [
{
"Key": "The Store",
"DocCount": 2,
"Aggregations": {
"Types": [
{
"Key": "Purchase",
"DocCount": 1
},
{
"Key": "Return",
"DocCount": 1
}
]
}
}
]
}
}
有没有办法获得这些子聚合?
答案 0 :(得分:1)
是的,但是您需要稍微更改映射以使字段“not_analyzed”。
"ProductInteractions": {
"properties": {
"SKU": {
"type": "string"
},
"Name": {
"type": "string"
},
"Sources": {
"properties": {
"Source": {
"type": "string",
"index": "not_analyzed"
},
"Type": {
"type": "string",
"index": "not_analyzed"
},
}
}
}
}
然后您可以使用以下聚合来获得您想要的内容:
{
"aggs": {
"sources": {
"terms": {
"field": "Sources.Source"
},
"aggs": {
"types": {
"terms": {
"field": "Sources.Type"
}
}
}
}
}
}