gpt4 book ai didi

elasticsearch - Elastic Search聚合如何在电子商务网站中更新

转载 作者:行者123 更新时间:2023-12-03 00:33:36 25 4
gpt4 key购买 nike

电子商务网站中存在多个聚合,如果用户选择过滤器,其他聚合如何更新?无论是针对每个聚合发送单个请求还是单个请求都将处理所有聚合更新。

例:

品牌:
abc(100)
xyz(50)

颜色:
红色(110)
白色(40)

大小:
中(60)
小(40)
大(50)

如果用户选择“红色”和“中等”
是否会发送单独的“颜色”聚合和“尺寸”聚合请求?
说明这在实时电子商务网站中是如何发生的

最佳答案

假设选择了品牌“brand1”和“brand2”,选择了颜色“color1”和“color2”,并选择了尺寸“size1”和“size2”。

结果将仅显示满足以下所有条件的产品:

  • 其品牌为“brand1”或“brand2”
  • 其颜色为“color1”或“color2”
  • 它的大小是“size1”或“size2”

  • 品牌类别的汇总结果将在所有产品上进行过滤,以使每个产品都满足以下所有条件:
  • 其颜色为“color1”或“color2”
  • 它的大小是“size1”或“size2”

  • 颜色和尺寸类别的情况与此类似。

    考虑到所有这些因素,我们可以创建一个Elasticsearch查询请求以提供所有结果以及所有聚合(请参见下文)。
    POST _search
    {
    "filter": {
    "bool": {
    "must": [
    {
    "terms": {
    "brand": [
    "brand1",
    "brand2"
    ]
    }
    },
    {
    "terms": {
    "color": [
    "color1",
    "color2"
    ]
    }
    },
    {
    "terms": {
    "size": [
    "size1",
    "size2"
    ]
    }
    }
    ]
    }
    },
    "aggs": {
    "filtered_brand_aggs": {
    "filter": {
    "bool": {
    "must": [
    {
    "terms": {
    "color": [
    "color1",
    "color2"
    ]
    }
    },
    {
    "terms": {
    "size": [
    "size1",
    "size2"
    ]
    }
    }
    ]
    }
    },
    "aggs": {
    "brand_aggs": {
    "terms": {
    "field": "brand"
    }
    }
    }
    },
    "filtered_color_aggs": {
    "filter": {
    "bool": {
    "must": [
    {
    "terms": {
    "brand": [
    "brand1",
    "brand2"
    ]
    }
    },
    {
    "terms": {
    "size": [
    "size1",
    "size2"
    ]
    }
    }
    ]
    }
    },
    "aggs": {
    "color_aggs": {
    "terms": {
    "field": "color"
    }
    }
    }
    },
    "filtered_size_aggs": {
    "filter": {
    "bool": {
    "must": [
    {
    "terms": {
    "color": [
    "color1",
    "color2"
    ]
    }
    },
    {
    "terms": {
    "brand": [
    "brand1",
    "brand2"
    ]
    }
    }
    ]
    }
    },
    "aggs": {
    "size_aggs": {
    "terms": {
    "field": "size"
    }
    }
    }
    }
    }
    }

    这是最通用的查询。当然,该查询必须根据过滤器选择进行修改。如果说未选择品牌过滤器,则品牌字段的所有 terms过滤器都会消失。其他 Realm 也一样。当没有选择过滤器时,基本上可以得到以下查询:
    POST _search
    {
    "aggs": {
    "brand_aggs": {
    "terms": {
    "field": "brand"
    }
    },
    "color_aggs": {
    "terms": {
    "field": "color"
    }
    },
    "size_aggs": {
    "terms": {
    "field": "size"
    }
    }
    }
    }

    因此,每次更改过滤器选择时,都会触发一个新查询,并更新结果和汇总。

    关于elasticsearch - Elastic Search聚合如何在电子商务网站中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847905/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com