如何查询外部内容 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_a
和 col_b
不需要索引。
但是,当我像这样查询 fts_table
时
SELECT * FROM fts_table WHERE fts_table MATCH 'something';
我无法从内容 table t2
访问 col_a
和 col_b
。 return 如何从单个 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 中使用它并且直到 SQLite 3.8 才支持 notindexed
选项,而 Android 直到Android version 5.x。我需要支持 android 4.x。我正在更新这个问题以包含 Android 标签。
FTS tables 有一个名为 docid
或 rowid
的内部 INTEGER PRIMARY KEY 列。
在 FTS table 中插入一行时,将该列设置为原始 table.
中该行的主键
然后您可以轻松地查找相应的行,可以使用单独的查询,也可以使用这样的连接:
SELECT *
FROM t2
WHERE id IN (SELECT docid
FROM fts_table
WHERE col_text MATCH 'something')
我正在 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_a
和 col_b
不需要索引。
但是,当我像这样查询 fts_table
时
SELECT * FROM fts_table WHERE fts_table MATCH 'something';
我无法从内容 table t2
访问 col_a
和 col_b
。 return 如何从单个 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 中使用它并且直到 SQLite 3.8 才支持 notindexed
选项,而 Android 直到Android version 5.x。我需要支持 android 4.x。我正在更新这个问题以包含 Android 标签。
FTS tables 有一个名为 docid
或 rowid
的内部 INTEGER PRIMARY KEY 列。
在 FTS table 中插入一行时,将该列设置为原始 table.
然后您可以轻松地查找相应的行,可以使用单独的查询,也可以使用这样的连接:
SELECT *
FROM t2
WHERE id IN (SELECT docid
FROM fts_table
WHERE col_text MATCH 'something')