gpt4 book ai didi

elasticsearch - 重组Elasticsearch索引以允许对值之和进行过滤

转载 作者:行者123 更新时间:2023-12-02 22:13:03 26 4
gpt4 key购买 nike

我有一个产品索引。

每个产品都有几种变体(可以是几百种,也可以是数百种,每种都有颜色和大小,例如红色)

每个变体在一定数量的仓库(大约100个仓库)中可用(一定数量)。

仓库有代码,例如AB,XY,CD等

如果可以选择,我会将其编入索引:

stock: {
Red: {
S: { AB: 100, XY: 200, CD: 20 },
M: { AB: 0, XY: 500, CD: 20 },
2XL: { AB: 5, XY: 0, CD: 9 }
},
Blue: {
...
}
}

这是我可能会收到的一种客户查询:

请向我显示所有在仓库AB和XY中具有Red.S颜色(最少100个)的产品。

所以这可能是一个类似的过滤器
Red.S.AB > 100 AND Red.S.XY > 100

我不是在这里编写整个 filter查询,而是在 flex 方面很简单。

我们可能还会收到SUM查询,例如AB和XY处的库存总和应大于500。

通过 Red.S.AB + Red.S.XY > 500可以通过脚本过滤器轻松实现

问题是,给定100个仓库,100种尺寸,25种颜色,这很容易需要100 * 100 * 25 = 250k映射。 Elasticsearch根本无法处理那么多键。

简单的答案是使用嵌套文档,但是嵌套文档会带来一个特殊的问题。我们不能汇总给定的嵌套文档选择,并且嵌套文档很慢,特别是当我们每个产品要有250k时。

除了 flex 之外,我还愿意接受外部解决方案。我们是rails / postgres堆栈。

最佳答案

您可以使用带有变体的产品索引,这很好,但是我会使用另一个索引来管理与多仓库库存相关的任何事物。每个产品/尺寸/颜色/仓库一份文件,并带有相关计数。例如:

{
"product": 123,
"color": "Red",
"size": "S",
"warehouse": "AB",
"quantity": 100
}

{
"product": 123,
"color": "Red",
"size": "S",
"warehouse": "XY",
"quantity": 200
}

{
"product": 123,
"color": "Red",
"size": "S",
"warehouse": "CD",
"quantity": 20
}
etc...

这样一来,您的股票查询将更加灵活,因为您所需要做的只是对字段( productcolorsizewarehouse)进行过滤,并简单地在 quantity字段上进行汇总,求和,求平均值或您所需要的可能会想到。

您可能需要利用 bucket_script pipeline aggregation来确定总和是否高于或低于所需阈值。

通过简单地为任何给定的组合编制新数量的索引来维护库存移动,也比每次缺货时都要更新主产品文档要容易得多。

无需脚本,无需嵌套文档。

关于elasticsearch - 重组Elasticsearch索引以允许对值之和进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62020947/

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