为什么这个sqlite3 FTS5无内容表不可搜索?

xmd2e60i  于 2023-05-18  发布在  SQLite
关注(0)|答案(1)|浏览(206)

如果我理解正确,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无法搜索?

but5z9lq

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值。

相关问题