1

我在一个表上创建了一个多列数据存储,它允许我对表进行全文索引。我需要做的是对每一列进行不同的加权并将分数加在一起。

以下查询有效,但速度很慢:

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 子句中添加加权列的分数?

4

2 回答 2

3

使用 ACCUM 代替 OR 运算符:

SELECT document.*, Score(1) as Score FROM document WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))*2 ACCUM ((the_keyword) within documentText)',1) > 0) ORDER BY Score Desc

于 2008-10-24T14:13:50.613 回答
0

如果您进行嵌套选择怎么办?

select *, Score(1) + 2 * Score(2) as Score
from (
    SELECT document.*, Score(1) as Score
    FROM document
    WHERE CONTAINS(dummy, '(((the_keyword) within documentTitle))
        OR ((the_keyword) within documentText)',1) > 0)
)
ORDER BY Score Desc
于 2008-10-24T14:28:36.213 回答