gpt4 book ai didi

android - 使用基于从普通表中选择语句的 FTS3/4 表

转载 作者:行者123 更新时间:2023-11-30 01:18:32 24 4
gpt4 key购买 nike

在我的应用程序中,我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com