【问题标题】:SQLite External Content FTS requires rebuild every time?SQLite 外部内容 FTS 每次都需要重建?
【发布时间】:2014-01-28 08:28:52
【问题描述】:

我在我的应用程序中设置了一个外部内容 FTS4 虚拟表,以允许对现有数据库进行全文搜索。我还设置了类似于文档的触发器,因此当我的主内容表更新时,FTS 表也会获得新条目。

CREATE TRIGGER t2_bu BEFORE UPDATE ON t2 BEGIN
  DELETE FROM t3 WHERE docid=old.rowid;
END;
CREATE TRIGGER t2_bd BEFORE DELETE ON t2 BEGIN
  DELETE FROM t3 WHERE docid=old.rowid;
END;

CREATE TRIGGER t2_au AFTER UPDATE ON t2 BEGIN
  INSERT INTO t3(docid, b, c) VALUES(new.rowid, new.b, new.c);
END;
CREATE TRIGGER t2_ai AFTER INSERT ON t2 BEGIN
  INSERT INTO t3(docid, b, c) VALUES(new.rowid, new.b, new.c);
END;

问题是触发器似乎并没有真正更新索引。我从 fts_transactions 表中做了一个简单的选择 *,我看到新条目的文本和 rowid 正确,但是在实际搜索时它们没有出现。为了让它们出现,我必须像这样进行完整的重建:

INSERT INTO fts_transactions(fts_transactions) VALUES('rebuild');

这是它应该如何工作的吗?我会认为在 FTS 表中插入/更新/删除会修改索引,而不需要我每次都重建它。重建后新条目显示就好了。

如果是这样,那么只需将重建命令添加到触发器就可以了吗?我只是担心一旦必须在旧设备上使用几千个条目重建索引,添加新项目会变慢......似乎应该有更好的方法。

【问题讨论】:

    标签: ios sql sqlite full-text-search fts4


    【解决方案1】:

    这就是它应该的工作方式吗?

    是的,我把这条线放在每个触发器中

    INSERT INTO fts_transactions(fts_transactions) VALUES('rebuild');
    

    【讨论】:

      猜你喜欢
      • 2019-08-29
      • 2015-09-10
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      相关资源
      最近更新 更多