子字符串的无损SQLite FTS5搜索

1rhkuytd  于 2023-02-09  发布在  SQLite
关注(0)|答案(1)|浏览(236)

对于postfix搜索,使用FTS5虚拟表不会返回任何结果。
它只能搜索整个单词标记,或者搜索单词标记的前缀(如果我将*附加到搜索中)。
例如,如果我搜索werty,它找不到qwerty.png行。

CREATE TABLE IF NOT EXISTS files (name TEXT, id INTEGER);
INSERT INTO files (name, id) VALUES ('qwerty.png', 1),  ('asdfgh.png', 2);
CREATE VIRTUAL TABLE IF NOT EXISTS names USING FTS5(name);
INSERT INTO names (name) SELECT name FROM files;
SELECT *
FROM names
WHERE name MATCH 'werty';

它仅适用于前缀搜索(qwertyqwer*qwe*等)。
我不能在搜索开始时使用**werty),因为它会产生错误。
可能会使索引文本搜索工作起来就像我会使用

SELECT *
FROM names
WHERE name like '%wert%';


我只想快速搜索一个子字符串,而不用扫描整个表。

apeeds0o

apeeds0o1#

也许可以试试实验性的trigram标记器
使用三元组标记器时,查询或短语标记可以匹配行中的任何字符序列,而不仅仅是一个完整的标记。

相关问题