gpt4 book ai didi

sqlite - SQLite FTS 表是否需要手动填充?

转载 作者:行者123 更新时间:2023-12-03 19:31:51 33 4
gpt4 key购买 nike

SQLite FTS 的文档 implies应使用 INSERT、UPDATE、DELETE 等填充和更新 FTS 表。

这就是我正在做的 - 添加行,删除它们等,但最近我注意到,一旦我创建了 FTS 表,它就会使用源中的数据自动填充。我是这样创建的:

CREATE VIRTUAL TABLE notes_fts USING fts4(content="notes", notindexed="id", id, title, body)

如果我在“notes”表中添加一行,它也会自动添加到notes_fts。我想这就是虚拟表。

但是,为什么有一章是关于填充 FTS 表的呢?甚至有什么意义,因为例如,如果我删除一行,如果它仍在源表中,它就会回来。

对此有什么想法吗? FTS 真的需要填充吗?

最佳答案

进一步阅读后,我发现 FTS 表确实需要手动与内容表保持同步。运行 CREATE VIRTUAL TABLE 时调用,FTS 表会自动填充,但之后删除、插入和更新必须手动完成。

在我的情况下,我使用以下触发器完成了它:

CREATE VIRTUAL TABLE notes_fts USING fts4(content="notes", notindexed="id", id, title, body

CREATE TRIGGER notes_fts_before_update BEFORE UPDATE ON notes BEGIN
DELETE FROM notes_fts WHERE docid=old.rowid;
END

CREATE TRIGGER notes_fts_before_delete BEFORE DELETE ON notes BEGIN
DELETE FROM notes_fts WHERE docid=old.rowid;
END

CREATE TRIGGER notes_after_update AFTER UPDATE ON notes BEGIN
INSERT INTO notes_fts(docid, id, title, body) SELECT rowid, id, title, body FROM notes WHERE is_conflict = 0 AND encryption_applied = 0 AND new.rowid = notes.rowid;
END

CREATE TRIGGER notes_after_insert AFTER INSERT ON notes BEGIN
INSERT INTO notes_fts(docid, id, title, body) SELECT rowid, id, title, body FROM notes WHERE is_conflict = 0 AND encryption_applied = 0 AND new.rowid = notes.rowid;
END;

关于sqlite - SQLite FTS 表是否需要手动填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53733572/

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