Oracle Database 12c
のOracle Text
テキスト資産に付加価値を提供
目次
目次 ... 0 はじめに ... 2 身近に存在するテキスト ... 2 Oracle Text ... 2 統合セキュリティ ... 3 アーキテクチャ ... 3 データ・ストア ... 4 デフォルト・データ・ストア ... 4 ファイル・データ・ストア ... 4 URL データ・ストア ... 4 ユーザー定義データ・ストア ... 4 フィルタ ... 5 セクショナ ... 5 レクサー ... 5 レクサーの基本設定 ... 6 言語固有の機能 ... 6 欧米諸言語 ... 6 マルチバイト言語 ... 6 索引付けエンジン ... 6 統合テキスト検索機能の利点 ... 7 Oracle Text の機能 ... 8 索引タイプ ... 8 サブストリング索引とプリフィックス索引 ... 9 索引の保守と同期化 ... 9問合せ演算子 ... 10 国際化 ... 12 ドキュメント・サービス ... 12 ハイライト・サービス ... 12 マークアップ ... 13 スニペット ... 13 テーマの抽出 ... 13 要旨の生成 ... 13 分類とクラスタリング ... 14 ナレッジ・ベース ... 15 Oracle Text の使用 ... 15 Oracle Text を使用した索引の作成 ... 15 オプティマイザ・ヒント ... 17 SDATA セクション ... 19 複合ドメイン索引 ... 19 XML のサポート ... 20 XML ドキュメントのコンテンツおよび構造の検索 ... 21
はじめに
オラクルの統合型全文検索テクノロジーである Oracle Text は、Oracle Database 12c(すべてのエ ディション)に搭載されています。Oracle Text では、Oracle データベースおよびファイル、Web 上に保存されたテキストやドキュメントの索引作成、検索、および分析に標準の SQL を使用します。 キーワード検索やコンテキスト問合せ、ブール演算、パターン照合、テーマ混合型問合せ、 HTML/XML セクション検索など、さまざまな方法を用いてドキュメントの言語分析やテキスト検索 を実行できます。Oracle Text は、構造化関係属性やテキストを含む複合問合せで優れた能力を発揮 します。 Oracle Text では、フォーマット化されていないテキスト、用語ハイライト機能付き HTML、オリジ ナルのドキュメント形式など、各種フォーマットで検索結果をレンダリングできます。Oracle Text は複数の言語をサポートしており、高度な関連性ランキング・テクノロジーによって検索の質を高 めます。
身近に存在するテキスト
この数十年の間、企業はデータベース・システムに蓄積された構造化データへの迅速なアクセスを 可能にするシステムに多額の投資を行ってきました。しかし、データベース・システムに蓄積され たこの構造化データは企業情報全体からすれば、ほんの一部でしかありません。それよりも膨大な 情報が、ドキュメントや Web ページ、マニュアル、レポート、電子メール、プレゼンテーション などのテキストとして存在しています。ビジネス情報のこうした貴重なソースは、アクセスできな いことも多く、費用効果的に優れた方法で管理されていないこともあります。イントラネット・ ポータルにアクセスする社員やカタログを閲覧する購入者など、企業情報にアクセスするユーザー には、見たい情報を見つけられるよう、テキスト検索インフラストラクチャによる高度なサポート が必要です。Oracle Text
Oracle Text は包括的なテキスト検索ソリューションを提供します。Oracle Text は Oracle Database 12c のすべてのエディションに搭載されています。Oracle データベースのユーザーは、別のテキス ト検索製品を購入して統合する必要はありません。
Oracle Text では、Web サイトの検索、e ビジネス・カタログ、ドキュメント分類アプリケーション やルーティング・アプリケーション、テキスト・ウェアハウス、ドキュメント・ライブラリやド キュメント・アーカイブなど、従来の全文検索アプリケーション用に特化したテキスト検索が可能 です。
Oracle Text では、さまざまなドキュメント形式からコンテンツをフィルタリングして抽出できます。 Microsoft Office ファイル形式、Adobe PDF ファミリ形式、HTML、XML といった広く使用されてい る形式を含め、多数のドキュメント形式がサポートされています。
Oracle Text は、欧米諸言語(英語、フランス語、スペイン語、ドイツ語など)や日本語、韓国語、 中国語(繁体および簡体)で記載されたドキュメント間の検索をサポートし、市販されている中で もっとも優れた多言語機能セットを備えています。
Oracle Text は Oracle 12c の一部として透過的に統合されており、次のような多数の主要なエンター プライズ機能によって利点が得られます。
•
データのパーティション化(スループットと可用性の向上)•
リアル・アプリケーション・クラスタリングまたはパラレル・サーバー(サーバー・ス ケーラビリティの最大化)•
自動問合せ最適化•
ツールおよび開発環境•
管理と制御統合セキュリティ
このような統合の側面から、システム管理者も、管理方法や組織のテキスト資産のパラダイム・シ フトを経験せずに済むという大きな利点が得られます。Oracle Text は、Oracle Application Server Portal、Oracle E-Business Suite、Oracle eXchange、Oracle Secure Enterprise Search 、Oracle Content Database など、他の Oracle 製品の中核となる製品です。Oracle の社内向けおよび社外向け Web サイトの検索機能も、すべて Oracle Text をコア検索テクノ ロジーとして使用した Oracle Secure Enterprise Search を採用しています。
アーキテクチャ
このセクションでは、Oracle Text によるテキスト処理のメカニズムについて説明します。このプロ セスをパイプラインとみなすことができます(図 1)。このセクションでは、各ステージについて 説明し、それぞれのステージで使用可能なオプションを取り上げていきます。
図1:索引付けのアーキテクチャ データ・ストア データ・ストアでは、索引付けするテキストのフェッチ元を定義します。データ・ストアは、デー タベースやファイル・システムに保存されているテキスト、HTTP プロトコルによってリモート・ア クセスするテキスト(URL データ・ストア)を対象とします。ユーザーが選んだ場所、プロトコル、 またはアプリケーションからデータをフェッチする、カスタム・データ・ストアを定義できます。 デフォルト・データ・ストア デフォルト・データ・ストアはデータベース内にあります。テキストは VARCHAR2 列(最大 4000 字)または CLOB(Character Large Object)列に保存できます。フォーマット済みテキスト(Word や PDF ドキュメントなど)は BLOB(Binary Large Object)列に保存できます。
ファイル・データ・ストア 索引付けするテキストは、データベース・サーバーにアクセス可能なファイル・システムに保存さ れます。ファイルの名称やパスは、通常 VARCHAR2 列にあるデータベースに保存されます。 URLデータ・ストア データベースに HTTP プロトコル URL が保存されて、索引付けされるテキストは索引付けの時点で URL から直接フェッチされます。 ユーザー定義データ・ストア 索引付けの対象となる表の各行に対して呼び出される PL/SQL プロシージャが指定されます。次に PL/SQL プロシージャが、Java(データベースで実行中の場合は直接)や C/C++プログラムなど、 他の言語で作られたプログラムを EXTPROC 外部プロシージャ・メカニズムを介して呼び出すこと ができます。その結果、ユーザーは索引付けの対象を完全に管理できます。
フィルタ フィルタ・ステージでは、Microsoft Office ファイルや PDF ドキュメントなど、"フォーマット済み" のドキュメントの処理が実行されます。組込みの AUTO_FILTER は一般的なすべてのドキュメン ト・フォーマットを認識でき、索引付け可能な HTML テキストに変換できます。 アプリケーション開発者は、このフィルタ・ステージを自分たちが開発したカスタム構築のフィル タや、サード・パーティから購入したフィルタに置き換えることが可能です。 カスタム・フィルタは、単に 2 つの引数を取る実行可能プログラムまたはスクリプトであり、最初 の引数はフォーマット済み入力テキストを含むファイルで、2 番目の引数はフィルタリングされた 出力を書き込むファイルの名前です。必要に応じて、カスタム・フィルタによって標準フィルタを 自動認識して呼び出すことができます。この方法により、企業独自のファイル・フォーマットを処 理できますが、標準のファイル・フォーマットは標準フィルタに渡されます。 セクショナ セクショナ・オブジェクトは、各テキスト・ユニットを含むセクションを識別します。通常、これ らのセクションは、事前定義された HyperText Markup Language(HTML)または eXtensible Markup Language(XML)セクションです。また、セクショナによって全てのタグをセクション・ デリミタとして処理するように選択できます。例:<TITLE>XML Handbook</TITLE>。これにより、 WITHIN 演算子を使用してタグ間を検索できます。WITHIN 演算子の使用方法は、XML 検索のセク ションで説明します。 レクサー レクサーは、セクショナの出力をワードまたはトークンに分離するためのものです。西ヨーロッパ 系の言語におけるもっとも簡単な例をあげると、レクサーによってテキストはアルファベットの連 続した文字列に分割されます。次の文字列があるとします。
Aha!It's the 5:15 train, coming here now!
この文字列は、句読点と特殊文字を取り除いた単語に分割されます。 aha it s the 5 15 train coming here now
レクサーは通常、ストップワードを削除します。ストップワードとは、アプリケーション開発者に より定義される、またはデフォルト・リストから取得される共通ワードです。その結果、上記の文 字列は以下のようになります。
aha * * * 5 15 train coming * now
アスタリスクは、削除されたストップワードを表します。実際に索引付けはされませんが、ストッ プワードがその位置に存在することが索引に記述されます。検索では、ストップワードはフレーズ の一部として使用されている単語と一致します。たとえば、“kicking the ball”は“kicking a ball”と一 致しますが、“kicking ball”とは一致しません。
ストップワードはアプリケーション開発者が指定できます。また、すべての数字をストップワード として定義できます。
レクサーの基本設定 レクサーを微調整するためのオプションが多数用意されています。たとえば、開発者は索引での大/ 小文字の区別の有無を選択でき、"PL/SQL"を 2 つの単語"PL"と"SQL"として索引付けしたり単一の文 字列"PL/SQL"として索引付けするなど、特定の文字をトークンに分割したり、トークンの一部とし て索引付けしたりすることもできます。 言語固有の機能 欧米諸言語
•
基本文字変換 - アクセント記号が付いた文字を"正規化"して、アクセント記号のない形式 に変更できます。したがって、“acción”を検索すると、“accion”と“acción”がマッチします。•
代替スペリング – ドイツ語などの一部の言語では、アクセント記号付き文字の代わりとな る別のスペリング方法があります。たとえば、“Muenchen”と“München”という 2 つの単 語は同じものとみなされます。代替スペリング索引付けオプションを選択すると、この 2 つの単語はともに“Muenchen”として索引付けされます。同じ変換が問合せ時にも適用さ れるため、上の 2 つの単語のどちらを検索しても、索引の“Muenchen”と一致することに なります。•
複合語処理 - Oracle Text は、ドイツ語およびオランダ語の複合語を処理するテクノロジー を備えています。索引に対応するように、複合語はそれぞれのコンポーネント・フォーム に分割されます。 マルチバイト言語 シンボリック言語には、欧米諸言語のようにスペースで区切られた単語は存在しません。そのため、 文字群に索引を付ける方法の決定には別のルールが必要になります。Oracle Text では、中国語、日 本語、韓国語のテキスト用に特殊なレクサーを用意しています。 また、多言語検索アプリケーションを作成することも可能です。ドキュメントの言語があらかじめ 分かっている場合、特定のデータベース列を索引付け時の LANGUAGE 列として指定できます。ド キュメントの言語が不明な場合、AUTO_LEXER を使用できます。これは自動言語認識機能であり、 複数の言語に関する広範なセグメント分け機能やステミング機能を備えています。 索引付けエンジン 索引付けエンジンは、トークンを含むドキュメントにトークンをマッピングする逆向きの索引を作 成します。この段階では、あらかじめ指定されていれば、Oracle Text によってストップリストが使 用されます。ストップリストには、テキスト索引から排除すべき単語やテーマをユーザーが指定で きます。パイプラインの最終出力は逆向きの索引になります。これは、ドキュメントから選び出した単語の リストであり、各単語にはそれが使用されているドキュメントのリストが添付されます。これはテ キストの通常の見方とは逆であることから逆向きの索引と呼ばれており、各ドキュメントに単語リ ストが付いた状態でのドキュメント・リストになっています。 統合テキスト検索機能の利点 Oracle Database 12c では、拡張フレームワークを使用して、開発者がデータベース・カーネルで認 識されるデータ・タイプを拡張できます。Oracle Text では、テキスト索引と標準の Oracle 問合せ エンジンを完全に統合するためにこのフレームワークを使用しています。その結果、ユーザーは次 のことが可能になります。
•
すべてのデータ(テキスト・データと構造化データ)に対して 2 つのリポジトリではなく 単一のリポジトリを使用。これにより、保守やバックアップなどが容易になります。•
同一リポジトリでの索引。これにより、テキスト問合せおよび複合問合せを効率的に処理 できます。•
単一の API によるアプリケーション開発。•
Oracle SQL 実行エンジンおよび問合せプラン・オプティマイザとの統合。 コストベース・オプティマイザは、問合せの実行時プロパティに基づいて最速の実行プランを選択 できます。そのため、列のテキスト条件を評価するために、Oracle Text では次の 2 つの方法を用意 しています。 1. 拡張フレームワークでテキスト索引を行ソースとして設定し、条件を満たす ROWID を カーネルにパイプライン処理できます。 2. 拡張フレームワークで、"この ROWID を持つ行は条件を満たすのか"という疑問に答えるこ とができます(索引機能の起動)。 次のように要約すると、統合の利点は明白です。•
低コストOracle Text は Oracle Database 12c のすべてのエディションに含まれています。他の製品 を別途購入したり統合したりする必要はありません。
•
高パフォーマンス データベースによって、テキストと構造コンテンツの両方を含む問合せを実行する最速の プランが選択されます。•
高度な整合性 テキストはデータベースに保存されるため、テキストが整合性の利点をすべて継承します。 たとえば、データベースに対するすべての更新をテキスト検索機能に反映できるため、 ユーザーはすべてのデータについて統合された総合的なビューを得られます。•
複雑さの軽減 テキストは構造化データと同じように処理されます。このため、既存システムでのテキス ト検索アプリケーションの開発および統合が容易です。•
優れた管理性 Oracle Text は、管理者が一般的に持つスキルを活用して、標準的なエンタープライズ管理 ツールによって管理することが可能です。•
セキュリティ Oracle Text ではデータベースのセキュリティ機能が使用されます。 Oracle Textの機能 このセクションでは、Oracle Text の主な機能について詳しく説明します。 索引タイプ Oracle Text には、標準、カタログ、分類という 3 種類の索引タイプがあり、すべてのテキスト検索 ニーズに対応しています。表 1 は、3 種類の索引タイプの概要を示しています。 1. ドキュメントや Web ページを対象とする従来型の全文検索に使用する、標準的な索引タ イプ。CONTEXT 索引タイプでは、不要な結果のページを返すことなく、必要なコンテン ツを検索できる豊富なテキスト検索機能が使用可能です。 2. e ビジネス・カタログ専用に設計された最初のテキスト索引である、カタログ索引タイプ。 CTXCAT カタログ索引タイプでは、Web 速度での柔軟な検索およびソートが可能です。 3. 分類アプリケーションおよびルーティング・アプリケーションの作成に使用する、分類索 引タイプ。CTXRULE 索引タイプは問合せ表に作成され、この問合せ表で、問合せに分類条 件またはルーティング条件が定義されます。 索引タイプ アプリケーション・タイプ 問合せ演算子 CONTEXT テキストが大量のまとまったドキュメントで構成されている場合、この索引を使用 してテキスト検索アプリケーションを作成します。MS Word、HTML、XML、プ レーン・テキストなどの多様なフォーマットのドキュメントを索引付けできます。 CONTEXT索引では、さまざまな方法で索引をカスタマイズできます。 CONTAINS CTXCAT この索引タイプを使用して、項目名、価格、複数の列に保存されている記述など、 小さいテキスト断片を索引付けします。特に、複合問合せに適しています。 CATSEARCH CTXRULE CTXRULE索引は、ドキュメント分類アプリケーションの構築に使用します。この CTXRULE索引は問合せ表に作成され、この問合せ表で、各問合せに分類が定義され ます。 単一のドキュメント(プレーン・テキスト、HTML、またはXML)は、MATCHES演 算子を使用して分類できます。 MATCHES 表1:索引タイプの概要サブストリング索引とプリフィックス索引
Oracle Text には、CONTEXT 索引タイプを使用したサブストリング索引とプリフィックス索引があ ります。ワイルド・カード問合せが後方一致および中間一致の場合、サブストリング索引を作成す るとパフォーマンスが向上します。ワイルド・カード問合せが前方一致の場合は、プリフィックス 索引を作成すると、パフォーマンスが向上します。 索引の保守と同期化 Oracle Database 12c では、ユーザーは索引作成時に索引更新の設定を指定でき、手動、コミット時、 または一定の間隔で更新することを指定できます。また、ユーザーはトランザクション型のテキス ト索引を指定でき、挿入後または更新後、直ちにドキュメントを検索できます。e ビジネス・カタ ログで通常使用される短いタイプのテキスト用に設計されたカタログ索引タイプは、常にトランザ クション型であり、同期化は不要です。 パラレル索引付け パラレル索引付けでは、複数の CPU コアを利用できます。パラレル索引付けを作成すると、次のよ うな場合に有効です。
•
パフォーマンスの向上•
データ・ステージング•
大規模なデータ収集に基づくアプリケーションの迅速な初期導入•
アプリケーション開発中にユーザーが異なる索引パラメータやスキーマのテストを実行す る必要がある場合のアプリケーション・テスト 以下の例では、並列度 3 でテキスト索引を作成します。 CREATE INDEX myindex ON docs(tk) INDEXTYPE IS ctxsys.context PARALLEL 3;図 2 は、テキスト索引作成がパラレルで機能する仕組みを示しています。Oracle Parallel 機能は、 並列度に従って表を細かい部分(ポーション)に分割します。各パラレル・スレーブは、表内の 1 ポーションで機能します。
図2:テキスト索引のパラレル作成 ローカル・パーティション索引 ローカル・パーティションに基づいてテキスト索引を作成できます。ベース表の各パーティション は独自の索引を持ち、複数のパーティションにまたがる問合せは、必要なすべてのローカル索引に アクセスできます。このアプローチの主な利点は、次のとおりです。
•
管理性:管理者が索引のパーティション化の方法、オンライン/オフラインにするパーティ ション、バックアップ用パーティションなどを決定できます。•
パフォーマンス:索引がローカルにパーティション化された環境では、スケーラビリティ が大幅に改善されます。 問合せ演算子 Oracle Text では、複数の方法を用いて検索問合せを効率的に処理できます。•
キーワード検索:ドキュメント内のキーワードを検索します。ユーザーは、問合せをもっ ともよく表した 1 つまたは複数のキーワードを入力します。•
コンテキスト問合せ:特定のコンテキストで単語を検索します。ユーザーは、単語が相互 に近接して含まれているテキストを検索します。•
ブール演算:キーワードとブール演算を結び付けます。ユーザーは、ブール演算とキー ワードを結び付けた問合せを表すことができます。テキスト索引のパラレル作成
表 各パラレル・スレーブが テキスト索引 表内の 1 ポーションで機能•
サブストリング照合:特定のプロパティを持つテキストの検索です。ユーザーは、特定の 文字列が単語内に含まれているテキストを検索します。 表 2 に、問合せ演算子の一部を示します。 演算子 説明 ABOUT 可能な場合、テーマ検索を実行し、また、問合せから戻される関連ドキュメントの数を増やします。 ACCUMULATE(,) 問合せ用語のうちどれか1つ以上を含むドキュメントを検索します。検索する用語の数を増やすほど、関連性が 高まります。 AND(&) すべての問合せ用語を含むドキュメントを検索します。 Broader Tem(BT、BTG、GTP、BTI) より広範な用語または高レベルの用語としてシソーラスに定義されている用語を含めるように、問合せを拡張し ます。 EQUIValence(=) 問合せで代替置換用語を指定します。 FUZZY 指定した用語とスペルが類似している単語、または音が類似している単語を含めるように、問合せを拡張しま す。 HASPATH 指定されたセクション・パスを含むすべてのXMLドキュメントを検索します。 INPATH XMLドキュメントの特定のパス内で検索を実行します。 MDATA MDATA(MetaDATA)セクションの問合せを実行します。 MINUS(-) 特定の用語を含むドキュメントの関連性を下げます。ただし、除外するわけではありません。MNOT Mild NOT – 指定されたフレーズの一部ではない単語を検索します。たとえば、“York MNOT New York”と指定す ると、ドキュメント内の他の場所にフレーズ“New York”が含まれている場合でも、単語“York”を検索します。 Narrow Term(NT、NTG、NTP、NTI) 指定された用語よりも狭い範囲または低レベルの用語としてシソーラスに定義されている用語をすべて含めるよ
うに、問合せを拡張します。
NDATA 正確な名前が不明な場合に、NDATAセクションで"名前検索"を実行します。 NEAR(;) 2つ以上の問合せ用語の近接性に基づいてスコアを返します。
NOT(~) 特定の用語を含むドキュメントを除外します(“term1 NOT term2”の形式で使用する必要があります。“NOT term1”の形式では使用できません)。 OR(|) 問合せ用語のうちどれか1つ以上を含むドキュメントを検索します。 Preferred Term(PT) 問合せ内の用語を、その用語の優先語としてシソーラスに定義されている語句に置換します。 Related Term(RT) 問合せ内の用語を、その用語の関連語としてシソーラスに定義されている語句に置換します。 SDATA 構造化されたDATAセクション内を検索します。 Soundex(!) 音が類似した用語を含めるように、問合せを拡張します。 Stem($) 問合せ用語と同じ語根を持つ語を検索します。
Stored Query Expression (SQE) CTX_QUERY.STORE_SQEプロシージャで作成され、保存されている問合せ式を呼び出します。
SYNonym 指定された用語の同義語としてシソーラスに定義されている用語をすべて含めるように、問合せを拡張します。 Threshold(>) しきい値を下回るスコアのドキュメントを結果セットから排除します。この演算子は、ある用語がドキュメント
内でどのようにスコアを出すかに基づいて、問合せ用語レベルでドキュメントを選択します。 Translation Term(TR) シソーラスに定義されているすべての外国語用語を含めるように、問合せを拡張します。
Translation Term Synonym(TRSYM) 問合せ用語に対して定義された対応外国語、問合せ用語の同義語、および同義語の対応外国語すべてを含めるよ うに、問合せを拡張します。
Top Term 問合せ内の用語を、シソーラスの標準階層内でその用語について定義されている最上位語に置換します。 Weight(*) 指定した係数(最大で100)をスコアに掛けます。
WITHIN 問合せをドキュメント・セクションに限定します。 表2:CONTAINS問合せ演算子の概要
国際化 企業活動の国際化が進むにつれて、世界中で業務が行われるようになり、多言語機能の重要性が高 まっています。企業ポータル、ライブラリ、コンテンツ管理システムは、さまざまな言語で作成さ れたコンテンツや各種文字セットでエンコードされたコンテンツの検索機能を必要とします。XML の普及により、多言語メタデータや多言語コンテンツの検索機能は、これまで以上にその重要性が 明らかになってきました。
Oracle Text では、ASCII、UTF- 8、JA165JIS、GBK、BIG5 など、すべての Oracle NLS 文字セットを サポートしています。欧米の諸言語(英語、フランス語、スペイン語、ドイツ語など)、日本語、 韓国語、中国語(繁体および簡体)によるドキュメント間の検索もサポートしています。このよう な多言語機能により、ユーザーは複数言語による検索アプリケーション開発が可能となるほか、以 下の対応が可能になります。
•
ドキュメント・コレクション内の複数言語を組み合わせる(中国語のドキュメントと英語 のドキュメントなど)。•
中国語などの用語の問合せに英語を使用する(またはその逆)。以下の問合せでは、説明 に"monitor"またはこれに相当する中国語を含む製品を検索できます。select score(1), product_id, product_name from product_information
where contains (product_description, 'TRSYN(monitor, Chinese)',1)>0 order by score(1) desc
(TRSYN を使用するには、翻訳シソーラスをロードする必要があります。Oracle Text には、 このようなシソーラスは付属していません)。 ドキュメント・サービス Oracle Text には、ハイライト、マークアップ、スニペット、テーマ、要旨という主要ドキュメン ト・サービスが用意されています。この種のサービスは、戦略の閲覧やドキュメント表示に非常に 有効です。また、ユーザーに対して情報フィードバックを提供します。 ハイライト・サービス 問合せ文字列を取り込み、ドキュメント・コンテンツをフェッチして、ドキュメント内のどの用語 が問合せにおける一致の根拠となったのかを表示します。
マークアップ マークアップはハイライト・サービスをさらに一歩進めたもので、一致用語がマークアップされた テキスト・バージョンのドキュメントを作成します。 スニペット これは、キーワードがハイライト表示されたショート・バージョンのテキストを作成するのに有効 なドキュメント・サービスです。この手法は非常に広く使用されており、ユーザーはドキュメント を実際に開く前にその内容を知ることができます。図 4 は、このサービスを使用して、検索結果を 表示した例を示しています。 図4:検索結果を表示するドキュメント・スニペット 従来のテキスト検索機能を補足するため、Oracle Text には高度な言語機能が設定されています。ド キュメント・サービス用のこれらの言語機能により、ドキュメントのテーマやテーマ・サマリーを、 オンデマンドやドキュメントごとに作成することが可能になります。 テーマの抽出 テーマ機能は、ドキュメントの内容を説明するスナップショットを作成します。特定の用語やフ レーズを含むドキュメントを検索するのではなく、特定の主題に関係するドキュメントを、その主 題がドキュメント内に明白に言及されていない場合でも検索できます。テーマ問合せを実行すると、 要求した主題に関係するドキュメントのヒット・リストが返されて、その主題に各ドキュメントが どの程度深く関わっているかを表すスコアが表示されます。 要旨の生成 一般的要旨(Generic Gist)は、そのドキュメント全体に関わる主題をもっともよく表現しているセ ンテンスまたはパラグラフで構成されるサマリーです。この一般的要旨を使用して、テキストのメ イン・コンテンツを取り出したり、テキストの主題に対するユーザーの関心の度合いを評価したり できます。要旨は、パラグラフ・レベルでもセンテンス・レベルでも作成することが可能です。ま た、抽出したテーマの 1 つにもっとも深い関わりのあるドキュメント内の箇所を示す"視点(Point of View)”要旨も作成できます。
高度な機能 分類とクラスタリング ドキュメント分類アプリケーションは、送られてくるドキュメントをその内容に基づいて分類する ためのアプリケーションです。こうしたアプリケーションは、ドキュメント・ルーティング・アプ リケーションやドキュメント・フィルタリング・アプリケーションとも呼ばれています。たとえば、 オンライン・ニュース・サイトであれば、送られてくる多数の記事を受信した時点で、政治、経済、 スポーツなどのカテゴリに分類することが必要になります。 Oracle Text には、ユーザーがこうしたコンテンツ分類に最適の方法を選択するのを支援する多数の 機能が備わっています。 ルールベースのアプローチは、ドキュメントが特定のカテゴリに属する理由を示すユーザー定義の カテゴリ(ルール)で構成されています。したがって、CTXRULE 索引タイプの場合は、分類条件 またはルーティング条件を定義するルール(問合せ)が索引付けされます。ドキュメントの受信時 に、MATCHES 演算子を使用してドキュメントを分類できます。図 8 は分類の主な流れを示したも のです。 以前のアプローチでは、ユーザーは問合せの質を高めたり、全体像を理解したりするのに多くの時 間を費やす必要がありました。大規模なデータ・セットには、このアプローチで対応するのは非常 に困難でした。 分類トレーニング・アプローチは、特定の主題に基づいてユーザーが提供するサンプル・ドキュメ ントで構成されています。CTX_CLS パッケージによってトレーニング・セットが取り込まれ、その 主題領域でドキュメントを識別するためのルールが自動的に生成されます。これには、ディシジョ ン・ツリーとサポート・ベクター・マシン(SVM)という 2 つの方法があります。 一方、クラスタリングは、パターンをグループへと分類する非管理型の手段です。Oracle Text は、 クラスタを構築するための CTX_CLS.CLUSTERING パッケージを提供します。このパッケージによっ て、ドキュメントはその意味的内容に従い自動的にクラスタ化されます。各クラスタには、ドキュ Oracle Databas 送られてくる ドキュメント 一致した ドキュメント ルールと照合 分類アプリ ケーション 操作の 実行 Oracle Database 12c
ナレッジ・ベース Oracle Text のナレッジ・ベースには、2000 種類の主要カテゴリに属する広範な領域から収集した 40 万件を超えるコンセプトが含まれています。これらのカテゴリは、ビジネスと経済、科学技術、 地理学、政治と軍事、社会環境、抽象的アイディアと概要という 6 つの最上位語に従って階層的に 組織化されています。概要の分類、カテゴリの選択、階層組織化は、特に意味的あいまい性の問題 を回避することに重点を置いた上で、オントロジーの純正さよりも情報検索における実用性を重視 して慎重に設計されています。ユーザーは、新しい用語を追加したり既存の用語を再定義したりす ることで、このナレッジ・ベースを拡張およびカスタマイズできます。たとえば、医学用シソーラ スをインポートした後に、ナレッジ・ベースを拡張できます。 Oracle Textの使用 このセクションでは、上述した Oracle Text の主要機能に関する構文例や使用例を紹介します。 Oracle Textを使用した索引の作成 一般的な製品情報を含む次のような表があるとします。 describe product_information
Name Null? Type
--- --- --- PRODUCT_ID NOT NULL NUMBER(6)
PRODUCT_NAME VARCHAR2(50) PRODUCT_DESCRIPTION VARCHAR2(2000) CATEGORY NUMBER(2) PRODUCT_STATUS VARCHAR2(20) LIST_PRICE NUMBER(8,2) PRODUCT_DESCRIPTION 列にテキスト索引を作成し、検索可能な状態にします。索引作成は、次 の SQL 文で行います。
CREATE INDEX description_idx ON
product_information(product_description) INDEXTYPE IS CTXSYS.CONTEXT
検索は、次の SQL 文で行います。
SELECT score(1), product_id, product_name FROM product_information
WHERE CONTAINS
(product_description, 'monitor NEAR "high resolution"', 1)>0 ORDER BY score(1) DESC;
すでに説明したとおり、テキスト索引構造はデータベースに保存されています。Oracle Text の索引 は、それぞれ$I、$K、$N、$R と呼ばれる 4 つの基本的な表で構成されます。そのほかの表は、特 定の索引付けオプションが有効になっている場合に使用されます。これらの表はテキスト索引の所 有者のスキーマ内に存在し、索引名である DR$と接尾辞($I など)を連結した名前になっています。 $I 表は、索引付けされたすべてのトークンと、そのトークンが含まれるドキュメントのバイナリ表 現、ドキュメントにおけるトークンのポジションによって構成されています。各ドキュメントは、 内部 DOCID 値によって表されます。
$K 表は、内部 DOCID 値を外部 ROWID 値にマッピングする索引構成表(IOT)です。この表の各行 は、1 組の DOCID/ROWID によって構成されています。IOT により、対応する ROWID 値から DOCID の高速検索が可能です。 $R 表は、$K 表からの逆ルックアップ用に設計されており、DOCID 値が分かっている場合、ROWID をフェッチします。 $N 表には削除された DOCID 値のリストが含まれており、索引最適化プロセスで使用(およびク リーンアップ)されます。 これらの表は、すべての CONTEXT 索引に作成されます。 サブ表はすべて、索引の所有者のスキーマで作成されます。たとえば、次のように一般的な SQL コ マンドを使用して表示できます。
SQL> SELECT table_name FROM user_tables; TABLE_NAME --- DR$DESCRIPTION_IDX$I DR$DESCRIPTION_IDX$K DR$DESCRIPTION_IDX$N DR$DESCRIPTION_IDX$R PRODUCT_INFORMATION
通常のビューで索引名を確認できます。
SQL> SELECT index_name, table_name, column_name FROM user_ind_columns WHERE table_name='PRODUCT_INFORMATION';
INDEX_NAME TABLE_NAME COLUMN_NAME
--- --- --- DESCRIPTION_IDX PRODUCT_INFORMATION PRODUCT_DESCRIPTION SQL> SELECT table_name FROM user_tables;
TABLE_NAME --- DR$DESCRIPTION_IDX$I DR$DESCRIPTION_IDX$K DR$DESCRIPTION_IDX$N DR$DESCRIPTION_IDX$R PRODUCT_INFORMATION オプティマイザ・ヒント どのプランが最適なのかが事前に分かっている場合、データベース・オプティマイザに"ヒント"を 与えて、問合せパフォーマンスを向上できます。
SELECT /*+ index product_information description_idx */ score(1), product_id
FROM product_information WHERE CONTAINS (
product_description, 'monitor NEAR "high resolution"', 1) > 0 AND list_price < 500;
最後の例では標準の SQL を使用して、コンテンツ・ベースの条件と従来型のリレーショナル条件とを 混在させます。あらゆるタイプの問合せについて、説明プランを確認できます。次に例を示します。
SELECT score(0) scr, id, author, title FROM docs
WHERE CONTAINS(text, 'money', 0) > 0 and id > 16 ORDER BY scr DESC;
0 SORT (ORDER BY)
0 TABLE ACCESS (BY INDEX ROWID) OF 'DOCS' 0 BITMAP CONVERSION (TO ROWIDS)
0 BITMAP AND
0 BITMAP CONVERSION (FROM ROWIDS) 0 SORT (ORDER BY)
0 DOMAIN INDEX OF 'DOCS_TEXT' 0 BITMAP CONVERSION (FROM ROWIDS) 0 SORT (ORDER BY)
0 INDEX (RANGE SCAN) OF 'SYS_C001220' (UNIQUE)
すでに説明した通り、Oracle Text では、ABOUT 演算子を使用してテーマやコンセプトベースの検 索をサポートしており、逆向きの索引のテーマと一致するものがフリー・テキスト問合せから抽出 されます。たとえば、ドキュメントに"train"(列車)という用語がまったく含まれていなくても、 列車に関係するニュース記事を検索することが可能です。 SELECT id title FROM news_table WHERE CONTAINS(article'about(train) ' ) > 0; Id Title
334 Rail Transportation in Europe
テーマ、ABOUT 問合せ、要旨、ABOUT 問合せハイライト、階層問合せフィードバックという、 Oracle Text のテーマ・ベース機能は、すべて内部ナレッジ・ベースに依存しています。
Oracle データベースの能力によって、複数領域にわたる問合せの作成が可能になりました。たとえ ば、トロントから 35km 以内に在住していて、癌の罹患歴を持つ家族がおり、喫煙者である、50 歳 以上の患者数を検索して胸部レントゲン写真を入手する場合、次のような問合せを実行します。
SELECT count(p) p.age p.xray FROM patients p cities c WHERE p.age > 50
AND c.name = 'Toronto'
AND SDO_WITHIN_DISTANCE(p.loc, o.loc '<= 35 km') AND Contains(p.medical_history 'smoke AND cancer')>0
SDATAセクション
Oracle Text 11g では、SDATA(構造化データ)セクションが新たに加わりました。SDATA セク ションは、フィールド・セクションやゾーン・セクション同様、ドキュメントのテキスト内に組み 込まれていますが、これまでのセクションと異なり、文字、数字、日付情報を含めることができ、 "greater than”、“less than”、“between”などの演算子を使用した検索や等号検索が可能です。 以下は、SDATA 問合せ演算子を使用した問合せの例です。
SELECT item_id FROM items WHERE CONTAINS (description, 'racing and
SDATA(itemtype=’’BOOK’’) and SDATA(price<10)’) > 0 ORDER BY price DESC
ここでは、テキスト問合せの一部として、範囲検索を実施しています。これは、さまざまな状況に 有効な新機能です。 複合ドメイン索引 複合ドメイン索引では、SDATA セクションと同じ基礎テクノロジーを利用していますが、より標準 の方法で使いやすくなっています。 はじめに、用語について解説します。"ドメイン索引"とは、特定のタイプのデータ(この例の場合、 テキスト・データ)とともに使用するタイプの索引です。通常の Oracle 用語における複合索引は、 複数の例を対象とする索引です。したがって、複合ドメイン索引(CDI)は、複数の列を対象とす る通常のドメイン索引の拡張機能になります。 ここで、テキスト索引と 2 つの構造化列を検索する代表的な複合問合せを確認します。 SELECT item_id FROM items WHERE
CONTAINS (description, 'racing') > 0 AND itemtype = 'BOOK'
AND price < 10 ORDER BY price DESC
この問合せに適切な索引を古いバージョンで作成するには、次の SQL コマンドを実行することにな ります。
CREATE INDEX typeind ON items (itemtype) CREATE INDEX priceind ON items (price)
Oracle Database 12c では、1 回の呼出しで必要な操作をすべて実行できます。 CREATE INDEX compind ON items (description)
INDEXTYPE IS ctxsys.context FILTER BY itemtype, price SORT BY price
Oracle では、price や itemtype 情報をテキスト索引内に保存します。問合せを変更する必要はあり ません(SDATA では変更する必要があります)。オプティマイザはテキスト索引だけで問合せ要件 が満たされることを理解し、また行のフィルタリングがテキスト索引プロセッサに"押し込まれ"、 問合せ要件を満たす正しい itemtype と price を入手できます。また、テキスト索引に対して、正し くソートされた行を返すように要求しますが、これはデータベースからすべての行をフェッチして、 その後でソートするよりもかなり効率的です。 XMLのサポート XML 機能には、WITHIN 演算子、ネストされたセクション検索、属性値内検索、複数のタグの同一 名へのマッピング、INPATH 演算子と HASPATH 演算子を使用したパス検索などがあります。 次の XML の例を使用して、Oracle Text 機能を示します。 <?xml version="1.0"?> <FAQ OWNER="Billy Text"> <TITLE>Oracle Text FAQ</TITLE> <DESCRIPTION>
Everything you always wanted to know about Text</DESCRIPTION> <QUESTION>What is Oracle Text?
</QUESTION> <ANSWER>
Oracle Text uses standard SQL to index search and analyze text and documents stored in the database files or websites.
</ANSWER> </FAQ>
これで検索が可能になります。
SELECT title description FROM FAQTable
WHERE CONTAINS(text'Oracle WITHIN QUESTION')> 0; また、属性値による検索も可能です。
SELECT title description FROM FAQTable
WHERE CONTAINS(text'Billy WITHIN FAQ0OWNER')> 0; パス検索は、次のように実行できます。
SELECT title description FROM FAQTable
WHERE CONTAINS(text'Oracle INPATH(FAQ/TITLE)')> 0; パスの有無を判別するパス・テストは次のようになります。
SELECT title description FROM FAQTable WHERE CONTAINS(text'HASPATH(FAQ/TITLE/DESCRIPTION)')> 0; XMLドキュメントのコンテンツおよび構造の検索 従来のデータベースでは、コンテンツや構造の検索は可能でも、両者を同時に実行することはでき ませんでした。オラクルは、コンテンツと構造を同時に問い合わせることができる独自の機能を提 供します。
Oracle Text には、XMLType 値を対象とする existsNode と extract という 2 種類の SQL 関数が あります。
•
existsNode():XPath 式が指定された場合、ドキュメントに適用された XPath が有効なノー ドを返せるかをチェックします。•
extract():XPath 式が指定された場合、ドキュメントに XPath を適用し、フラグメントを XMLType として返します。 上記の関数は、コンテンツ検索用のすべてのテキスト問合せ言語と組み合わせることができます。 たとえば、answer タグに standard or SQL"を含む FAQ を検索し、質問を表示できます。select f.faq.extract('/FAQ/QUESTION/text()').getStringVal() from faq f
C O N N E C T W I T H U S blogs.oracle.com/oracle
facebook.com/oracle twitter.com/oracle oracle.com
Copyright © 2017, Oracle and/or its affiliates.All rights reserved.本文書は情報提供のみを目的として提供されており、ここに記載されている内容 は予告なく変更されることがあります。本文書は、その内容に誤りがないことを保証するものではなく、また、口頭による明示的保証や法律に よる黙示的保証を含め、商品性ないし特定目的適合性に関する黙示的保証および条件などのいかなる保証および条件も提供するものではありま せん。オラクルは本文書に関するいかなる法的責任も明確に否認し、本文書によって直接的または間接的に確立される契約義務はないものとし ます。本文書はオラクルの書面による許可を前もって得ることなく、いかなる目的のためにも、電子または印刷を含むいかなる形式や手段に よっても再作成または送信することはできません。
Oracle および Java は Oracle およびその子会社、関連会社の登録商標です。その他の名称はそれぞれの会社の商標です。
Intel および Intel Xeon は Intel Corporation の商標または登録商標です。すべての SPARC 商標はライセンスに基づいて使用される SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMD ロゴおよび AMD Opteron ロゴは、Advanced Micro Devices の商標または 登録商標です。UNIX は、The Open Group の登録商標です。0517
ホワイト・ペーパー・タイトル 2017 年 5 月 著者:Roger Ford