如何查询外部内容 FTS4 table 但 return 原始内容 table 的其他列

How to query an external content FTS4 table but return additional columns from the original content table

我正在 SQLite 中创建一个 FTS4 external content table,如下所示:

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

我正在使用外部内容 table,这样我就不需要在 fts_table 中存储 col_text 的重复值。我只索引 col_text 因为 col_acol_b 不需要索引。

但是,当我像这样查询 fts_table

SELECT * FROM fts_table WHERE fts_table MATCH 'something';

我无法从内容 table t2 访问 col_acol_b。 return 如何从单个 FTS 查询中获取所有这些列(col_acol_bcol_text)?

更新

我尝试使用 notindexed=column_name 选项,如

CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_a, col_b, col_text, notindexed=col_a, notindexed=col_b);

这应该适用于某些人,但我在 Android 中使用它并且直到 SQLite 3.8 才支持 notindexed 选项,而 Android 直到Android version 5.x。我需要支持 android 4.x。我正在更新这个问题以包含 Android 标签。

FTS tables 有一个名为 docidrowid 的内部 INTEGER PRIMARY KEY 列。 在 FTS table 中插入一行时,将该列设置为原始 table.

中该行的主键

然后您可以轻松地查找相应的行,可以使用单独的查询,也可以使用这样的连接:

SELECT *
FROM t2
WHERE id IN (SELECT docid
             FROM fts_table
             WHERE col_text MATCH 'something')