フルテキスト検索に使用する類義語辞典ファイルの構成と管理
適用対象 SQL Server
SQL Server のフルテキスト検索クエリでは、フルテキスト検索の類義語辞典を使って、ユーザーが指定した用語のシノニムを検索できます。 各々の類義語辞典では、特定の言語の一連のシノニムを定義します。 フルテキスト データに合わせた類義語辞典を作成すると、そのデータのフルテキスト クエリのスコープを効果的に拡張できます。
類義語辞典の照合は、すべての FREETEXT クエリと FREETEXTABLE クエリの場合と FORMSOF THESAURUS
句を指定する CONTAINS クエリと CONTAINSTABLE クエリの場合に行われます。
フルテキスト検索の類義語辞典は、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 のニュートラル言語に対応します。 この値は、管理者のみが変更できます。
フルテキスト クエリで類義語辞典を使用する方法
類義語辞典クエリでは、言語固有の類義語辞典とグローバル類義語辞典の両方が使用されます。
- まず、言語固有のファイルが参照されて処理のために読み込まれ (まだ読み込まれていない場合)、 類義語辞典ファイル内の拡張セットおよび置換セットのルールで指定された言語固有のシノニムを含むようにクエリが拡張されます。
- この手順がグローバル類義語辞典に対して繰り返されます。 ただし、言語固有の類義語辞典ファイルで既に一致するものが見つかった用語は、グローバル類義語辞典では照合されません。
類義語辞典ファイルの構造
各類義語辞典ファイルでは、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 online community" または "IE 9 online community" として処理されます。
<replacement>
<pat>Internet</pat>
<sub>intranet</sub>
</replacement>
and
<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> |
Note
この設定はファイルで 1 回のみ適用でき、ファイル内のすべての検索パターンに適用されます。 この設定は個別のパターンには指定できません。
類義語辞典ファイルを編集する
特定の言語の類義語辞典は、類義語辞典ファイル (XML ファイル) を編集することによって構成できます。 セットアップ中に、<xml>
コンテナーとコメント アウトされたサンプルの <thesaurus
> 要素のみが格納されている空の類義語辞典ファイルがインストールされます。 シノニムを検索するフルテキスト検索クエリを正しく機能させるには、一連のシノニムを定義する実際の <thesaurus
> 要素を作成する必要があります。 シノニムの定義には、拡張セットと置換セットという 2 つの形式があります。
類義語辞典ファイルを編集する
メモ帳またはその他のテキスト エディターで類義語辞典ファイルを開きます。
初めて類義語辞典ファイルを編集する場合は、ファイルの先頭と末尾の次のコメント行をそれぞれ削除します。
<!--Commented out -->
置換セットまたは拡張セットを追加、変更、または削除します。
ファイルを保存し、メモ帳を閉じます。
類義語辞典ファイルの内容を tempdb に読み込むために sp_fulltext_load_thesaurus_file を使用し、類義語辞典ファイルの言語に対応するロケール識別子 (LCID) を指定します。 たとえば、英語の類義語辞典ファイル tsenu.xml の場合、対応する LCID は 1033 です。
USE AdventureWorks; EXEC sys.sp_fulltext_load_thesaurus_file 1033; GO
類義語辞典ファイルの編集に関する推奨事項
類義語辞典ファイル内のエントリには特殊文字を含めないことをお勧めします。 これは、特殊文字に対するワード ブレーカーの動作がわかりづらいためです。 類義語辞典のエントリに特殊文字が含まれる場合、そのエントリと組み合わせて使用されるワード ブレーカーの動作がフルテキスト クエリに与える影響がわかりづらくなる可能性があります。
ストップワードはフルテキスト インデックスから省略されるため、<sub>
エントリにはストップワードを含めないことをお勧めします。 クエリは類義語辞典ファイルの <sub>
エントリを含むように拡張されるため、<sub>
エントリにストップワードが含まれる場合は、クエリのサイズが不必要に大きくなります。
類義語辞典ファイルの編集に関する制限事項
類義語辞典ファイルの編集には、次の制限が適用されます。
類義語辞典ファイルを更新、変更、または削除できるのはシステム管理者だけです。
テキスト エディター ツールを使用して類義語辞典ファイルを編集する場合、ファイルが Unicode 形式で保存され、バイト順マークが指定されている必要があります。
類義語辞典のエントリを空にしたり、空の文字列の単語に区切ったりすることはできません。
類義語辞典ファイルの語句は 512 文字以下にする必要があります。
類義語辞典には、拡張セットの
<sub>
エントリと置換セットの<pat>
要素間で重複したエントリを含めることはできません。
参照
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
sp_fulltext_load_thesaurus_file (Transact-SQL)
sys.dm_fts_parser (Transact-SQL)