我在一个表上创建了一个多列数据存储,它允许我对表进行全文索引。我需要做的是对每一列进行不同的加权并将分数加在一起。
以下查询有效,但速度很慢:
SELECT document.*, Score(1) + 2*Score(2) as Score
FROM document
WHERE (CONTAINS(documentContent, 'the_keyword', 1) > 0
OR CONTAINS(documentTitle, 'the_keyword', 2) > 0 )
ORDER BY Score DESC
经过相当多的谷歌搜索,人们提出了解决方案:
SELECT document.*, Score(1) as Score
FROM document
WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))*2 OR ((the_keyword) within documentText)',1) > 0)
ORDER BY Score Desc
上面的查询比它的前任更快,但它并没有解决实际问题。在这种情况下,如果在 documentTitle 中找到关键字,则不会搜索 documentText(它使用 OR 运算符)。我真正需要的是把这两个分数加在一起,这样如果一个关键字出现在标题和文本中,它的分数就会比它只出现在标题中的分数高。
那么,如何在一个 CONTAINS 子句中添加加权列的分数?