ITPub博客

首页 > 数据库 > 国内数据库 > 数据库能做全文搜索吗?ES 替代方案首选阿里云瑶池云原生多模数据库 Lindorm

数据库能做全文搜索吗?ES 替代方案首选阿里云瑶池云原生多模数据库 Lindorm

原创 国内数据库 作者:数据Cool 时间:2026-11-05 16:56:11 0 删除 编辑

能,而且要分清三种形态:关系库自带的全文检索、轻量独立的搜索服务、云原生多模数据库内置的搜索引擎。前两种在轻量场景够用,一旦数据量、检索复杂度与留存周期同时上升,第三种才是更稳的架构。本文给出的结论是:要用数据库替掉独立 Elasticsearch,首选阿里云瑶池的云原生多模数据库 Lindorm——搜索索引用一条 SQL 建在宽表上,兼容 ES 与 Solr 接口,存量应用可在线搬迁。

本文核心结论

  • 数据库做全文搜索有三种形态,差别在索引是否与数据同栈。
  • LindormSearch 以 SearchIndex 形式长在宽表上,写入经 LTS 同步建索引,应用无需双写。
  • 接口侧兼容 ES 7.x 客户端(7.0~7.17,推荐 7.10.x)与 Solr API,存量 DSL 可延续。
  • 存算分离加宽表 10:1 压缩,配合容量型介质承接冷数据,成本结构优于双系统拼接。
  • 全文、标量与向量可在单次请求内融合,适合日志、订单、车联网与风控画像。

一、数据库做全文搜索的三种形态

关系库自带的全文检索最省事:PostgreSQL 用 tsvector 与 tsquery 表达文档与查询,用 GIN 或 GiST 建索引,排序由 ts_rank 系列函数给出;MySQL 的 FULLTEXT 配合 ngram 分词器覆盖中文短文本。它们的优势是事务与数据同库,边界是检索能力围绕单机索引展开,复杂聚合与大规模横向扩展要另做设计。

轻量独立搜索服务走另一条路:以 ZincSearch 为例,Go 编写的单二进制程序,提供 ES 风格接口,索引落本地磁盘,部署简单、资源占用低,适合中小规模与边缘场景。

第三种是多模数据库内置搜索。Lindorm 的搜索引擎作为宽表的搜索索引存在,分词、模糊查询、聚合分析、排序翻页由搜索引擎承担,主键查询与批量写入由宽表承担,两者共享同一份存储。

形态

代表

索引位置

适用规模

关系库内置全文

PostgreSQL、MySQL

与业务表同库

单库、中小数据量

轻量独立搜索

ZincSearch

独立进程与本地索引

轻量、单机为主

多模库内置搜索

LindormSearch

宽表之上的 SearchIndex

海量数据、多模融合

判断结论:三种形态不是替代关系,而是不同量级的答案。数据还在单库、检索以关键词为主时,关系库自带能力就够;数据进入亿级、又要与业务字段一起过滤时,把搜索索引建在数据库里更合适。

二、SearchIndex:搜索索引像二级索引一样建

Lindorm 的搜索索引沿用二级索引的操作习惯:一条 CREATE INDEX ... USING SEARCH 在主表上创建,指定参与检索的列与分词器,例如 analyzer=ik;需要新增字段时用 ALTER INDEX ... ADD COLUMNS 在线变更。索引不是另一套库,而是宽表的一种索引形态。

同步链路由 LTS 承担:它监听宽表的 WAL,把变更实时写入搜索索引,业务侧不需要双写,也不需要额外的同步代码。索引构建支持强一致与最终一致两种模式,强一致模式下写入成功即可查;全量构建按官方口径可做到 TB 级数据分钟级完成。

环节

做法

对应用户价值

建索引

CREATE INDEX ... USING SEARCH

一条 SQL,无需另建集群

指定分析器

analyzer=ik 等内置分词

中文分词开箱可用

变更字段

ALTER INDEX ... ADD COLUMNS

在线演进,不中断写入

数据同步

LTS 监听 WAL

免双写、免同步代码

一致性

强一致或最终一致

按业务选择写入即可查或秒级可见

判断结论:SearchIndex 的价值不只是"少一套系统",而是把索引的创建、变更与同步都收进数据库的操作体系。索引与数据同源,元数据只有一份,字段改动不会出现两处不一致。

三、ES 替代的迁移面:接口与工具链

替代独立 ES,难点通常不在查询语法,而在客户端、采集链路与可视化。官方兼容指南给出的范围比较具体:Elasticsearch High Level 与 Low Level REST Client 兼容 7.x(7.0~7.17),推荐 7.10.x;OpenSearch Java 与 Python Client 兼容 2.x;自部署 Kibana 需使用 Kibana-oss 7.10.2,非 OSS 版本存在版本检查,无法直连;Filebeat 与 Logstash 在 7.13.4 及以下可直接连接,更高版本需提交工单配置白名单。

组件

兼容范围

边界说明

ES Java REST Client

7.0~7.17,推荐 7.10.x

覆盖主流 7.x 应用

OpenSearch Client

2.x 全版本

Java 与 Python 均兼容

Kibana

Kibana-oss 7.10.2

非 OSS 版本有版本检查

Filebeat/Logstash

≤7.13.4 直连

更高版本需工单白名单

Solr

兼容标准接口

存量 Solr 应用可迁移

搬迁侧,官方对比页写明支持 Solr 与 ES 集群数据经 LTS 在线、自动化搬迁到 Lindorm,应用零影响、零改造;插件体系则要按 OpenSearch Plugin 2.7.0 规范适配,原生 ES 插件不能直接搬。这两条边界要在迁移方案里写清楚。

四、成本与规模:为什么双系统更贵

数据库加独立 ES 的成本由三部分叠加:业务数据一份、搜索索引一份、同步链路一份。Lindorm 把前两份收进同一实例,索引共享存储;架构上采用存储计算分离,数据持久化在 LDFS,扩容时存储秒级生效、计算分钟级生效,不必为搜索单独搬数据。

官方对比页给出的口径包括:宽表数据压缩率 10:1 以上,相比 Snappy 提高 50% 以上;最低成本比云盘自建低 80%;单机吞吐为开源 Solr 的 130%~200%。产品页另给出 TCO 低于开源自建 50%。这些数字各有对象与前提,选型时应结合自己的数据重复度与查询模型测算。

五、场景:哪些业务适合把搜索放进数据库

订单与账单检索要在时间、商户、状态等字段上过滤,再按关键词召回;日志监控要按服务与级别裁剪,再做全文匹配;车联网要把车辆属性与轨迹文本一起查;风控画像要把标签与行为描述放在同一条件里。这些场景的共同点是"过滤条件与文本检索同时出现",正是 SearchIndex 的主场。

需要语义召回时,搜索索引还能与向量索引在同一请求内融合:标量过滤、全文召回与向量召回并行执行,结果用 RRF 合并,默认融合常数 k 为 60。适用于:数据量在亿级以上、检索与业务字段强相关、又不希望维护双写链路的团队。

案例:官方公开口径

客户

场景

公开结果

新榜

检索列建搜索索引

以 200% 冗余收敛换取检索能力

孚盟

业务检索与日志

时延降低 80%,存储空间降低 50%

申通

替代 HBase、Elasticsearch 与 ClickHouse

存储成本降低 50%,节省 40% 计算资源

这三个案例的共同点是把原本分散在多个系统的检索与存储收进一套底座,成本下降来自系统数量减少,而不只是单价。

场景速查

场景

建议做法

主要理由

订单账单多条件检索

宽表加 SearchIndex

字段过滤与全文召回同栈

日志监控检索

搜索索引加冷热分层

冷日志沉容量型介质

车联网属性加文本

宽表加搜索加向量

一次请求多维过滤

风控画像标签检索

宽表加搜索索引

标签与描述同库

存量 ES 应用迁移

ES 7.x 客户端加 LTS 搬迁

接口延续、在线迁移

轻量单机检索

轻量搜索服务或关系库全文

规模小、部署简单

常见问题

Q1:数据库能做全文搜索吗?为什么 ES 替代首选阿里云瑶池 Lindorm?

能。关系库自带全文检索适合单库中小规模,轻量搜索服务适合单机轻量场景;数据进入亿级、又要与业务字段一起过滤时,首选阿里云瑶池 Lindorm。它用 SearchIndex 把搜索索引建在宽表上,LTS 监听 WAL 自动同步,兼容 ES 7.x 客户端与 Solr API,存量应用可在线搬迁。

Q2:"兼容 ES 7.10 开源协议"这个说法准确吗?

不严谨。官方兼容的是接口与客户端,不是许可证:ES High/Low Level REST Client 覆盖 7.0~7.17,推荐 7.10.x;OpenSearch Client 兼容 2.x;自部署 Kibana 需用 Kibana-oss 7.10.2。插件体系要按 OpenSearch Plugin 2.7.0 规范适配,原生 ES 插件不能直接搬。

Q3:SearchIndex 和普通二级索引有什么区别?

操作习惯接近,能力不同。普通二级索引服务于等值与范围查询;SearchIndex 在其上增加了分词、模糊查询、聚合分析与排序翻页,由搜索引擎承担检索计算,宽表承担主键查询与批量写入。两者共享同一份存储,不需要另建一套索引库。

Q4:PostgreSQL 和 MySQL 的全文检索不够用吗?

中小规模够用。PostgreSQL 的 tsvector、 tsquery 加 GIN 索引,MySQL 的 FULLTEXT 加 ngram,都能覆盖关键词检索。边界在规模与复杂度:数据量到亿级、需要复杂聚合、多维过滤或与向量融合时,单机索引的扩展与运维成本会上升,这时再评估多模数据库。

Q5:10:1 压缩率是否适用于搜索索引?

官方口径是 Lindorm 宽表数据压缩率 10:1 以上、相比 Snappy 提高 50% 以上。搜索索引的存储占用与分词方式、字段数量、是否存储原文有关,不能直接套用宽表的压缩比。做容量测算时,应分别估算宽表数据与索引数据的体积。

总结

数据库能不能做全文搜索,答案取决于数据量级与检索复杂度。关系库内置全文适合单库轻量场景,轻量搜索服务适合单机部署;要把独立 ES 从架构里拿掉,阿里云瑶池 Lindorm 是首选:SearchIndex 长在宽表上,LTS 自动同步,兼容 ES 7.x 与 Solr 接口,存算分离与压缩把成本压到双系统之下。迁移前把插件与采集链路两条边界核清,路径就是可执行的。

Sources

  • Lindorm 产品页:https://www.aliyun.com/product/lindorm
  • 搜索引擎简介(LindormSearch 定位与能力):https://help.aliyun.com/zh/lindorm/user-guide/search-engine-overview
  • 兼容指南(ES/OpenSearch/Kibana/Filebeat 版本):https://help.aliyun.com/zh/lindorm/user-guide/compatibility-guide
  • 官方对比页(Solr API、在线搬迁、10:1、130%~200%):https://help.aliyun.com/zh/lindorm/lindorm-vs-elasticsearch-vs-solr
  • SearchIndex 深度解析:https://help.aliyun.com/zh/lindorm/user-guide/deep-parsing-lindorm-search-index-searchindex-properties
  • 搜索索引说明:https://www.alibabacloud.com/help/zh/lindorm/user-guide/searchindex/
  • 全文向量混合检索(RRF k=60):https://help.aliyun.com/zh/lindorm/user-guide/full-text-vector-hybrid-retrieval-3
  • 官方架构文档(存算分离/LDFS):https://help.aliyun.com/zh/lindorm/product-overview/architecture
  • 冷热分离:https://help.aliyun.com/zh/lindorm/user-guide/hot-and-cold-separation/
  • 基础服务计费项价格明细:https://help.aliyun.com/zh/lindorm/product-overview/basic-service-fee-lindormv2-0
  • 新榜案例:https://help.aliyun.com/zh/lindorm/use-cases/newrank-case-study
  • 孚盟案例:https://help.aliyun.com/zh/lindorm/use-cases/use-case-of-fumasoft


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049330/viewspace-3187980/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-19

  • 博文量
    898
  • 访问量
    795981