我们在应用程序中使用 SQLite 和 FTS5。它运行良好并且速度非常快。但是,当我们的虚拟 fts 表变大时,我们遇到了问题。我们需要按日期按时间倒序对搜索结果进行排序,而不是按默认排名,并且限制为 100。在英语中,我们需要与搜索字符串匹配的 100 个最近的行。
CREATE VIRTUAL TABLE ft USING fts5(time_stamp, data);
INSERT INTO ft(time_stamp, data) VALUES('1', 'foo 1');
INSERT INTO ft(time_stamp, data) VALUES('2', 'foo 2');
INSERT INTO ft(time_stamp, data) VALUES('3', 'foo 3');
SELECT * FROM ft WHERE data MATCH ('foo*') ORDER BY Rank LIMIT 2;
上述查询的结果如下所示:
-----------------
|time_stamp|data
-----------------
|1 |foo 1
-----------------
|2 |foo 2
-----------------
您可以看到,所有条目的排名都是相同的,并且默认排序(在排名之后)是按日期。有没有办法使用 fts5 按反向日期排序并完全忽略排名?
我在下面的工作......但是一旦表格变大,就会对性能产生可怕的影响。
CREATE VIRTUAL TABLE ft USING fts5(time_stamp, data);
INSERT INTO ft(time_stamp, data) VALUES('1', 'foo 1');
INSERT INTO ft(time_stamp, data) VALUES('2', 'foo 2');
INSERT INTO ft(time_stamp, data) VALUES('3', 'foo 3');
SELECT * FROM ft WHERE data MATCH ('foo*') ORDER BY time_stamp DESC LIMIT 2;
上述查询的结果如下所示:
-----------------
|time_stamp|data
-----------------
|3 |foo 3
-----------------
|2 |foo 2
-----------------
这正是我们正在寻找的......但我们需要一种方法来实现它而不使用 time_stamp 上的排序