You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLite中使用FTS5实现子字符串搜索

在SQLite FTS5中实现子串搜索(匹配'land'这类中间子串)

FTS5默认的匹配规则限制了直接实现子串搜索的方式:

  • MATCH 'land'仅匹配完整的独立令牌(即单独的'land'单词)
  • MATCH '*land'会报错,因为FTS5仅支持前缀通配符(如land*),不支持后缀或中间通配符

符合要求的解决方案

利用FTS5自动生成的内置术语表([虚拟表名]_terms)来实现子串匹配,无需额外分词器,也避免了直接在主表使用LIKE的性能问题:

SELECT DISTINCT tf.*
FROM TrialFTS tf
JOIN TrialFTS_terms t ON tf.rowid = t.doc
WHERE t.term LIKE '%land%';

方案说明

  1. FTS5会为每个虚拟表自动创建对应的[表名]_terms虚拟表,存储内容包括:分词后的令牌(term字段)、令牌所属文档的rowid(doc字段)等
  2. 通过关联主表与术语表,筛选出令牌中包含'land'子串的记录,再通过DISTINCT去重(避免同一文档因多个匹配令牌重复返回)

这个方案仅依赖FTS5模块自身功能,未使用额外分词器,也没有直接在主表文本列执行LIKE全表扫描,满足你的需求。

内容的提问来源于stack exchange,提问作者Sayansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:32:45