現象
SQL Server 2008 R2 のフルテキスト検索で、Office Filter を使用して日本語 Excel 文書 (Excel 97-2003 形式; *.xls) ファイルの日本語フルテキスト検索を実行している時に、Windows Server 2008 R2 および Windows 7 で、期待通りの結果が得られないことがあります。
具体的には、次のような状況となります。
- Windows Server 2008 R2 および Windows 7 では、指定した日本語キーワードで Excel 文書がヒットしません。
- Windows Server 2008 以前のバージョンの Windows 上では、同じ日本語キーワードで Excel 文書がヒットします。
例えば、Windows Server 2008 の環境にあるフルテキスト検索アプリケーションでは、ある日本語キーワードで Excel 文書がヒットしていたのに、Windows Server 2008 R2 に環境を移行すると、同じキーワードでも Excel 文書がヒットしなくなる、という問題が発生します。
原因
Windows Server 2008 R2 および Windows 7 で、Office Filter の動作に仕様変更が行われたためです。
具体的には、次のような違いです。
Windows Server 2008 以前の Office Filter:
Excel 文書の言語設定 (LCID) として、システム ロケールを返します。システム ロケールが [日本語] の Windows では、言語設定として [日本語] を返します。
Windows Server 2008 R2 / Windows 7 の Office Filter:
Excel 文書の言語設定 (LCID) として、常に 0 を返します。
SQL Server のフルテキスト検索では、0 は [ニュートラル] として取り扱われるため、フルテキスト インデックス作成の時に使用されるワードブレーカーの言語が変わります。
Windows Server 2008 以前の環境では [日本語] でフルテキスト インデックスが作成されますが、Windows Server 2008 R2 の環境では [ニュートラル] でフルテキスト インデックスが作成されるため、フルテキスト インデックスの内容が変わり、期待通りにヒットしなくなる場合があります。
回避策
SQL Server 2008 R2 の [ニュートラル] のワードブレーカーとして、[日本語] のワードブレーカーが使用されるように、レジストリ値を変更します。
次の手順で行います。
(1) [ニュートラル] の "WBreakerClass" レジストリ値を変更
レジストリ エディタ(regdit.exe)を使用し、次のように [ニュートラル] の "WBreakerClass" レジストリ値を変更します。
SQL Server 既定インスタンスの場合:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSearch\Language\Neutral]
"WBreakerClass"="{E1E8F15E-8BEC-45df-83BF-50FF84D0CAB5}"
SQL Server 名前付きインスタンスの場合:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.<インスタンス名>\MSSearch\Language\Neutral]
"WBreakerClass"="{E1E8F15E-8BEC-45df-83BF-50FF84D0CAB5}"
(2) SQL Server の再起動
レジストリを変更したら、SQL Server を再起動します。
(3) フルテキスト カタログの再構築
SQL Server の再起動後、フルテキスト カタログの再構築を行います。
SQL Server Management Studio で SQL Server に接続し、対象のフルテキスト カタログを右クリックし、[再構築] を実行します。
または、次のステートメントを実行します。
ALTER FULLTEXT CATALOG <フルテキスト カタログ名> REBUILD
go