去年有小伙伴在 asktug.com 论坛讨论 TiDB 是否支持 全文搜索 (Full-text search)。
其实这个需求早在 2016 年的时候就已经提出。
十年磨一剑,这个不是那么迫切的需求,在 AI 时代变成了刚需,近期终于在 TiDB Cloud Serverless 灰度上线。
2025 年 5 月 13 日,TiDB Cloud 版本更新。
TiDB Cloud Serverless 现已为 AI 应用程序提供全文搜索(测试版)。
TiDB Cloud Serverless 现已支持全文搜索(beta 版),使 AI 和检索增强生成 (RAG) 应用程序能够通过精确关键词检索内容。这与基于语义相似度检索内容的向量搜索相辅相成。两种方法的结合显著提升了 RAG 工作流中的检索准确率和答案质量。
主要功能包括:
- 直接文本搜索:直接查询字符串列,无需嵌入。
- 多语言支持:自动检测并分析多种语言的文本,即使在同一表中,也无需指定语言。
- 基于相关性的排序:使用行业标准 BM25 算法对结果进行排序,以实现最佳相关性。
- 原生 SQL 兼容性:无缝使用 SQL 功能(例如筛选、分组和连接)进行全文搜索。
现阶段,全文搜索功能已在Frankfurt (eu-central-1) 和 Singapore (ap-southeast-1)地区上线。
全文搜索功能演示:
- 登陆 TiDB Cloud,在法兰克福创建一个数据库。
我的环境之前已经创建好数据库,可以直接使用。
- 创建带有全文索引的表。
CREATE TABLE stock_items(
id INT,
title TEXT,
FULLTEXT INDEX (title) WITH PARSER MULTILINGUAL
);
- 给已存在的表添加全文索引。
需要先增加 TiFlash 副本,再创建索引。
CREATE TABLE t_text (id int, ct text);
ALTER TABLE t_text
SET TIFLASH REPLICA 2;
ALTER TABLE t_text
ADD FULLTEXT INDEX (ct)
WITH PARSER MULTILINGUAL;
其中,WITH PARSER <PARSER_NAME>
选项支持两个参数:
STANDARD
:快速创建索引,适用于英文内容,用空格和标点符号分割单词。MULTILINGUAL
:支持多种语言,包括英语、中文、日语和韩语。
- 导入文本数据。
执行以下 SQL 写入多种语言的数据。
INSERT INTO stock_items VALUES (1, "イヤホン bluetooth ワイヤレスイヤホン ");
INSERT INTO stock_items VALUES (2, "完全ワイヤレスイヤホン/ウルトラノイズキャンセリング 2.0 ");
INSERT INTO stock_items VALUES (3, "ワイヤレス ヘッドホン Bluetooth 5.3 65時間再生 ヘッドホン 40mm HD ");
INSERT INTO stock_items VALUES (4, "楽器用 オンイヤーヘッドホン 密閉型【国内正規品】");
INSERT INTO stock_items VALUES (5, "ワイヤレスイヤホン ハイブリッドANC搭載 40dBまでアクティブノイズキャンセル");
INSERT INTO stock_items VALUES (6, "Lightweight Bluetooth Earbuds with 48 Hours Playtime");
INSERT INTO stock_items VALUES (7, "True Wireless Noise Cancelling Earbuds - Compatible with Apple & Android, Built-in Microphone");
INSERT INTO stock_items VALUES (8, "In-Ear Earbud Headphones with Mic, Black");
INSERT INTO stock_items VALUES (9, "Wired Headphones, HD Bass Driven Audio, Lightweight Aluminum Wired in Ear Earbud Headphones");
INSERT INTO stock_items VALUES (10, "LED Light Bar, Music Sync RGB Light Bar, USB Ambient Lamp");
INSERT INTO stock_items VALUES (11, "无线消噪耳机-黑色 手势触控蓝牙降噪 主动降噪头戴式耳机(智能降噪 长久续航)");
INSERT INTO stock_items VALUES (12, "专业版USB7.1声道游戏耳机电竞耳麦头戴式电脑网课办公麦克风带线控");
INSERT INTO stock_items VALUES (13, "投影仪家用智能投影机便携卧室手机投影");
INSERT INTO stock_items VALUES (14, "无线蓝牙耳机超长续航42小时快速充电 流光金属耳机");
INSERT INTO stock_items VALUES (15, "皎月银 国家补贴 心率血氧监测 蓝牙通话 智能手表 男女表");
- 使用
FTS_MATCH_WORD()
函数执行全文搜索,检索最相关的 10 个文档。
SELECT * FROM stock_items
WHERE fts_match_word("蓝牙耳机", title)
ORDER BY fts_match_word("蓝牙耳机", title)
DESC LIMIT 10;
需要注意,ORDER BY
中 FTS_MATCH_WORD()
函数的参数需要与 WHERE
中的保持一致。
查看执行计划,注意到返回结果中包含 textSearch
信息。
"id","estRows","task","access object","operator info"
"TopN_11","10.00","root","","Column#4:desc, offset:0, count:10"
"└─TableReader_27","10.00","root","","MppVersion: 2, data:ExchangeSender_26"
" └─ExchangeSender_26","10.00","mpp[tiflash]","","ExchangeType: PassThrough"
" └─TopN_25","10.00","mpp[tiflash]","","Column#4:desc, offset:0, count:10"
" └─TableFullScan_23","15.00","mpp[tiflash]","table:stock_items","textSearch:(top10 蓝牙耳机 IN test.stock_items.title)->Column#4, columns: [id, title, _FTS_SCORE], keep order:false, stats:pseudo"
- 使用 Python SDK (pytidb) 调用全文搜索。
pytidb 是 TiDB 的官方 Python SDK,旨在帮助开发者高效地构建 AI 应用程序。
🔍 支持多种搜索模式:向量搜索、全文搜索、混合搜索 🔄 自动嵌入生成 🎯 高级过滤功能 💱 支持事务 🔌 支持模型上下文协议 (MCP)
具体演示请参阅官方文档:
https://docs.pingcap.com/tidbcloud/vector-search-full-text-search-python
以及代码示例:
https://github.com/pingcap/pytidb/blob/main/examples/fulltext_search/main.py#L96
TiDB 近期资讯
-
【火热报名中】5 月 29 日,TiDB vs MySQL 线上 Meetup 第四期!呼声超高的 TiDB 性能调优最佳实践来啦,这些“绝招”让你事半功倍!转发海报参与 TiDB Chaos Mesh 马克杯抽奖!https://asktug.com/t/topic/1041530
-
4 月 24 日,TiDB vs MySQL Meetup 第三期!探索 TiDB 数据库助力降本增效新范式! https://asktug.com/t/topic/1041533
-
TiDB & PingCAP 十周年! 💗 在数据库的浩瀚星河中,TiDB 因每一位用户、开发者和社区伙伴的支持而闪耀。小伙伴们的每一条建议和反馈,每一次的社区参与和贡献,都让 TiDB 变得更好。
-
3 月 20 日,TiDB vs MySQL 线上 Meetup 第二期!一起探讨国产化+数智化转型浪潮下,选择什么样的数据库方案赋能企业整体提效? https://asktug.com/t/topic/1039327
-
3 月 1 日,TiDB 社区活动在深圳!一起聊聊大规模 TiDB 国产化替代在金融、跨境电商企业的最新实践! https://asktug.com/t/topic/1039586
-
📖【资料下载】全面了解 TiCDC 新架构带来了哪些优化!https://asktug.com/t/topic/1039612
-
📖【资料下载】TiDB 在银行领域交易明细查询场景实践白皮书 https://asktug.com/t/topic/1039487
-
📖 【PPT 下载】从技术的演进方向看数据库选型趋势!https://asktug.com/t/topic/1039331
Have a nice day ~ ☕
🌻 往期精彩 ▼
- 卷疯了!众数据库厂商的征文汇
- TiDB社区&墨天轮 | 专栏征文大赛全面开启,期待您分享TiDB业务实战和运维开发那些事儿
- 「合集」三年 50 篇,TiDB 干货全收录
- 「合集」MySQL 8.x 系列文章汇总
- TiDB 新朋友 DBdoctor
-- / END / --
👉 这里可以找到我
👉 这里有得聊
如果对国产基础软件(操作系统、数据库、中间件)感兴趣,可以加群一起聊聊。 关注微信公众号:少安事务所,后台回复[群],即可看到入口。
如果这篇文章为你带来了灵感或启发,请帮忙『三连』吧,感谢!ღ( ´・ᴗ・` )~