sqlite在全文搜索中加权匹配

时间:2015-09-07 06:08:40

标签: android sqlite indexing full-text-search relevance

我有一个像这样的fts3表:

 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,则作品)

我哪里错了?

1 个答案:

答案 0 :(得分:2)

这个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列(正文)中匹配。

(编辑了OFFSETS()函数上右括号的位置。)