SQLite:编辑一个字段,全文更新?

时间:2012-07-05 23:45:33

标签: sqlite full-text-search

在SQLite 3中

如果我更新具有全文索引的字段,是否会更新全文索引,还是需要手动更新?

1 个答案:

答案 0 :(得分:1)

这取决于例如。 如果您使用“外部内容FTS4表”,它将不会自动更新。

来自http://www.sqlite.org/fts3.html#section_6_2_2

CREATE TABLE t2(id INTEGER PRIMARY KEY, a, b, c, d);
CREATE VIRTUAL TABLE t3 USING fts4(content="t2", b, c);

INSERT INTO t2 VALUES(2, 'a b', 'c d', 'e f');
INSERT INTO t2 VALUES(3, 'g h', 'i j', 'k l');
INSERT INTO t3(docid, b, c) SELECT id, b, c FROM t2;
-- The following query returns a single row with two columns containing
-- the text values "i j" and "k l".
--
-- The query uses the full-text index to discover that the MATCH 
-- term matches the row with docid=3. It then retrieves the values
-- of columns b and c from the row with rowid=3 in the content table
-- to return.
--
SELECT * FROM t3 WHERE t3 MATCH 'k';

-- Following the UPDATE, the query still returns a single row, this
-- time containing the text values "xxx" and "yyy". This is because the
-- full-text index still indicates that the row with docid=3 matches
-- the FTS4 query 'k', even though the documents stored in the content
-- table have been modified.
--
UPDATE t2 SET b = 'xxx', c = 'yyy' WHERE rowid = 3;
SELECT * FROM t3 WHERE t3 MATCH 'k';

但也可以通过触发器来解决。

  

而不是单独写入全文索引和内容   表中,一些用户可能希望使用数据库触发器来保持   关于存储的文档集的最新全文索引   在内容表中。例如,使用之前的表   示例: