を使用してクエリを実行する全文索引付きのテーブルがありますFREETEXT
。テーブルは、ほとんど変更されない定数データを持つ他のテーブルから入力されます。現在、数百万行あります。
テーブル構造:
ID (identity), PK
Text (varchar), FT IX
ForeignID (int) -- of the original ID in it's original table
単語が何度も繰り返され、エンジンによって行が上位にランク付けされることがあるため、結果に満足できません。例: 「ガソリンスタンド ヤング、ヤング ストリート、サム ステート」は、「ヤング」を検索する場合、「ヤング ストリート」よりも上位です。テーブルをランク付けするだけで十分です (FTS インデックスが既に行っていること以外に、テーブル内の行をランク付けする必要はありません)。
シンプルなカスタム ランキング メカニズムを追加したいと考えています。
CustomRank
クエリを実行する前に while/ で並べ替える列を追加しようとしましFREETEXT
たが、時間がかかりすぎます。実行計画によると、並べ替えCustomRank
はチェーン内の最も弱いリンクです。
私は考えました:
- 別のフィールドを管理するので、表示用 (
DisplayText
) とクエリ/インデックス用 ( ) を 1 つ用意し、クエリ/インデックスIndexText
を操作して、昇格させたい行の単語とフレーズを繰り返します。 - それをテーブルに分割し、コードで処理します。各テーブルは独自のランクを取得します。
何か案は?ありがとう、ワンガー。