2015-04-27 29 views
3

我SQLite中創建FTS4 external content table這樣返回其他列:如何查詢外部內容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); 

我使用的是外部內容表,以便我不t需要在fts_table中存儲col_text的重複值。我只索引col_text,因爲col_acol_b不需要編入索引。

然而,當我做的fts_table一個這樣的查詢

SELECT * FROM fts_table WHERE fts_table MATCH 'something'; 

我沒有從內容表t2訪問col_acol_b。如何從單個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使用它和notindexed選項之前,不支持的SQLite 3.8,其中Android不支持,直到Android version 5.x。我需要支持android 4.x.我正在更新此問題以包含Android標記。

回答

5

FTS表具有名爲docidrowid的內部INTEGER PRIMARY KEY列。 在FTS表中插入一行時,將該列設置爲原始表中該行的主鍵。

然後你就可以輕鬆地查找相應的行,無論是與一個單獨的查詢,或與參加這樣的:

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

這將需要第二次查詢,對不對?我必須爲FTS查詢返回的每一行做到這一點,對嗎?有沒有辦法通過單個查詢來完成此操作(爲了返回包含多行的Android遊標)? – Suragch

+0

啊,我剛剛看到你的編輯。我明白。謝謝。 – Suragch

+0

但是,從其他查詢查詢它不是比只有一個fts查詢更慢? –