SQL Anywhere での全文検索はテキストインデックスを使用して実行されます。テキストインデックスが構築されたカラムの各値は、「ドキュメント」と呼ばれます。テキストインデックスが作成されると、各ドキュメントはテキストインデックスのテキスト設定で指定された、組み込みの単語区切りによって処理され、ドキュメントに含まれている「単語」 (「トークン」とも呼ばれます) およびドキュメント内の単語の位置が確認されます。組み込みの単語区切りは、クエリ文字列のドキュメント (テキストコンポーネント) に対する単語区切りの実行にも使用されます。たとえば、クエリ文字列 'rain or shine' は、OR 演算子で連結された 2 つのドキュメント 'rain' と 'shine 'で構成されています。テキスト設定で指定された組み込みの単語区切りのアルゴリズムは、ストップリストを単語に分割したり、sa_char_terms system システムプロシージャの入力を単語に分割するのにも使用されます。
アプリケーションのニーズによっても異なりますが、組み込みの GENERIC 単語区切りの一部の動作が望ましくないか、または限定的であったり、NGRAM 単語区切りがアプリケーションのニーズに合っていない場合もあります。たとえば、組み込みの GENERIC 単語区切りでは、言語固有の単語区切りは行われません。カスタムの「単語区切り」を実装する必要があるその他の理由を次に示します。
言語固有の単語区切りがない 単語の構成内容に関する言語ルールは言語ごとに異なります。このため、単語区切りのルールは言語ごとに異なります。組み込みの単語区切りには、言語固有の単語区切りのルールは用意されていません。
アポストロフィを含む単語の処理 "they'll" という単語は組み込みの GENERIC 単語区切りによって "they ll" として扱われます。ただし、アポストロフィを単語の一部として扱うカスタムの GENERIC 単語区切りを作成できます。
単語の置き換えがサポートされていない 単語の置き換えを指定することはできません。たとえば、"they'll" という単語をインデックス付けする場合、they および will の 2 つの単語として保存する場合があります。同様に、単語の置き換えを使用すると、大文字と小文字が区別されるデータベースで大文字と小文字を区別しない検索を実行できます。
SQL Anywhere では、外部事前フィルタライブラリを使用して、データに「事前フィルタリング」を実行してからインデックス付けすることもできます。事前フィルタリングでは、インデックス付けするテキスト形式の内容のみをドキュメントから抽出できます。たとえば、XML 値を含むカラムにテキストインデックスを作成するとします。事前フィルタによって、内容にインデックス付けされないように XML タグを除外できます。
SQL Anywhere では、テキストインデックス全体の作成や更新を行うときに、カスタムの事前フィルタ、およびサードパーティの事前フィルタや単語区切りライブラリにアクセスするのに使用できる API が提供されています。このことは、外部ライブラリを使用して XML、PDF、Word のようなドキュメントフォーマットを処理したり、内容にインデックスを付ける前に不要な単語と内容を削除できることを意味します。
サンプルの事前フィルタライブラリと単語区切りライブラリを Samples ディレクトリにインクルードしておき、独自のライブラリの作成やサードパーティのライブラリの使用に役立てることができます。データベースサーバを実行しているシステムに Microsoft Office がインストールされている場合は、Word や Excel などの Office ドキュメント用の IFilter を使用できます。サーバに Acrobat Reader がインストールされている場合は、PDF IFilter を使用できます。
NGRAM の外部単語区切りはサポートされていません。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |