我在 SQLite3 中的 FTS4 索引有一个奇怪的问题,即MATCH
对一个术语的查询返回的不是完全匹配,而是另一个相似的匹配,反之亦然。
这是一个更好地说明它的例子:
SELECT name FROM test_idx WHERE name MATCH 'lehmbruck-museum';
-- "Lehmbruck-Archiv"
SELECT name FROM test_idx WHERE name MATCH 'lehmbruck-archiv';
-- "Lehmbruck-Museum"
它似乎与破折号有关,这是一个类似的案例,表现出相同的行为:
SELECT name FROM test_idx WHERE name MATCH 'some-thing';
-- "some-thang"
SELECT name FROM test_idx WHERE name MATCH 'some-thang';
-- "some-thing"
这是这个测试数据库的构建方式,以防有人想尝试复制它:
CREATE VIRTUAL TABLE test_idx USING fts4(name);
INSERT INTO test_idx (name) VALUES
('some-thing'), ('some-thang'),
('Lehmbruck-Museum'), ('Lehmbruck-Archiv');