假设我在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。
1条答案
按热度按时间5w9g7ksd1#
您可以使用LIKE来过滤搜索结果,就像在普通表中一样。
要使LIKE工作,您需要使用您定义的列的名称,而不是虚拟表名称,并且必须使用%而不是 *。
您也可以混合使用MATCH和LIKE:
请注意,LIKE不会使用FTS5的索引功能,它将对所有存储的行执行全表扫描。