V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
itskingname
V2EX  ›  问与答

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

  •  
  •   itskingname · Jun 5, 2020 · 1235 views
    This topic created in 2151 days ago, the information mentioned may be changed or developed.

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 03:09 · PVG 11:09 · LAX 20:09 · JFK 23:09
    ♥ Do have faith in what you're doing.