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

nc1teljy  于 2023-03-30  发布在  SQLite
关注(0)|答案(1)|浏览(212)

假设我在SQLite 3.35中使用FTS 5模块创建了一个虚拟表,如下所示:

CREATE VIRTUAL TABLE TrialFTS USING fts5(search);

我已经用数据预填充了表。

现在要搜索包含短语“Black”的任何行,我可以使用以下命令进行搜索:

select * from tri where TrialFTS MATCH 'black'

要搜索包含以“Black”开头的任何单词的任何行:

select * from tri where TrialFTS MATCH 'black*'

但我的问题是-如何使用FTS 5搜索任何包含**'land'作为子字符串的行,以便我可以得到带有'England''Outlander'**等单词的行?

我试过:

select * from TrialFTS where TrialFTS MATCH 'land'

这不起作用,因为在这种情况下“land”需要是完整的标记/短语。
我也试过:

select * from TrialFTS where TrialFTS MATCH '*land'

但这上面写着:unknown special query: land我不能使用简单的模式匹配作为“喜欢”关键字。我需要使用FTS 5模块,而不需要任何标记器,如实验三元组标记器

请帮我找一个方法,用FTS 5模块在sqlite数据库中搜索子串,不需要tokenizer。

5w9g7ksd

5w9g7ksd1#

您可以使用LIKE来过滤搜索结果,就像在普通表中一样。

select * from TrialFTS where search LIKE '%land%';

要使LIKE工作,您需要使用您定义的列的名称,而不是虚拟表名称,并且必须使用%而不是 *。
您也可以混合使用MATCH和LIKE:

select * from TrialFTS where TrialFTS MATCH 'black' AND search LIKE '%land%';

请注意,LIKE不会使用FTS5的索引功能,它将对所有存储的行执行全表扫描。

相关问题