4

SQL Server フルテキストを使用して、IP アドレスを含む可能性がある大きな varchar/varbinary 列のテキストを検索しています。住所のドットがインデックスにないことは理解していますが、次のようなフレーズ検索がうまくいくと思いました。

select * from myFTETable where contains(myFTEcolumn, "192 168 100 101")

そうではありません。私は何を間違っていますか?IP アドレスを検索する方法はありますか? または、より一般的には、元のデータのフレーズに句読点が含まれている場合にフレーズ検索を行う方法はありますか?

ありがとう。

4

1 に答える 1

3

その通りです。LIKE 演算子はフルテキスト インデックスを利用しないため、データベースが大きくなるとクエリの実行時間が長くなります。

内部インデックス テーブルにクエリを実行して、インデックスが作成されている番号を確認してみましたか? これは実行することで達成できます -

SELECT * FROM sys.dm_fts_index_keywords(db_id('{database}'), object_id('{table}'))

フルテキスト インデックス テーブルに 192.168.100.101 を挿入すると、内部的に 8 つの異なるエントリ (4 つの数値、4 つの文字) として表示され、CONTAINS('"192 168 100 101"') を実行すると、関連する行が表示されます。

注意点として、フルテキストは、ストップリスト メカニズムの一部として、下位の数値の一部を取り除きます。これは、インデックスの作成中に STOPLIST OFF を指定するか、一致する文字列を内部ストップリストから削除することでオーバーライドできます。

于 2012-09-10T20:55:01.923 に答える