如果我理解正确,FTS5无内容表的目的是只存储索引数据,而不存储文本本身,以保存存储空间。
下面的无内容表似乎有些问题,因为它不可搜索(查询不返回任何行):
drop table if exists f1;
CREATE VIRTUAL TABLE f1 USING fts5(a, b, c, content='');
insert into f1 (a, b, c) values ('zaz', 'pop', 'qasd');
select ROWID from f1 where a like 'zaz';
> 0 rows retrieved in 34 ms
如果我创建一个没有content=''的表(使其内容丰富),它可以工作:
drop table if exists f1;
CREATE VIRTUAL TABLE f1 USING fts5(a, b, c);
insert into f1 (a, b, c) values ('zaz', 'pop', 'qasd');
select ROWID from f1 where a like 'zaz';
> 1 row affected in 7 ms
为什么我那毫无内容的table无法搜索?
1条答案
按热度按时间but5z9lq1#
您的
INSERT
查询未提供rowid
。来自SQLite文档:
通过将“content”选项设置为空字符串,可以创建无内容的FTS5表。例如:
CREATE VIRTUAL TABLE f1 USING fts5(a, b, c, content='');
无内容FTS5表不支持UPDATE或DELETE语句,也不支持不为rowid字段提供非NULL值的INSERT语句。
...
尝试从无内容的FTS5表中读取除rowid以外的任何列值都会返回SQL NULL值。