【问题标题】:ElasticSearch search, get unique categories of returned productsElasticSearch搜索,获取返回产品的唯一类别
【发布时间】:2019-03-24 10:02:48
【问题描述】:

在拥有数千种产品的电子商店中,我们在顶部有一个搜索栏。搜索的预期输出是一个类别列表,其中有与查询匹配的产品。

例如,搜索“iphone”应返回一个类别列表,其中包含具有该关键字的产品。 例如 - 手机 - 手机电池 - 手机壳 - 等等。

我所做的是在产品索引中搜索关键字,然后获取结果,提取每个产品的 category_id,删除重复项并在类别索引中使用我应该显示的 id 执行 /_mget。

然而这似乎是无效的,因为第一次搜索可能会返回 10k 个结果(如果它太通用的话),然后我会遍历这些结果以获取其 category_id。

我正在寻找更好的方法来完成上述工作。

关于如何使上述更高效的任何想法?

【问题讨论】:

    标签: elasticsearch elasticsearch-2.0


    【解决方案1】:

    查看 Elasticsearch Aggregationshttps://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
                    }
                ]
            }
        }
    }
    

    【讨论】:

    • 这正是我所需要的。谢谢! (虽然我仍然需要进行 2 次查询,但这样效率更高!)
    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2023-04-06
    • 1970-01-01
    • 2014-09-06
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多