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

SQLite FTS如何匹配包含指定字符串的所有行?

SQLite FTS 子串匹配解决方案

先明确你遇到的问题根源:

  • ^abc* 是匹配以abc开头的完整token,比如字段值为abc或abcd会被命中,但0abc的token是0abc,并非以abc开头,所以返回0结果。
  • *abc* 报错是因为SQLite FTS的MATCH语法不允许在查询词开头使用*,仅支持在结尾用*做前缀匹配。

针对你需要匹配所有包含abc子串的需求(包括abc、abcd、0abc、0abcd等场景),有两种可行方案:

方案1:直接使用LIKE(简单通用)

如果数据量不大或对性能要求不高,直接用LIKE通配符就能满足需求:

SELECT * FROM notes WHERE notes LIKE '%abc%';

这个语句会匹配所有字段值中包含abc子串的行,完全覆盖你要的场景。

方案2:利用FTS5的Trigram分词器(高性能)

如果你的表是FTS5虚拟表,想要借助全文索引提升查询性能,可以用Trigram分词器实现子串匹配:

  1. 新建表时指定Trigram分词器:
CREATE VIRTUAL TABLE notes USING fts5(content, tokenize='trigram');
  1. 执行查询:
SELECT * FROM notes WHERE notes MATCH 'abc';

Trigram分词器会将文本拆分为连续的三字组合,因此abc会匹配所有包含该子串的内容,同时能借助FTS索引大幅提升查询速度。

如果你的表是FTS3/FTS4,由于不支持Trigram分词器,LIKE是最直接的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:51:00