次の方法で共有


フルテキスト検索に使用する類義語辞典ファイルの構成と管理

適用対象SQL Server

SQL Server Full-Text 検索クエリでは、Full-Text 検索 類義語辞典を使用して、ユーザー指定の用語のシノニムを検索できます。 各々の類義語辞典では、特定の言語の一連のシノニムを定義します。 フルテキスト データに合わせた類義語辞典を作成すると、そのデータのフルテキスト クエリのスコープを効果的に拡張できます。

類義語辞典の照合は、すべての FREETEXT クエリと FREETEXTTABLE クエリ、および 句を指定する CONTAINS クエリと FORMSOF THESAURUS クエリに対して行われます。

フルテキスト検索の類義語辞典は、XML テキスト ファイルです。

類義語辞典の機能

フルテキスト検索クエリで特定の言語のシノニムを検索するには、その言語の類義語辞典のマッピング (シノニム) を定義しておく必要があります。 以下の設定を定義するには、各類義語辞典を手動で構成する必要があります。

  • 拡張セット

    拡張セットには、フルテキスト クエリで相互に置き換えられる "writer"、"author"、"journalist" などのシノニムのグループが格納されます。 拡張セット内のシノニムと一致するクエリは、拡張セット内の他のシノニムもすべて含むように拡張されます。

    詳細については、この記事で後述 する拡張セットの XML 構造 を参照してください。

  • 置換セット

    置換セットには、代替セットによって置き換えられるテキストのパターンが格納されます。 例については、この記事で後述する「 置換セットの XML 構造 」セクションを参照してください。

  • 分音文字の設定

    類義語辞典では、チルダ (~)、アキュート アクセント記号 (´)、ウムラウト (¨) などの分音記号をすべての検索パターンで区別するかしないか ( アクセントを区別する 、または アクセントを区別しない) が設定されます。 たとえば、フルテキスト クエリで "café" というパターンが他のパターンに置き換えられるように指定するとします。 類義語辞典でアクセントが区別されない場合、フルテキスト検索では、パターン "café" と "cafe" が置き換えられます。 類義語辞典でアクセントが区別される場合、フルテキスト検索では "café" というパターンのみが置き換えられます。 既定では、類義語辞典でアクセントは区別されません。

既定の類義語辞典ファイル

SQL Server には XML 類義語辞典ファイルのセットが用意されており、サポートされている各言語に対して 1 つのファイルが存在します。 これらのファイルは基本的に空です。 すべての SQL Server 類義語辞典およびコメント アウトされたサンプル類義語辞典に共通する最上位の XML 構造のみが格納されています。

類義語辞典ファイルの場所

類義語辞典ファイルの既定の場所は次のとおりです。

<SQL_Server_data_files_path>\MSSQL13.MSSQLSERVER\MSSQL\FTDATA\

この既定の場所には、次のファイルが格納されています。

  • 言語固有の類義語辞典ファイル

    セットアップでは、前の場所に空の類義語辞典ファイルがインストールされます。 サポートされている言語ごとに個別のファイルが用意されています。 システム管理者は、これらのファイルをカスタマイズできます。

    類義語辞典ファイルの既定のファイル名には、次の形式が使用されます。

    'ts' + <three-letter language-abbreviation> + '.xml'

    指定した言語の類義語辞典ファイルの名前は、レジストリで次のように指定されます。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<instance-name>\MSSearch\<language-abbrev>

  • グローバル類義語辞典ファイル

    tsGlobal.xml は空のグローバル類義語辞典ファイルです。

類義語辞典ファイルの場所を変更する

類義語辞典ファイルの場所および名前を変更するには、そのレジストリ キーを変更します。 各言語の類義語辞典ファイルの場所は、レジストリで次のように指定されています。

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance name>\MSSearch\Language\<language-abbreviation>\TsaurusFile

グローバル類義語辞典ファイルは、LCID 0 のニュートラル言語に対応します。 この値は、管理者のみが変更できます。

フルテキスト クエリで類義語辞典を使用する方法

類義語辞典クエリでは、言語固有の類義語辞典とグローバル類義語辞典の両方が使用されます。

  1. 最初に、クエリは言語固有のファイルを検索し、処理のために読み込みます (既に読み込まれている場合を除く)。 類義語辞典ファイル内の拡張セットおよび置換セットのルールで指定された言語固有のシノニムを含むようにクエリが拡張されます。

  2. この手順がグローバル類義語辞典に対して繰り返されます。 ただし、言語固有の類義語辞典ファイルで既に一致するものが見つかった用語は、グローバル類義語辞典では照合されません。

類義語辞典ファイルの構造

各類義語辞典ファイルは、ID がMicrosoft Search Thesaurusの XML コンテナーと、サンプル類義語辞典を含むコメント (...<!---->) を定義します。 類義語辞典は <thesaurus> 要素で定義されます。この要素には、分音記号の設定、拡張セット、置換セットを定義する子要素のサンプルが含まれます。

一般的な空の類義語辞典ファイルには、次の XML テキストが含まれています。

<XML ID="Microsoft Search Thesaurus">

<!--  Commented out

    <thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
        <expansion>
            <sub>Internet Explorer</sub>
            <sub>IE</sub>
            <sub>IE5</sub>
        </expansion>
        <replacement>
            <pat>NT5</pat>
            <pat>W2K</pat>
            <sub>Windows 2012</sub>
        </replacement>
        <expansion>
            <sub>run</sub>
            <sub>jog</sub>
        </expansion>
    </thesaurus>
-->
</XML>

拡張セットの XML 構造

各拡張セットは <expansion> 要素で囲みます。 この要素内に、<sub> 要素で囲んだ 1 つまたは複数の代替文字列を指定します。 拡張セットでは、互いにシノニムとなる代替文字列のグループを指定できます。

たとえば、拡張のセクションを編集して、代替文字列 "writer"、"author"、および "journalist" をシノニムとして扱うことができます。 1 つの置換に一致するものを含むフルテキスト検索クエリが展開され、拡張セットで指定された他のすべての置換が含まれます。 したがって、上記の例では、"author" という語に対して FORMS OF THESAURUS クエリまたは FREETEXT クエリを実行すると、フルテキスト検索では "writer" と "journalist" という語も含む検索結果が返されます。

前の例の拡張セット セクションは次のようになります。

<expansion>
        <sub>writer</sub>
        <sub>author</sub>
        <sub>journalist</sub>
</expansion>

置換セットの XML 構造

各置換セットは <replacement> 要素で囲みます。 この要素内では、 <pat> 要素に 1 つ以上のパターンを指定し、 <sub> 要素に 0 個以上の置換を指定できます(シノニムごとに 1 つ)。 ここで指定するパターンが代替セットで置き換えられます。 パターンと代替文字列には、語または語の並びを含めることができます。 パターンに置換が指定されていない場合は、ユーザー クエリからパターンを削除する効果があります。

たとえば、"Win8" というパターンを検索するクエリを、"Windows Server 2012" または "Windows 8.0" という代替文字列に置き換えるとします。 この場合、"Win8" に対してフルテキスト クエリを実行すると、フルテキスト検索からは "Windows Server 201" または "Windows 8.0" だけを含む検索結果が返されます。 "Win8" を含む結果は返されません。 これは、パターン "Win8" が "Windows Server 2012" および "Windows 8.0" のパターンに "置き換えられる" ためです。

前の例では、置換セット セクションは次のようになります。

<replacement>
        <pat>Win8</pat>
        <sub>Windows Server 2012</sub>
        <sub>Windows 8.0</sub>
</replacement>

類似するパターンを含む 2 つの置換セットが一致する場合、2 つのうちで長い置換セットが優先されます。 たとえば、"Internet Explorer online community" に対して FORMS OF THESAURUS クエリを実行し、次の置換セットを使用すると、"Internet Explorer" 置換セットの方が "Internet" 置換セットよりも優先されます。 そのため、クエリは "IE オンライン コミュニティ" または "IE 9 オンライン コミュニティ" として処理されます。

<replacement>
         <pat>Internet</pat>
         <sub>intranet</sub>
</replacement>

そして

<replacement>
         <pat>Internet Explorer</pat>
         <sub>IE</sub>
         <sub>IE 9</sub>
</replacement>

分音記号の設定の XML 構造

類義語辞典の分音文字の設定は、単一の <diacritics_sensitive> 要素で指定されます。 この要素には、次のようにアクセントの区別を制御する整数値が含まれます。

分音文字の設定 XML
アクセントを区別しない 0 <diacritics_sensitive>0</diacritics_sensitive>
アクセントを区別する 1 <diacritics_sensitive>1</diacritics_sensitive>

この設定はファイルで 1 回のみ適用でき、ファイル内のすべての検索パターンに適用されます。 この設定は、個々のパターンに対して指定することはできません。

類義語辞典を編集する

特定の言語の類義語辞典は、類義語辞典ファイル (XML ファイル) を編集することによって構成できます。 セットアップ中に、<xml> コンテナーとコメント アウトされたサンプルの <thesaurus> 要素のみが格納されている空の類義語辞典ファイルがインストールされます。 シノニムを検索するフルテキスト検索クエリを正しく機能させるには、一連のシノニムを定義する実際の <thesaurus> 要素を作成する必要があります。 シノニムの定義には、拡張セットと置換セットという 2 つの形式があります。

類義語辞典ファイルを編集する

  1. メモ帳またはその他のテキスト エディターで類義語辞典ファイルを開きます。

  2. 類義語辞典ファイルを初めて編集する場合は、ファイルの先頭と末尾にある次のコメント行をそれぞれ削除します。

    <!--Commented out
    -->
    
  3. 置換セットまたは拡張セットを追加、変更、または削除します。

  4. ファイルを保存し、メモ帳を閉じます。

  5. sp_fulltext_load_thesaurus_fileを使用して類義語辞典ファイルの内容をtempdbに読み込み、類義語辞典ファイルの言語に対応するローカル識別子 (LCID) を指定します。 たとえば、英語の類義語辞典ファイル tsenu.xml の場合、対応する LCID は 1033 です。

    USE AdventureWorks;
    
    EXECUTE sys.sp_fulltext_load_thesaurus_file 1033;
    GO
    

類義語辞典ファイルの編集に関する推奨事項

類義語辞典ファイル内のエントリには特殊文字を含めないことをお勧めします。 これは、特殊文字に対するワード ブレーカーの動作がわかりづらいためです。 類義語辞典のエントリに特殊文字が含まれる場合、そのエントリと組み合わせて使用されるワード ブレーカーの動作がフルテキスト クエリに与える影響がわかりづらくなる可能性があります。

ストップワードはフルテキスト インデックスから省略されるため、<sub> エントリにはストップワードを含めないことをお勧めします。 クエリは類義語辞典ファイルの <sub> エントリを含むように拡張されるため、<sub> エントリにストップワードが含まれる場合は、クエリのサイズが不必要に大きくなります。

類義語辞典ファイルの編集に関する制限事項

類義語辞典ファイルの編集には、次の制限が適用されます。

  • 類義語辞典ファイルを更新、変更、または削除できるのはシステム管理者だけです。

  • テキスト エディター ツールを使用して類義語辞典ファイルを編集する場合は、ファイルを Unicode 形式で保存し、バイトオーダー マークを指定する必要があります。

  • 類義語辞典のエントリを空にしたり、単語を空の文字列に区切ったりすることはできません。

  • 類義語辞典ファイルの語句は 512 文字以下にする必要があります。

  • 類義語辞典には、拡張セットの <sub> エントリと置換セットの <pat> 要素間で重複したエントリを含めることはできません。