3

バックグラウンド

SQL Server 2008 では、boats という名前のテーブルの boatType という名前の列でフル テキスト インデックスを使用しています。

BoatType フィールドには、ボートが属するボート タイプのカンマ区切りのリストが含まれます。たとえば、「マルチハル、トリマラン、クルーザー」などです。

検索を行う SQL クエリは、次のように CONTAINS 述語を使用します。

CONTAINS(boatType, '"マルチハル"')

問題

最近、特定の行が返されないことに気付くまで、すべてが正常に機能していましたが、まったく同じデータを持つ他の行が返されていました。

短期的な解決策

BoatType 列から全文索引付けを削除してから、再度追加して、索引を再構築しようとしました。インデックスが再作成されるのを待ったところ、問題が修正されました。つまり、予想されるすべての行が返されました。

長期的な解決策は何ですか?

OK、問題は短期間で修正されましたが、これが一度発生すると、再び発生する可能性があります.

フルテキスト インデックスの "change tracking = automatic" 設定は、データが更新されるとインデックスが自動的に更新されることを意味すると (おそらく間違って) 思い込んでいました。

「変更追跡 = 自動」を使用している場合は必要ないと想定しているため、人口スケジュールを設定していません。繰り返しますが、おそらく私は間違っています。

上記の私の仮定を支持して、データベースに追加または変更された新しいデータは、検索に表示されるはずの行のほとんどが表示されるため、インデックスの更新をトリガーするように見えます。少数派です。

ここで何をするのが最善ですか?

4

1 に答える 1

0

MSDocsからのインデックス付きデータの更新と並行して更新されるフルテキストインデックスに依存することはできません。

フルテキストインデックスはバックグラウンドで更新されますが、伝播された変更がインデックスにすぐに反映されない場合があります。

ボートタイプの検索を100%最新にする必要がある場合は、ボートタイプのテーブルと、ボートとボートタイプを結合する多対多のマッピングテーブルを作成します。

于 2012-08-25T07:46:51.970 に答える