none
全文検索の類義語の再構築が失敗する件について。 RRS feed

  • 質問

  • お世話になっております。

    SQLServer2008にて簡単に全文検索エンジンが可能であるか調査しています。顧客要件として、"a"と"あ"を同一としてみたい(この例は極端でしょうが、例えばinternationalとインターナショナルとか)、と言う用件があるので、この部分を類義語辞典に登録する事により対応しようとしています。

    なので、C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\tsjpn.xmlを編集して、類義語を登録し、
    > exec sp_fulltext_load_thesaurus_file 1041
    しようとするのですが、英語と日本語が混在すると、エラーとなってしまいます。

    > メッセージ 50000、レベル 16、状態 1、プロシージャ sp_fulltext_rethrow_error、行 36
    > Error 30049, Level 16, State 1, Procedure sp_fulltext_thesaurus_update, Line 61, Message: フルテキスト類義語辞典の内部エラー (HRESULT = '0x8007054e')

    spの名前も違っていて、なんだか意味が分かりません。
    類義語の内容は以下のようになっています。(まだ評価中なのでヘンですが)

    <XML ID="Microsoft Search Thesaurus">
        <thesaurus xmlns="x-schema:tsSchema.xml">
     <diacritics_sensitive>0</diacritics_sensitive>
            <expansion>
                <sub>goldman sachs</sub>
                <sub>bank</sub>
                <sub>銀行</sub>
            </expansion>
        </thesaurus>
    </XML>


    ★<sub>銀行</sub> 部分を削除すると、sp_fulltext_load_thesaurus_file()は正常終了してくれます。
    何故日本語が混在すると失敗するのか分かりません。どなたか、情報を持っている人は、おしえて下さい。
    よろしくお願いします。








    2010年1月5日 16:35

回答

  • 2バイト文字の照合順序に設定されたデータベースにおいて、2バイト文字を含む類義語辞典ファイルを登録した際に発生するという現象を経験したことがあります。
    尚、1バイト文字の照合順序に設定されたデータベース上では発生しませんでした。
    そのため、以下のようにされて、登録が出来るかどうかを確認されてはどうでしょう。

    USE master
    GO
    CREATE DATABASE temp_sbcs COLLATE SQL_Latin1_General_CP1_CI_AS
    GO

    USE temp_sbcs
    GO

    EXEC sys.sp_fulltext_load_thesaurus_file 1041
    GO

    USE master
    GO
    DROP DATABASE temp_sbcs
    GO

    2010年1月6日 1:08
  • こんにちは、nagino です。

    補足で、以下のようなスレッドもありますので、ご確認ください。
    http://social.technet.microsoft.com/Forums/ja-JP/sqlserverja/thread/a162a68e-b389-495a-8680-ae2af3424d71

    個人的には BOL か KB として出して欲しい情報です。


    MCITP(Database Developer/Database Administrator)
    2010年1月6日 1:46

すべての返信

  • 2バイト文字の照合順序に設定されたデータベースにおいて、2バイト文字を含む類義語辞典ファイルを登録した際に発生するという現象を経験したことがあります。
    尚、1バイト文字の照合順序に設定されたデータベース上では発生しませんでした。
    そのため、以下のようにされて、登録が出来るかどうかを確認されてはどうでしょう。

    USE master
    GO
    CREATE DATABASE temp_sbcs COLLATE SQL_Latin1_General_CP1_CI_AS
    GO

    USE temp_sbcs
    GO

    EXEC sys.sp_fulltext_load_thesaurus_file 1041
    GO

    USE master
    GO
    DROP DATABASE temp_sbcs
    GO

    2010年1月6日 1:08
  • こんにちは、nagino です。

    補足で、以下のようなスレッドもありますので、ご確認ください。
    http://social.technet.microsoft.com/Forums/ja-JP/sqlserverja/thread/a162a68e-b389-495a-8680-ae2af3424d71

    個人的には BOL か KB として出して欲しい情報です。


    MCITP(Database Developer/Database Administrator)
    2010年1月6日 1:46
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    NOBTAさん、naginoさん
    いつもお世話になっております。

    にっきーさん
    MSDNフォーラムのご利用有難うございます。

    NOBTAさんとnaginoさんからアドバイスを頂いたと思うのですが、試して頂けたでしょうか?
    皆様からの投稿が、有用な情報だと思いましたので、勝手ながら、
    回答マークを付けさせてもらいました。
    もし、問題がありましたら、回答マークを削除することも可能です。
    そのときは、詳しい状況をお伝えして頂ければと思います。

    今後ともMSDNフォーラムを宜しくお願いします(^_^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2010年1月18日 9:35
  • 本問題について、ご迷惑をおかけしております。KB を公開いたしましたので、必要に応じてご参照ください。
    (現在は英語版のみですが、日本語版も公開の予定です。)

    Loading thesaurus file fails with ERROR_INTERNAL_DB_CORRUPTION in SQL Server versions that use DBCS collation
    http://support.microsoft.com/kb/2014749

    なお、問題の回避方法については、前のスレッドで NOBTA さんがご説明しているのと同様の手順になります。
    2010年2月9日 4:39
  • こんにちは、nagino です。

    Follow Up ありがとうございます。
    KB 確認しました。

    こういったところに手をかけてくださると、とても助かります。


    MCITP(Database Developer/Database Administrator)
    2010年2月9日 14:47