2008-10-24 19 views
1

我在表格上創建了​​一個多列數據存儲,允許我在表格上進行全文索引。我需要做的是加重每一列的不同並將分數加在一起。如何在oracle文本索引中添加權重?

下面的查詢工作,但速度很慢:

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

回答

3

代替OR運算符,使用ACCUM:

SELECT文件*,分(1)爲分數 FROM文件 WHERE CONTAINS(虛設,「(((the_keyword)內DOCUMENTTITLE))* 2 。 ACCUM(document_text內的((the_keyword))',1)> 0) ORDER BY得分描述

+0

這個答案很完美。我雖然只能一起累積術語,而不是權重。 – larf311 2008-11-05 13:06:36

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 
相關問題