ES 中大量重复数据的合并方案讨论

2020-06-05 15:40:29 +08:00
 itskingname

在 ES 里面,我有 N 条几乎一模一样的数据,每个数据有 40 多个不同的字段,例如:

{'name': 'kingname', 'salary': 999999999, 'comment': '测试环境', ...其他相同的字段...}
{'name': 'kingname', 'salary': 999999999, 'comment': '正式环境', ...其他相同字段...}

他们只有 comment 这个字段不同。我现在的做法是重复存放。所以当我要搜索:

name=kingname 并且 comment=测试环境的时候,可以直接找到数据。

现在由于数据量太大,导致这样重复保存快要撑爆 ES 集群了。所以想把相同的字段只保存一份,把不同的字段通过 id 关联到那个相同的数据上。例如:

相同数据放到 origin_data 索引:{'name': 'kingname', 'salary': 999999999, 'id': '12345', ...其他相同的字段...}
差异数据放在 diff_data 索引:{'id': '12345', 'comment': '测试环境'}
{'id': '12345', 'comment': '正式环境'}

但这样做有个弊端,例如我想搜索:name=kingname 并且 comment=测试环境,我必须先到diff_data索引搜索所有comment=测试环境的数据,拿到他们的 id,然后用这些 id 去origin_data加上name=kingname来进一步搜索。

但如果comment=测试环境可能对应了十万个 id,那么再用这十万个 id 去origin_data去搜索的时候就非常麻烦。

针对这个问题,大家有没有什么好的方案呢?

PS:不建议使用 nested 格式。

1074 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/678999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX