質問

テーブルにフルテキストインデックスを作成できるように、テーブルに複数列のデータストアを作成しました。できるようにする必要があるのは、各列に異なる重みを付け、スコアを合計することです。

次のクエリは機能しますが、遅いです:

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句で加重列のスコアをどのように追加しますか?

役に立ちましたか?

解決

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

SELECT document。*、スコアとしてScore(1) FROMドキュメント WHERE CONTAINS(dummy、 '(((the_keyword)within documentTitle))* 2 ACCUM ((the_keyword)within documentText)'、1)> 0) ORDER BYスコアの説明

他のヒント

ネストされた選択を行うとどうなりますか?

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top