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

请求一个 Elasticsearch 的一个问题

  •  
  •   yangyifan · 2020-04-16 18:56:53 +08:00 · 1197 次点击
    这是一个创建于 1683 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一个 index 索引用于保存文章的信息。当用户“收藏”了文章,我会把收藏的关联关系放到关系型数据库里(比如:mysql ),当需要实现一个用户收藏的文章列表这样的接口时,应该怎么做是最好的? 我能想到的有两种方案:

    • 数据库和 Elasticsearch 都保存关联,查询的时候直接从 Elasticsearch 去查询。
    • 把数据库里收藏根据规则查询出来,然后在 Elasticsearch 里去 terms query 查询。

    第一种方案的优缺点:

    • 优点:查询的时候方便。
    • 缺点:我能想到的是可能出现更新状态上的问题,仅仅是猜测,没有实际试验过。

    第二种方案的优缺点:

    • 优点:数据准确性。
    • 缺点:如果我在查询某一篇文章的时候还需要返回一个 “是否已经收藏” 状态的时候,还需要查询一次数据库,感觉有点浪费。

    求大神一个比较好的方案。

    4 条回复    2020-04-16 21:39:00 +08:00
    aureole999
        1
    aureole999  
       2020-04-16 19:15:42 +08:00
    第一种的话你是准备在文章的 index 里加个被哪个用户收藏的 field 的吗?还是新建一个用于关联的 index ?
    后者的话好像查询也不会太方便。前者的话如果文章经常被收藏和取消收藏的话每次都得重建文章的索引,不好吧?
    ES 好像即使文章部分没改也会重建整个文档的索引吧
    aec4d
        2
    aec4d  
       2020-04-16 21:05:22 +08:00 via iPhone
    一楼估计没实际用过 ES,es 有 join. 而且不需要重建。数据量不大的情况下第二种有优势,实现非常简单,性能可以接受,不需要考虑同步问题
    数据量大另说
    yangyifan
        3
    yangyifan  
    OP
       2020-04-16 21:38:23 +08:00
    @aureole999 #1 第二种,第一种有点得不偿失了。
    yangyifan
        4
    yangyifan  
    OP
       2020-04-16 21:39:00 +08:00
    @aec4d 谢谢,我尝试一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:41 · PVG 09:41 · LAX 17:41 · JFK 20:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.