2015-09-07 148 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栏(正文)中的匹配。