V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn
V2EX  ›  程序员

实际开发中,全文搜索引擎是怎样使用的?全文搜索引擎是数据库的外部索引,还是它本身也可以看作一个数据库?

  •  1
     
  •   yodhcn ·
    yodhcn · 2023-03-25 00:56:34 +08:00 · 1623 次点击
    这是一个创建于 635 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我对"全文搜索引擎"的理解是,它本质上也是一个数据库。

    例如:Elasticsearch 和 MySQL ,虽然二者在

    • 存储数据的方式(关系型数据库 vs 文档型数据库)
    • 索引方式( B+树 vs 倒排索引)

    上有所不同,但它们的主要功能都是存储 & 查询数据。

    如果将 Elasticsearch 看作数据库,那么 Elasticsearch & MySQL 就是两个数据库。

    我的疑惑是,在 Elasticsearch & MySQL 这两者搭配使用时

    1. 数据是怎样存储的?
      按照是否需要模糊搜索,可以将数据库表中的字段分为两类(参与模糊搜索的字段 / 不需要模糊搜索的字段)。那么,Elasticsearch 中是只存储 "参与模糊搜索的字段" 吗?
    2. 数据是怎样查询的?
      什么场景下只查询 Elasticsearch?有没有需要同时在 Elasticsearch & MySQL 中查询的场景?

    例如,实现一个搜索商品的 "高级搜索" 功能,要求除了按照 "商品的名称" 这一字段模糊搜索外,同时还需要:

    • 按照 "商品的卖家"(卖家-商品,一对多)筛选商品
    • 按照 "商品的标签"(标签-商品,多对多)筛选商品
    • 按照 "商品的销量" 排序

    在这个例子里面,只有"商品的名称" 这一字段需要模糊搜索;"商品的卖家" & "商品的标签" 都是商品的 "关系",是按照 "关系" 查找;"商品的销量" 只用来排序

    请问各位老哥,在这种场景下,数据该怎样在 Elasticsearch & MySQL 这两者间存储 & 查询

    5 条回复    2023-03-25 17:49:59 +08:00
    jhdxr
        1
    jhdxr  
       2023-03-25 09:03:57 +08:00
    1. 如果我没有记错,ES 不推荐将自己当做首要存储( primary storage ,怎么翻比较好?。。。)。换言之,你最好保证在 ES 里的数据全丢了以后,你依然能够有别的来源重建它。
    2. 倒排索引只是针对文本的检索,ES 也可以处理别的,比如数字、地理位置、向量等。(做没做好另说)
    3. 你可以将在查询条件中会用到的数据全部导入 ES ,用它完成搜索拿到主键然后回 DB 去拿完整数据
    lower
        2
    lower  
       2023-03-25 15:33:10 +08:00
    除了处理比较复杂的检索外,我觉得用于解决 db 分库分表后还想联合查的问题,应该挺有用处……
    tisswb
        3
    tisswb  
       2023-03-25 16:45:16 +08:00
    数据首先需要写入 mysql ,然后通过管道触发进入 es 索引,各有各的强项与优势,以前做舆情项目的时候搞过。
    Saxton
        4
    Saxton  
       2023-03-25 17:47:17 +08:00
    正好我做过这个业务,可以来回答回答

    首先你要搞清楚 ES 和传统 DB 的区别,ES 一般只做检索,光没有事务这点就足以了
    第二你要知道你想拿 ES 来做什么

    我目前的做法是 ES 只做检索,只要系统上涉及到复杂检索的全部走 ES ,数据在写入时,热点数据同步写入 ES ,冷数据异步写入
    ES 数据冗余为宽表数据,监听 binlog 来实现对冗余的字段进行更新。
    Saxton
        5
    Saxton  
       2023-03-25 17:49:59 +08:00
    在 ES 中数据都是扁平的,没有关系的,ES 更喜欢扁平化的数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1539 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:59 · PVG 00:59 · LAX 08:59 · JFK 11:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.