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

如何在oracle文本索引中添加权重?,oracle,indexing,full-text-search,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 ) O

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

以下查询可以工作,但速度较慢:

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

使用ACCUM,而不是OR运算符:

选择文档。*,分数(1)作为分数 从文件 其中包含(dummy,((documentTitle中的_关键字))*2acum((documentText中的_关键字)),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

这个答案很完美。我以为你只能把术语加在一起,不能把重量加在一起。