4

我正在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);

我正在使用外部内容表,因此我不需要存储col_textin 的重复值fts_table。我只是索引col_text,因为col_a并且col_b不需要索引。

但是,当我进行这样的查询fts_table

SELECT * FROM fts_table WHERE fts_table MATCH 'something';

我无权访问col_a和访问col_b内容表t2。如何从单个 FTS 查询中返回所有这些列 ( col_a, col_b, )?col_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 中使用它,并且notindexed直到 SQLite 3.8 才支持该选项,Android 直到Android 版本 5.x才支持该选项。我需要支持android 4.x。我正在更新这个问题以包含 Android 标签。

4

1 回答 1

10

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

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

SELECT *
FROM t2
WHERE id IN (SELECT docid
             FROM fts_table
             WHERE col_text MATCH 'something')
于 2015-04-27T08:32:56.977 回答