我有一个像这样的fts3表:
CREATE VIRTUAL TABLE docs USING fts3(id, title, body);
我想让标题匹配的权重高于内容匹配的权重
我做了什么:
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
不与全文搜索(我使用这个工具,没有错误,没有响应,但如果我删除select case
,它的工作)
我错在哪里?
有一个可能有用的偏移函数。在你的例子中,你知道标题列是索引1而正文列是索引2,所以你可以这样写:
SELECT *
FROM docs
WHERE docs MATCH 'title:word OR body:word'
ORDER BY SUBSTR(OFFSETS(docs), 1, 1), id;
这将在第1列(title)中匹配的行排在第2列(body)之前。
(编辑了OFFSETS()函数的右括号位置。)