【发布时间】:2018-08-06 09:06:06
【问题描述】:
我在 elasticsearch 中有一个类型产品,其中包含一个包含多个 id 的列,其中一些是相同的。 还有包含当前价格和数量的列。我希望得到每个唯一 ID 的价格 * qte 的总和。
id price qte
__ _____ _________
1 25 4
1 25 4
1 25 4
2 38 2
2 38 2
3 12 3
3 12 3
3 12 3
3 12 3
4 33 6
5 64 8
5 64 8
(如果您想知道为什么会这样,这是因为其他列的值不同,还要注意每个唯一的 id 都有唯一的价格和唯一的数量)
所以我创建了我的聚合:
$id = new \Elastica\Aggregation\Terms('id');
$id->setField('id')->setSize(0);
$qte_price = new \Elastica\Aggregation\Sum('qte_price');
$qte_price->setScript('doc["price"].value * doc["qte"].value');
$id->addAggregation($qte_price);
这里的问题是qte_price 在执行setScript() 之前没有使用id 上的第一个聚合,因此对所有id 甚至重复的id 求和price * qte 的总数。
换句话说,我想计算id=1 => 25*4(而不是(25*4)*3,id=2 => 38*2(而不是(38*2)*2) ..等)
我发现解决这个问题的技巧是将答案除以 doc_count,但我正在寻找使用 Elastica 的官方方法。
【问题讨论】:
标签: php elasticsearch elastica