0

を使用してクエリを実行する全文索引付きのテーブルがありますFREETEXT。テーブルは、ほとんど変更されない定数データを持つ他のテーブルから入力されます。現在、数百万行あります。

テーブル構造:

ID (identity), PK
Text (varchar), FT IX
ForeignID (int) -- of the original ID in it's original table

単語が何度も繰り返され、エンジンによって行が上位にランク付けされることがあるため、結果に満足できません。例: 「ガソリンスタンド ヤング、ヤング ストリート、サム ステート」は、「ヤング」を検索する場合、「ヤング ストリート」よりも上位です。テーブルをランク付けするだけで十分です (FTS インデックスが既に行っていること以外に、テーブル内の行をランク付けする必要はありません)。

シンプルなカスタム ランキング メカニズムを追加したいと考えています。

CustomRankクエリを実行する前に while/ で並べ替える列を追加しようとしましFREETEXTたが、時間がかかりすぎます。実行計画によると、並べ替えCustomRankはチェーン内の最も弱いリンクです。

私は考えました:

  1. 別のフィールドを管理するので、表示用 ( DisplayText) とクエリ/インデックス用 ( ) を 1 つ用意し、クエリ/インデックスIndexTextを操作して、昇格させたい行の単語とフレーズを繰り返します。
  2. それをテーブルに分割し、コードで処理します。各テーブルは独自のランクを取得します。

何か案は?ありがとう、ワンガー。

4

0 に答える 0