Oracle のジオデータベースで ArcSDE XML 列を使用するための言語設定

テーブルの XML 列のコンテンツに対してクエリを行う場合は、SQL*Plus を使用して、テキスト インデックスでの言語解析に使用されるデフォルトのレクサーを確認します。これは、テキストが英語以外の言語で書かれている XML ドキュメントが列に含まれる場合に特に重要です。ArcSDE DBTUNE テーブルにカスタム設定が用意されていない場合、ArcSDE XML 列のテキスト インデックスの作成方法は Oracle Text のデフォルト パラメータによって決定されます。

テキスト インデックスに使用されるデフォルト オブジェクトは、ctxsys ユーザによって所有され、データベースごとではなくデータベースのインストールごとに作成されます。オブジェクトのプロパティは、Oracle のインストール時に使用した言語設定に基づいて設定されます。このプロパティの設定方法については、使用しているバージョンのデータベースの『Oracle Text リファレンス』で、システム定義の設定とシステム パラメータに関するセクションをご参照ください。

ArcSDE XML 列に関係する Oracle のパラメータは、DEFAULT_LEXER、DEFAULT_STOPLIST、DEFAULT_STORAGE、DEFAULT_WORDLIST、および DEFAULT_INDEX_MEMORY です。

デフォルトでは、これらのパラメータは通常、ctxsys ユーザによって所有されている同じ名前のシステム定義または適切な値に設定されています。たとえば、DEFAULT_LEXER は通常、CTXSYS.DEFAULT_LEXER を使用するように設定されています。ただし、すでに Oracle が、デフォルトでカスタム設定を使用するように設定されている場合もあります。

多くの西ヨーロッパ言語や、言語固有のレクサーが用意されていない言語の場合、CTXSYS.DEFAULT_LEXER 設定は通常、BASIC_LEXER レクサーを使用し、CTXSYS.DEFAULT_WORDLIST 設定は多くの場合 BASIC_WORDLIST ワードリストを使用します。

一部の西ヨーロッパ言語では、インデックス作成と検索を正常に行うために特別なワードリスト設定が必要です。たとえばフランス語の場合、BASIC_WORDLIST 設定の stemmer および fuzzy_match 属性を必ず French に設定する必要があります。

XML ドキュメントのインデックス作成に使用する設定をカスタマイズする前に、Oracle の現在のテキスト設定を確認し、『Oracle Text リファレンス』を参照してください。カスタマイズを行うには、Oracle で適切な設定を作成し、ArcSDE DBTUNE の XML_IDX_INDEX_TEXT パラメータを使用してその設定を参照する必要があります。そのうえで、XML 列を作成する際に、カスタムの XML_IDX_INDEX_TEXT パラメータを含む DBTUNE キーワードを使用します。ArcIMS メタデータ サービスの場合は、ArcXML 構成ファイルで DBTUNE パラメータを参照できます。

カスタム レクサー

XML ドキュメントの言語と、Oracle インストール時の設定によっては、環境に応じた最適のレクサーを使用するように DEFAULT_LEXER パラメータが設定されていない場合があります。XML ドキュメントのインデックス作成を正常に行うには、レクサーを正しく設定する必要があります。

たとえば、タイ語を扱っている場合、Oracle にタイ語のレクサーは用意されていないため、DEFAULT_LEXER が BASIC_LEXER レクサーを使用するように設定されている可能性があります。BASIC_LEXER は、空白のみを使用してテキストのインデックス作成と検索を行うので、タイ語のような言語では最良の結果を得られません。XML ドキュメントが UTF-8 でエンコードされている場合、Oracle 10g 以降を使用していれば WORLD_LEXER を使うとよりよい結果を得られることがあります。ArcIMS メタデータ サービスによって ArcSDE XML 列にパブリッシュされる XML ドキュメントは、すべて UTF-8 でエンコードされます。

また、カスタム設定を作成する前にシステム標準のテキスト オブジェクトを調べると役に立つことがあります。たとえば、使用するレクサーが現在の Oracle 環境で使用できるかどうかを確認します。

XML 列を作成するときにカスタムの設定を使用するには、XML_IDX_INDEX_TEXT DBTUNE パラメータで設定を参照します。設定名の先頭には、必ず設定を作成したユーザの名前を付けるようにします。ユーザによって作成されたテキスト設定は、誰でも使用できます。

BASIC_LEXER を使用して XML ドキュメントをインデックス化できる場合では、例えば英数字以外の文字を含むテキストを 1 単語にマージするカスタム レクサーを作成することもできます。これは BASIC_LEXER の printjoin 属性を使用して行います。これは「Coeur d'Alene」のような句読点を使用する地名のインデックス作成と検索を標準化するときに便利です。

アポストロフィ文字に対して BASIC_LEXER の skipjoin 属性を使用するカスタム レクサーを作成すると、「Couer d'Alene」が「Couer dAlene」としてインデックス化されます。あるいは、「C'ouer d'Alene」のように誤ってこの地名に余分なアポストロフィを使用した場合にも、「Couer dAlene」とインデックス化されるので検索結果が改善されます。たとえば、このようなテキスト設定は次のようにして作成できます。

begin ctx_ddl.create_preference('BASIC_LEX_SKIP', 'BASIC_LEXER'); 
ctx_ddl.set_attribute('BASIC_LEX_SKIP', 'skipjoins', '''');
end;
/

句読点のインデックス化を変更するときは注意が必要です。XML ドキュメントのすべてのテキストをインデックス化する際に同じ設定が使用されますが、XML エレメントの値はエレメント間で異なる句読点を使用していることがあります。

DEFAULT_LEXER は BASIC_LEXER を使用するように正しく設定されていても、BASIC_LEXER の属性が使用する言語に対して正しくないという場合にもカスタム レクサー設定が必要になります。XML ドキュメントを正しくインデックス化するには、インデックスの語幹、複合語のインデックス化、代替綴り、および新規ドイツ語の綴りに関する BASIC_LEXER 属性を言語に応じて適切に設定する必要があります。これは特に、西ヨーロッパ言語で重要です。使用する言語についてこれらの属性の適切な値を『Oracle Text リファレンス』で確認したら、上記の例に従ってカスタム レクサー設定を作成し、その設定を XML_IDX_INDEX_TEXT DBTUNE パラメータで参照します。

カスタム ワードリストとストップリスト

XML ドキュメントの言語と、Oracle インストール時の設定によっては、DEFAULT_WORDLIST と DEFAULT_STOPLIST が言語に応じて正しく設定されていない可能性があります。

XML ドキュメントを正常に検索できるようにするには、ワードリストを言語に応じて正しく設定する必要があります。これは、特に、ステミングとあいまい一致のために BASIC_WORDLIST を正しく設定する必要がある西ヨーロッパ言語で重要です。

ストップリストでは、XML ドキュメントでインデックス化しない、検索不可能な単語を制御します。ストップリストは、いくつかの言語で使用でき、状況によって適切であればカスタマイズも可能です。

使用する言語についてこれらの設定の適切な値を『Oracle Text リファレンス』で確認後、カスタム設定を作成し、その設定を XML_IDX_INDEX_TEXT DBTUNE パラメータの値に追加します。

関連トピック

5/10/2014