sql >> データベース >  >> RDS >> Sqlserver

SQL Server全文検索のエスケープ文字?

    悪いニュース:方法はありません。良いニュース:それは必要ありません(とにかく役に立たないので)。

    私のプロジェクトの1つで同様の問題に直面しました。私の理解では、フルテキストインデックスを作成する際、SQL Serverはすべての特殊文字を単語の区切り文字として扱うため、次のようになります。

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

    対応するフルテキストインデックス(スキップされます)を含む次のテーブルがあるとします。

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

    後でテーブルに行を追加することを検討してください:

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

    検索してみてください:

    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番目の行には一致しません)、2番目のグループは2番目の行にのみ一致します。

    残念ながら、そのような動作が明確に示されているMSDN(または何か)へのリンクを見つけることができませんでした。しかし、全文検索クエリの引用符を変換する方法を説明する公式記事を見つけました。これは、上記のアルゴリズムと[暗黙的に]整合しています。




    1. Access2016で分割データベースを暗号化する方法

    2. RAC OneNodeアーキテクチャでのActiveDataGuardフィジカルスタンバイの設定–パート1

    3. MySQLデータベースにアラビア語でデータを保存

    4. 初心者向けSQLLessThan()演算子