ES加入-按(parent_field * child_field)得分排序

时间:2018-08-30 15:44:10

标签: elasticsearch join

我正在开发一个数字市场,卖家(公司)可以在其中销售产品。每个公司最多可以有10万个产品,每个产品都完全属于一个公司。假设每个产品都有说明(最大10KB)和价格。

现在,每个公司都可以为特定的客户组分配折扣(或基于某些其他业务规则),以便客户的最终价格将计算为:discount * price。我正在尝试提出一个映射模型和一个查询,它将有效地搜索数百万种产品,并按最终价格对它们进行排序,然后返回分页列表。

AFAIK,我的选择是:

  1. 复制折扣信息(可能很复杂!)到产品级别。这是最简单的解决方案,但是每当更改折扣数据时,都将需要重新索引公司的所有产品,并且由于其他原因,这也不是一个很好的选择
  2. 使用加入字段(公司为母公司)。这将是一个不错的选择,因为必须在查询时为每个文档计算标量“折扣*价格”,而且无论如何也不会从数据冗余中受益。
  3. 使用嵌套字段。这是最糟糕的选择,因为产品的可用数量每隔几个小时就会变化,因此每次任何更改
  4. 时,我都必须重新索引公司中的所有产品

另一个问题是, has_parent 查询更加复杂,我仍然不确定是否可以编写一个查询来计算该分数。

我认为选项3将对性能造成极大的破坏,而选项2在编写复杂查询时将非常成问题,因此我将不得不坚持选项1,因为我没有其他可行的选择:(

请帮助我选择正确的方法-非常欢迎任何简单的意见。

0 个答案:

没有答案