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_text在fts_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代码.
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)