2015-09-07 79 views
1

我有一個FTS3表像這樣的比賽:sqlite的重量全文搜索

CREATE VIRTUAL TABLE docs USING fts3(id, title, body); 

我想要使體重在標題的比賽比在內容,如this question

我做什麼更高:

SELECT  
      case when title match 'word' then 1 else 0 end as titleRank, 
      case when body match 'word' then 1 else 0 end as contentRank  
      docs.* 
    FROM docs 
    WHERE title match 'word' OR body match 'word' 
    ORDER BY titleRank desc, contentRank desc 

但似乎select case不全文搜索(我用this tool工作,沒有錯誤,沒有從該查詢響應,但如果我刪除select case,它的工作原理)

我在哪裏錯了?

+0

1.你的'id'列將被全文索引; [這不是關鍵](http://www.sqlite.org/fts3.html#section_1_3)。 2.參見[matchinfo函數](http://www.sqlite.org/fts3.html#matchinfo)。 –

+0

@CL。抱歉,我不明白matchinfo如何解決我的問題。你能解釋一下嗎? – R4j

+0

它可以返回有關哪個詞出現在哪個列中的信息。 –

回答

1

有這offsets function可能是有用的。在你的情況,你知道的標題欄爲指標1,身柱爲指數2,所以你可以這樣寫:

SELECT * 
FROM docs 
WHERE docs MATCH 'title:word OR body:word' 
ORDER BY SUBSTR(OFFSETS(docs, 1, 1)), id; 

這將那些與前下令在第1列(標題)匹配的行第2欄(正文)中的匹配。