如何查询外部内容FTS4表,但返回原始内容表中的其他列

Sur*_*gch 4 sqlite android full-text-search fts4

我在SQLite中创建一个FTS4外部内容表,如下所示:

CREATE TABLE t2(id INTEGER PRIMARY KEY, col_a, col_b, col_text);
CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_text);
Run Code Online (Sandbox Code Playgroud)

我使用的是外部内容表,以便我并不需要存储的重复值col_textfts_table.我只是索引col_text因为col_a并且col_b不需要索引.

然而,当我做一个查询fts_table这样的

SELECT * FROM fts_table WHERE fts_table MATCH 'something';
Run Code Online (Sandbox Code Playgroud)

我没有访问col_a,并col_b从内容表t2.如何返回所有这些列(col_a,col_b,col_text)从单个FTS查询?

更新

我尝试使用该notindexed=column_name选项

CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_a, col_b, col_text, notindexed=col_a, notindexed=col_b);
Run Code Online (Sandbox Code Playgroud)

这应该适用于某些人,但我在Android中使用它,notindexed直到SQLite 3.8才支持该选项,Android直到Android版本5.x才支持.我需要支持android 4.x. 我正在更新此问题以包含Android代码.

CL.*_*CL. 7

FTS表有一个名为docid或的内部INTEGER PRIMARY KEY列rowid.在FTS表中插入行时,将该列设置为原始表中行的主键.

然后,您可以使用单独的查询或使用如下连接轻松查找相应的行:

SELECT *
FROM t2
WHERE id IN (SELECT docid
             FROM fts_table
             WHERE col_text MATCH 'something')
Run Code Online (Sandbox Code Playgroud)