在我的应用中,我在Android中开发,我有一个名为 Transactions 的Sqlite表,包含以下字段:
_Id | Date | Value | Notes
我已经有一个ListView显示按日期过滤的结果(例如):
Select * 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表的性能过滤文本注释?
Select * FROM Transacions WHERE (Date BETWEEN '2016-04-25' AND '2016-05-14) AND Notes LIKE '%text%''
?
答案 0 :(得分:1)
不要将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。)