如何在oracle文本索引中一起添加权重?

时间:2008-10-24 13:38:42

标签: oracle indexing full-text-search

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

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

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

2 个答案:

答案 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