Jas*_*rdy 5 sql sqlite full-text-search ios fts4
我在应用程序中设置了一个外部内容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;
Run Code Online (Sandbox Code Playgroud)
问题在于触发器似乎并没有真正更新索引。我从fts_transactions表中做了一个简单的select *,我看到了带有正确文本和rowid的新条目,但是在实际搜索时它们不会出现。为了使它们显示出来,我必须像这样进行完全重建:
INSERT INTO fts_transactions(fts_transactions) VALUES('rebuild');
Run Code Online (Sandbox Code Playgroud)
这是应该如何工作的吗?我本以为插入到FTS表中的插入/更新/删除将修改索引,而不需要我每次都重建它。重建后,新条目会很好显示。
如果是这种情况,那么可以只将rebuild命令添加到触发器中吗?我只是担心,一旦必须在旧设备上用几千个条目重建索引,添加新项就会变慢……似乎应该有更好的方法。
这是它应该如何工作的吗?
是的,我把这一行放在每个触发器中
INSERT INTO fts_transactions(fts_transactions) VALUES('rebuild');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |