【发布时间】:2016-02-15 00:50:03
【问题描述】:
我是 ES 新手,现在我可以使用基本查询和批量插入。我想添加一个聚合来计算整个数据库中单词对的出现次数,以便稍后计算单词密度。
数据的形式为 -
PartNumber, ShopName, WordPair, WordPairCount.
我不确定如何用 Java 编写聚合。我希望最终结果如下:
之前(默认)
A3003, Smiths Shop, 30cm plate, 1
A3001, Johns Shop, 30cm plate, 1
A3005, Johns Shop, 15cm plate, 1
聚合后
A3003, Smiths Shop, 30cm plate, 2
A3001, Johns Shop, 30cm plate, 2
A3005, Johns Shop, 15cm plate, 1
加载数据时计数设置为 1,然后我想运行聚合以有效地将 PartNumber、ShopName 作为键的默认计数相加。因此,最终数据将显示 15cm 盘子 销售量不大,但 30cm 盘子 销售量很大(在两家商店)。
在 SQL 中,这将是一个简单的 group by,并在连接上进行更新。但是我发现 SQL 太慢了。
我没有测试等效的 sql,但我认为它会是 -
update p
set p.wordpartcount = w.x
from part p
inner join (
select wordpair, count(*) as x
from part
group by wordpair
) as w on w.wordpair = p.wordpair
【问题讨论】:
-
如果您使用 groupByWordPair 会出现上述结果,因为 30 cm 有 2 个计数,15cm 有 1 个计数。这是你想要达到的目标吗?
-
我添加了 sql 来澄清我的请求。
-
你想在java中的WordPair上聚合??
-
是的,使用 ES(和 Java)。
标签: elasticsearch java