V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
itskingname
V2EX  ›  问与答

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

  •  
  •   itskingname · 2020-06-05 15:40:29 +08:00 · 1074 次点击
    这是一个创建于 1928 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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 格式。

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1622 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:26 · PVG 00:26 · LAX 09:26 · JFK 12:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.