假设我在 SQLite 3.35 中使用 FTS5 模块创建了一个虚拟表,如下所示:
CREATE VIRTUAL TABLE TrialFTS USING fts5(search);
我已经用数据预先填充了表格。
现在要搜索包含短语“Black”的任何行,我可以使用以下方式进行搜索:
select * from tri where TrialFTS MATCH 'black'
要搜索包含以“Black”开头的任何单词的任何行:
select * from tri where TrialFTS MATCH 'black*'
但我的问题是-如何使用 FTS5 搜索任何包含 'land' 作为 substring 的行,这样我就可以得到包含 'England' 或 'Outlander' 等字样的行
我试过:
select * from TrialFTS where TrialFTS MATCH 'land'
这不起作用,因为在这种情况下“土地”需要是一个完整的标记/短语。
我也试过:
select * from TrialFTS where TrialFTS MATCH '*land'
但这说:
unknown special query: land
我不能使用简单的模式匹配作为“like”关键字。我需要使用没有任何分词器的 FTS5 模块,例如The Experimental Trigram Tokenizer
请帮我找到一种使用 FTS5 模块而不使用分词器在 sqlite 数据库中搜索子字符串的方法。
您可以像在普通表中一样使用 LIKE 来过滤搜索结果。
select * from TrialFTS where search LIKE '%land%';
要使 LIKE 起作用,您需要使用您定义的列的名称,而不是虚拟表名称,并且必须使用 % 而不是 *。
你也可以混合匹配和喜欢:
select * from TrialFTS where TrialFTS MATCH 'black' AND search LIKE '%land%';
请注意,LIKE 不会使用 FTS5 的索引功能,它将对所有存储的行执行全表扫描。