【问题标题】:SQlite FTS table is not being populatedSQlite FTS 表未填充
【发布时间】:2019-11-28 20:16:05
【问题描述】:
DROP TABLE IF EXISTS TEXTS;
CREATE TABLE TEXTS (text_id int PRIMARY KEY, text ntext,last_update datetime DEFAULT 
CURRENT_TIMESTAMP);
DROP TABLE IF EXISTS FTSTEXTS;
CREATE VIRTUAL TABLE FTSTEXTS USING fts5(text,content="TEXTS",content_rowid="text_id",tokenize=unicode61);
Insert into texts (text_id,text) values (1,'first'),(2,'second'),(3,'third'),(4,'fourth');
Insert into ftstexts (rowid,text) values (1,'first'),(2,'second'),(3,'third'),(4,'fourth');
update texts set text='5555' where text_id=2;
update ftstexts set text='5555' where rowid=2;
select text from texts where text_id=(select rowid from ftstexts where text match('second') limit 1);

result is "5555"

创建表并将第 2 行的值更新为“5555”后查询

select rowid from ftstexts where text match('second') limit 1

返回 2:

如何填充 FTS 表以从 fts 搜索中排除术语“秒”?

查询在 SQLITEStudio 3.2.1 上运行

【问题讨论】:

标签: sqlite full-text-search populate


【解决方案1】:

外部内容 FTS5 表不支持更新。您必须删除一行的旧内容,然后将新内容作为单独的步骤插入。

documentation 包含一些示例触发器,可自动使此类表与保存实际数据的表保持同步。

您可能会按照以下方式进行更新触发

CREATE TRIGGER texts_au AFTER UPDATE ON texts BEGIN
  INSERT INTO ftstexts(ftstexts, rowid, text) VALUES('delete', old.text_id, old.text);
  INSERT INTO ftstexts(rowid, text) VALUES (new.text_id, new.text);
END;

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2023-03-11
    相关资源
    最近更新 更多