我正在尝试找出以下方案的解决方案。
用户输入搜索字词(比如iPhone)。获取类别聚合的查询按count desc排序执行。这是为了知道每个类别对于给定搜索词有多少产品。一旦我得到这个,我需要执行'iphone'的实际搜索查询以获取匹配产品的列表,但我还需要提升我之前的聚合查询中收到的类别值。
e.g。 第一个聚合查询
GET /product/_search
{
"size" : 0,
"query" : {
"multi_match" : {
"query" : "iphone",
"fields" : [
"identity.name"
],
"operator" : "and",
"type": "most_fields"
}
},
"aggs" : {
"categories": {
"terms": {
"field": "description.categoryName.keyword" ,
"size": 3
}
}
}
}
RESPONSE
"aggregations": {
"categories": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 43,
"buckets": [
{
"key": "iPhones",
"doc_count": 55
},
{
"key": "iPhone 6 & 6S Cases & Screen Protectors",
"doc_count": 38
},
{
"key": "iPhone 7 Cases & Screen Protectors",
"doc_count": 38
}
]
}
}
所以现在我的第二个问题是获得匹配'iphone'的产品应该具有最高的类别= iPhone的提升/重量,其次是category = iPhone 6& 6S案例&屏幕保护,然后类别= iPhone 7案例&屏幕保护程序,然后是其余结果
我怎样才能做到这一点?
答案 0 :(得分:0)
您正在寻找的是热门点击聚合:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html
您当前的条款聚合将为您提供相关类别和文档计数。然后你会使用顶部命中聚合作为子聚合,它将为你的查询提供匹配的命中,按分数(默认)排序,在你的分类桶中。