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

问题描述 投票:0回答:1

假设我在 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 数据库中搜索子字符串的方法。

sqlite search substring full-text-search fts5
1个回答
0
投票

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

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

要使 LIKE 起作用,您需要使用您定义的列的名称,而不是虚拟表名称,并且必须使用 % 而不是 *。

你也可以混合匹配和喜欢:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.