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 演算子を使用します)。本当に必要なのは、2 つのスコアを加算して、キーワードがタイトルとテキストに表示された場合に、タイトルのみに表示された場合よりも高いスコアになるようにすることです。

では、加重列のスコアを 1 つの CONTAINS 句に追加するにはどうすればよいでしょうか?

4

2 に答える 2

3

OR演算子の代わりに、ACCUMを使用します。

SELECT document。*、Score(1)as Score FROM document WHERE CONTAINS(dummy、'(((the_keyword)within documentTitle))* 2 ACCUM((the_keyword)within documentText)'、1)> 0)ORDERBYスコア説明

于 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 に答える