テーブルで全文索引付けを実行できるテーブルに複数列のデータストアを作成しました。私ができる必要があるのは、各列に異なる重みを付け、スコアを合計することです。
次のクエリは機能しますが、低速です。
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 句に追加するにはどうすればよいでしょうか?