2009-06-15 17 views
14

私はMS SQL Serverのフルテキスト検索クエリを実行しています。私は特殊文字をエスケープする必要があるので、特殊文字を含む特定の用語を検索することができます。フルテキスト検索文字列をエスケープする組み込み関数はありますか?もしそうでなければ、あなたはどうしますか?SQL Serverの全文検索エスケープ文字ですか?

答えて

23

悪いニュース:方法はありません。良いニュース:あなたはそれを必要としません(とにかく助けにならないでしょう)。

私のプロジェクトでも同様の問題が発生しました。私の理解では、フルテキストインデックスを構築しながら、SQL Serverは、したがって単語の区切り文字としてすべての特殊文字を扱うことです:

な文字であなたの単語が2つ(またはそれ以上)のフルテキストインデックス内の単語のように表される
  1. これらの文字は削除され、インデックスには表示されません。

    INSERT INTO [ActicleTable] values ('digitally improvements folders') 
    INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)') 
    

    :後、私たちは、テーブルに行を追加を検討

    CREATE TABLE [dbo].[ActicleTable] 
    (
        [Id] int identity(1,1) not null primary key, 
        [ActicleBody] varchar(max) not null 
    ); 
    

    を:

は、我々は(スキップされ)、それに対応するフルテキストインデックスでは、次の表を持って考えてみましょう試してみてください:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders') 
および第二群のみ第二の行と一致する一方の条件の
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold') 

最初のグループは、(第2としない)最初の行に一致します。

残念ながら、このような動作が明確に記載されているMSDN(または何か)へのリンクが見つかりませんでした。しかし私はofficial articleを見つけました。これはフルテキスト検索クエリの引用符を変換する方法を示していますが、これは上記のアルゴリズムと[暗黙的に]整列しています。