我是Elasticsearch的绝对新手,并试图了解聚合。我需要运行与现有聚合并行的聚合。 这是示例文档页面结构。
{
"brand": {
"list": [
"Apple"
],
"name": "Apple"
},
"title": {
"list": [
"Apple Macbook Pro 15 - Intel I7 3,10ghz (2tb|r560|touchid|space) 2017"
]
},
"category": {
"l1": {
"name": "Computers/Tablets & Networking",
"id": 58058
},
"l2": {
"name": "Laptops & Netbooks",
"id": 175672
},
"l3": {
"name": "Apple Laptops",
"id": 111422
},
"l4": {},
"l5": {},
"l6": {}
}
}
这是我正在运行的现有查询,用于获取给定标题的前5个类别名称的聚合,这是完美的。
{
"size": 0,
"aggs":
{
"categoryId":
{
"filter":
{
"bool":
{
"filter": [
{
"term":
{
"title.list": "phone"
}
}]
}
},
"aggs":
{
"results":
{
"terms":
{
"field": "category.l2.id",
"size": 5
},
"aggs":
{
"categoryName":
{
"terms":
{
"field": "category.l2.name.keyword",
"size": 1
}
}
}
}
}
}
}
}
接下来,我需要找到与标题关键字搜索相关联的前5个品牌名称,如果可能,按降序排序。 所以我试试这个,但它不起作用,也引发了错误。
{
"size": 0,
"aggs":
{
"categoryId":
{
"filter":
{
"bool":
{
"filter": [
{
"term":
{
"title.list": "phone"
}
}]
}
},
"aggs":
{
"results":
{
"terms":
{
"field": "category.l2.id",
"size": 5
},
"aggs":
{
"categoryName":
{
"terms":
{
"field": "category.l2.name.keyword",
"size": 1
}
}
}
},
"brands_names":
{
"terms":
{
"field": "brand.name",
"size": 10
},
"aggs":
{
"brand_top_hits":
{
"top_hits":
{
"size": 1
}
}
}
}
}
}
}
}
我知道我错过了一些明显的东西。我应该使用价值计数或热门点击查询来查找前5大品牌吗?如何将其与现有类别查询相结合?
答案 0 :(得分:0)
我使用此查询
{
"size": 0,
"aggs": {
"categoryId": {
"filter": {
"bool": {
"filter": [
{
"term": {
"title.list": "bag"
}
}
]
}
},
"aggs": {
"results": {
"terms": {
"field": "category.l2.id",
"size": 5
},
"aggs": {
"categoryName": {
"terms": {
"field": "category.l2.name.keyword",
"size": 1
}
},
"brands_names": {
"terms": {
"field": "brand.name.keyword",
"size": 10
}
}
}
}
}
}
}
}