2011-06-07 95 views
3

我在我的sqlite數據庫中有三個fts虛擬表 - 兩個有一個內容列,一個有兩列 - 標題和內容。說一張表是針對一些文章的內容和標題,另外兩張是針對評論和他們的筆記。有一種方法可以在一個查詢中對其進行搜索嗎?我需要合併所有結果並按照相關性對它們進行排序,首先是文章及其標題,然後是評論和備註。我做了一些解決方法。我充滿了搜索結果表格中顯示的每一個新的搜索,但我認爲這不是很好的主意:SQLite3多個FTS表搜索

DROP TABLE IF EXISTS srch_res; 
CREATE TABLE srch_res(type integer, docid integer, snippet text, rank numeric);" 
INSERT INTO srch_res SELECT '0', docid, snippet(reviews_c), rank(matchinfo(reviews_c), 0.5) FROM reviews_c WHERE reviews_c MATCH '%s'; 
INSERT INTO srch_res SELECT '1', docid, snippet(notes_c), rank(matchinfo(notes_c), 0.25) FROM notes_c WHERE notes_c MATCH '%s'; 
INSERT INTO srch_res SELECT '2', docid, snippet(arts_c), rank(matchinfo(arts_c), 1.0, 0.75) FROM arts_c WHERE arts_c MATCH '%s'; 

回答

2

用途:

TRUNCATE TABLE srch_res; 

INSERT INTO srch_res (type, docid, snippet, rank) 
    SELECT '0', docid, snippet(reviews_c), rank(matchinfo(reviews_c), 0.5) 
     FROM reviews_c 
    WHERE reviews_c MATCH '%s' 
UNION ALL 
    SELECT '1', docid, snippet(notes_c), rank(matchinfo(notes_c), 0.25) 
     FROM notes_c 
    WHERE notes_c MATCH '%s' 
UNION ALL 
    SELECT '2', docid, snippet(arts_c), rank(matchinfo(arts_c), 1.0, 0.75) 
     FROM arts_c 
    WHERE arts_c MATCH '%s' 
; 
+0

謝謝。您認爲可以爲搜索結果使用單獨的表格嗎? – Anonymous 2011-06-07 16:03:16

+0

@Anonymous:如果你不需要在會話中記住它們,那麼使用臨時表。另請考慮,如果您發現答案有用,請點擊答案分數下方的複選標記以將其標記爲已接受。 – Benoit 2011-06-07 16:25:15