在拥有数千种产品的eshop中,顶部有一个搜索栏。搜索的预期输出是一个类别列表,其中有与查询匹配的产品。
例如,搜索“ iphone”应返回存在带有该关键字的产品的类别列表。 例如 -手机 -手机电池 -手机套 -等等
我所做的是在产品索引中搜索关键字,然后得到结果,选择每个产品的category_id,删除重复项,并在类别索引中使用应该显示的ID进行/ _mget。
但是,这似乎是无效的,因为第一次搜索可能会返回1万个结果(如果过于笼统),然后我循环遍历以获取其category_id。
我正在寻找实现上述目标的更好方法。
关于如何使上述内容更有效率的任何想法?
答案 0 :(得分:0)
看一下Elasticsearch Aggregations
。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
一个不错的起点是Terms Aggregation
,它是bucket
聚合https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html。
一个例子:
GET /_search
{
"query": {...},
"aggs" : {
"categories" : {
"terms" : { "field" : "category_name" }
}
}
}
响应应该看起来像这样,它将字段值和计数放入buckets
中。
{
...
"aggregations" : {
"categories" : {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets" : [
{
"key" : "Mobile phones",
"doc_count" : 6
},
{
"key" : "Batteries for phones",
"doc_count" : 3
},
{
"key" : "Cases for phones",
"doc_count" : 2
}
]
}
}
}