我有一个SQLite3表:
CREATE TABLE "test" (
"title" TEXT,
"shortdesc" TEXT,
"longdesc" TEXT,
"id" TEXT,
PRIMARY KEY("id")
);
我可以在其中插入任何内容:
INSERT INTO test (id, title, shortdesc, longdesc) VALUES ("abc", "hello world", "this is a hello world", "a nice hello world article about hello worlds")
接下来我创建了一个FTS5虚拟表:
CREATE VIRTUAL TABLE IF NOT EXISTS test_fts USING fts5 (
id,
title,
shortdesc,
longdesc,
content=test
);
所以我在虚拟表格中检查数据:
一切看起来都很好...... 现在我尝试使用MATCH
来查找文章:
SELECT * FROM test_fts WHERE test_fts MATCH 'hello'
...然而我没有得到结果。显然,我展示的数据库只是一个例子,实际数据库也出现了同样的问题。我在不同的计算机上尝试过(以及在不同的客户端上),我还检查了FTS5是否启用,并使用 PRAGMA compile_options
和 ENABLE_FTS5
进行了编译,意味着它已经启用了。同样的问题也发生在FTS3和4。
那么我错过了什么?SQLite版本为3.36.0。
SELECT * FROM test_fts
查询所有内容时,即使我没有填充数据,它也会返回所有内容。 - ifbamoq*_data
表,这些表是它实际上需要查找的。然后当你执行 INSERT 操作时,它会填充这些表(即使实际上没有将新条目插入到你要插入的表中)。如果这不是一个 bug 的话,那么这个默认行为真的很奇怪(而且据我所知,也没有记录在案)。 - Soren Bjornstad