在我的应用程序中,我在 Android 中开发,我有一个名为 Transactions 的 Sqlite 表,其中包含以下字段:
_Id | Date | Value | Notes
我已经有一个 ListView 显示按日期过滤的结果(例如):
选择 * FROM Transacions WHERE Date BETWEEN '2016-04-25' AND '2016-05-14'
它工作正常,但我想实现一个 SearchView 来搜索字段 Notes 中自定义日期之间的交易,一些文本在 SearchView 中键入。 我阅读了有关添加 SearchView 的信息,实现搜索的最佳方法是使用 FTS3 或 FTS4 表,例如,允许用户键入“SUPERMARKET”并找到 Notes 包含此文本的交易。 问题的出现是因为 FTS 表执行 WHERE 条件的速度很慢(如上,过滤日期)...
如何使用 WHERE date BETWEEN ... and ...
过滤日期,并使用 FTS 表的性能过滤文本注释?
- 如果不可能这样做,那么进行这样的查询是不是个好主意:
选择 * FROM Transacions WHERE (Date BETWEEN '2016-04-25' AND '2016-05-14) AND Notes LIKE '%text%''
?
最佳答案
不要将 FTS 表视为表,而应将其视为索引。
像这样索引笔记:
CREATE VIRTUAL TABLE Transactions_FTS USING FTS4(Notes);
您必须确保两个表的 ID 匹配,然后可以像这样组合表:
SELECT *
FROM Transactions
WHERE Date BETWEEN '2016-04-25' AND '2016-05-14'
AND _Id IN (SELECT docid
FROM Transactions_FTS
WHERE Notes MATCH 'supermarket');
或者这个:
SELECT *
FROM Transactions
JOIN Transactions_FTS ON Transactions._Id = Transactions_FTS.docid
WHERE Date BETWEEN '2016-04-25' AND '2016-05-14'
AND Transactions_FTS.Notes MATCH 'supermarket';
(如果您关心使用的存储量,请考虑 external content FTS table。)
关于android - 使用基于从普通表中选择语句的 FTS3/4 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37472686/