我在表上创建了一个多列数据存储区,允许我对表进行全文索引。我需要做的是将每列不同重量并将得分加在一起。
以下查询有效,但速度很慢:
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子句中添加加权列的分数?
答案 0 :(得分:3)
使用ACCUM:
代替OR运算符选择文档。*,得分(1)作为分数 来自文件 WHERE CONTAINS(dummy,'((documentTitle中的((the_keyword)))* 2 ACCUM (documentText中的(the_keyword))',1)> 0) 按比例排序描述
答案 1 :(得分: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