我有一个像这样的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
,则作品)
我哪里错了?
答案 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()函数上右括号的位置。)