ヘッダーをスキップ
Oracle Ultra Search管理者ガイド
11gリリース1(11.1)
E05790-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

10 Oracle Ultra Search開発者ガイドおよびAPIリファレンス

この章では、Oracle Ultra SearchのAPIおよび関連情報について説明します。この章では、次の項目について説明します。


関連項目:

『Oracle Ultra Search API Reference』

Oracle Ultra Search APIの概要

Oracle Ultra Searchには、次のAPIが用意されています。

Query API

Query API。索引付けされたデータで使用します。Java APIは、HTMLレンダリング要素を必要としません。アプリケーションでは、HTMLインタフェースを完全にカスタマイズできます。

クローラ・エージェントAPI

クローラ・エージェントAPI。独自のドキュメント・リポジトリをクロールして索引付けします。

Email API

Email APIは、Oracle Ultra Searchの問合せアプリケーションが電子メールを表示する際に使用されます。このAPIは、独自のカスタム問合せアプリケーションを作成するときにも使用できます。

URLリライタAPI

URLリライタAPI。クローラはこれを使用して、抽出したURLリンクがURLキューに挿入される前にフィルタ処理およびリライトします。

ドキュメント・サービスAPI

ドキュメント・サービスAPIを使用すると、ドキュメント・コンテンツに基づいて属性データを生成できます。

Oracle Ultra Searchには、検索結果を問い合せて表示するための、高度な機能を備えた問合せアプリケーションも含まれています。問合せアプリケーションは、J2EEに準拠したWebアプリケーションです。

OC4Jの外で使用している場合は、ultrasearch_query.jarの次の依存ファイルを含める必要があります。

Oracle Ultra SearchのQuery API

Oracle Ultra Searchは、索引付けされたデータの問合せ用にJava APIを提供します。このAPIのメソッドによって、問合せ結果を検索および表示します。このAPIはJavaで記述されているため、JSPバージョン1.1以上などのJavaベースのテクノロジをサポートする広範囲のWebアプリケーション・サーバーと互換性があります。Java APIは、スケーラビリティを得るためにJDBC接続プーリングを使用します。

Java APIは、HTMLレンダリング要素を必要としません。アプリケーションでは、HTMLインタフェースを完全にカスタマイズできます。たとえば、次のものを構築できます。

Oracle Ultra Search Java Query APIを使用して、WebアプリケーションにOracle Ultra Searchの問合せ機能を埋め込みます。このAPIでは、次の2種類のメソッドをサポートします。

  1. 問合せ結果データのみを取得するメソッド

  2. 問合せ結果データを含むHTMLコードを取得するメソッド

データのみのメソッドは、HTMLを戻しません。これは、HTMLコードを完全に制御してレンダリングする必要がある場合に使用します。HTMLコードを取得するメソッドでは、問合せ入力ボックスおよび結果リストをWebアプリケーションに埋め込む機能をサポートしています。

Oracle Ultra Search Java Query APIを使用して、次の操作を実行できます。

Oracle Ultra Search Java Query APIは、oracle.ultrasearch.queryパッケージ内にカプセル化されています。

問合せ構文拡張のカスタマイズ

Oracle Ultra Searchは、Oracle Textエンジンを使用して、ドキュメントの索引付けおよび検索を行います。ユーザーが問合せ文字列を指定すると、Oracle Ultra Searchは、その文字列をOracle Textの問合せ式に変換します。この処理を「問合せ構文拡張」と呼びます。

Oracle Ultra Searchでは、問合せ構文拡張を独自に実装して使用するようにカスタマイズできます。

デフォルトの問合せ拡張によって、インターネット検索エンジンに類似した問合せ構文を指定できます。この構文は、ドキュメント・タイトル文字列属性でユーザーの問合せと一致するドキュメントを高くスコア付けします。Containsの構文は、ドキュメントのコンテンツに対して使用される場合も文字列属性に対して使用される場合も同じです。

デフォルトの問合せ構文拡張は、oracle.ultrasearch.query.Containsクラスで実装されています。問合せ拡張をカスタマイズするには、oracle.ultrasearch.query.CtxContainsクラスを使用します。

ここでは、デフォルトの問合せ拡張ルール、および使用している環境向けに問合せ構文拡張をカスタマイズする方法を説明します。

デフォルトの問合せ構文拡張の実装

デフォルトの問合せ構文拡張の実装は、次の方法に直接影響します。

  • エンド・ユーザーの問合せ構文: ユーザーが問合せ文字列を入力する方法

  • スコア付け: 問合せに一致するドキュメントへのスコア付けの方法

  • 拡張ルール: ユーザーが入力した問合せ文字列からOracle Textの問合せ文字列への変換方法

デフォルトの問合せ構文拡張は、oracle.ultrasearch.query.Containsクラスで実装されています。問合せアプリケーションは、コンテンツの検索および文字列属性検索で、この構文拡張を利用します。

エンド・ユーザーの問合せ構文

デフォルトの問合せ構文拡張の実装で定義されるエンド・ユーザーの問合せ構文は、Webの検索エンジンで使用されている標準テキスト問合せ構文に似ています。

  • トークン: トークンは、二重引用符(")で囲まれた文字列です。1つの単語または句です。

  • 演算子: デフォルトの実装では、3つの演算子が定義されます。[+]、[-]および[*]です。これらの演算子は、デフォルトの実装で定義されています。カスタム実装によって、これらの演算子を変更します。

    プラス演算子[+]は、その後に続くトークンが、検索結果に含まれるすべてのドキュメントに存在することを指定します。

    マイナス演算子[-]は、その後に続くトークンが、検索結果に含まれるすべてのドキュメントに存在しないことを指定します。

    アスタリスク[*]は、検索のワイルドカードを指定します。0(ゼロ)または1つ以上の文字に相当します。アスタリスクで始まるトークンは、無視されます。アスタリスクは、トークンの末尾(右側)または途中のみに指定できます。たとえば、「hel*o」および「hell*」では正しくアスタリスクを使用していますが、「*ello」は受け入れられません。

次に、Oracle Ultra Searchのエンド・ユーザーの問合せ構文に関するルールを示します。


注意:

エンド・ユーザーのすべての問合せ文字列を、大カッコで囲んで示します。たとえば、エンド・ユーザーの問合せ文字列Oracle Applicationsは、[Oracle Applications]と記述します。

ルール 説明
単一の単語の検索 1つの単語を入力すると、その単語を含むドキュメントを検索する。

たとえば、[Oracle]は、「Oracle」という単語を含むすべてのドキュメントを検索する。

注意: [Oracle]の検索は、[Oracle*]とは異なる。

複数の単語の検索 2つ以上の単語を入力すると、順序に関係なく、それらの単語のいずれかを含むドキュメントを検索する。

たとえば、[Oracle Applications]の場合は、「Oracle」、「Applications」または「Oracle Applications」を含むドキュメントを検索する。

強制的な包含[+] 単語の前に[+]を付けると、その単語は、一致したすべてのドキュメントに存在することを示す。

たとえば、[Oracle + Applications]の場合は、「Applications」という単語を含むドキュメントのみを検索する。注意: 複数の単語の検索では、最初のトークンを含むすべてのトークンの前に[+]を付けることができる。

強制的な排除[-] 単語の前に[-]を付けると、その単語は、一致したすべてのドキュメントに存在しないことを示す。

たとえば、[Oracle - Applications]の場合は、「Applications」という単語を含まないドキュメントのみを検索する。注意: 複数の単語の検索では、最初のトークン以外のすべてのトークンの前に[-]を付けることができる。

句の一致["..."] 一連の単語を二重引用符で囲むと、句を正確に含むドキュメントのみを検索する。

たとえば、["Oracle Applications"]の場合は、「Oracle Applications」という文字列を含むドキュメントのみを検索する。

ワイルドカードの一致[*] 単語の右側に[*]を付けると、アスタリスクの左側が一致する結果を戻す。

たとえば、[Ora*]という文字列の場合は、「Oracle」や「Orator」など、「Ora」で始まるすべての単語を含むドキュメントを検索する。単語の途中にアスタリスクを挿入することもできる。たとえば、[A*e]という文字列の場合、「Apple」、「Ate」、「Ape」などの単語を含むドキュメントを検索する。ワイルドカードの一致では、より多くの計算処理が必要なため、他の問合せより低速である。


クラスのスコア付け

エンド・ユーザーの問合せ文字列に応じてドキュメントを一致させる方法には、3通りあります。これらの3つの方法をクラスのスコア付けと呼びます。ドキュメントが高度なクラス要件を満たす場合、そのドキュメントは高くスコア付けされ、高い位置にランク付けされます。クラスごとに、ドキュメントがクラスのスコア付け条件にどの程度一致するかによってランク付けが異なります。

クラス1は、最も高くスコア付けされたクラスです。ドキュメント内で完全に一致した文字列の数によって、スコアが決まります。一致した句が多いドキュメントほど、一致した句が少ないドキュメントより高くスコア付けされます。

クラス2は、その次に高くスコア付けされたクラスです。このクラスでは、ドキュメントに現れる各トークンが接近しているほど、高くスコア付けされます。たとえば、エンド・ユーザーの問合せ文字列が[Oracle Applications Financials]で、3つのドキュンメントが検出されたとします。3つのドキュメントとも、「Oracle Applications Financials」という文字列は含みません。ただし、ドキュメントXには、同じ文にあって他の単語で分離される「Oracle」、「Applications」および「Financials」の3つのトークンが含まれます。ドキュメントYには、同じ段落で異なる文にそれぞれのトークンが含まれます。ドキュメントZには3つのトークンが含まれますが、各トークンは異なる段落にあります。この場合は、各トークンが最も接近しているドキュメントXが最も高くスコア付けされます。同様に、ドキュメントYはドキュメントZより高くスコア付けされます。

クラス3は、最も低くスコア付けされたクラスです。トークンを多く含むドキュメントは、高くスコア付けされます。たとえば、エンド・ユーザーの問合せ文字列が[Oracle Applications Financials]で、3つのドキュンメントが検出されたとします。ドキュメントXには、3つのトークンすべてが含まれます。ドキュメントYには、「Oracle」および「Applications」のみが含まれます。ドキュメントZには、「Oracle」のみが含まれます。この場合は、ドキュメントXはドキュメントYより高くスコア付けされます。同様に、ドキュメントYはドキュメントZより高くスコア付けされます。

拡張ルール

前述のとおり、エンド・ユーザーの問合せはOracle Textの問合せに拡張されます。拡張された問合せ文字列のルールは、BNF表記に準拠します。また、これらのルールは、デフォルトの問合せ構文拡張の実装としてOracle Ultra Searchで使用されます。

次に、拡張検索を定義するルールを示します。

<expanded query> ::= (<expression> within <title section>)*2, <expression>

<expression> ::= <generic query expression> | <simple query expression>

<generic query expression> ::= (([ <plus expression>*100 & ]) (<main expression>)) [ <minus expression> ]

<simple query expression> ::= (<phrase expression>)*2, (<main expression>)

<main expression> ::= (<near expression>)*2, (<accum expression>)

ここでは、前述のルールで使用されている項目およびその意味について説明します。

<plus expression>は、すべてのプラス・トークンのAND式です。

<minus expression>は、すべてのマイナス・トークンのNOT式です。

<phrase expression>は、<main expression>内のすべてのトークンで構成されたPHRASEです。

<near expression>は、マイナス・トークンを除くすべてのトークンのNEAR式です。

<accum expression>は、マイナス・トークンを除くすべてのトークンのACCUMULATE式です。

<simple query expression>は、エンド・ユーザーの問合せに複数のトークンがあり、演算子または二重引用符がない場合のみ使用されます。それ以外の場合は、<generic query expression>が使用されます。

プラス・トークン、マイナス・トークン以外のトークンがない場合は、<plus expression>および<accum expression>が排除されます。

ルールの適用例

次に、デフォルトの問合せ構文拡張の実装によって、エンド・ユーザーの問合せ文字列をOracle Text互換の問合せ文字列に変換する方法を示します。

エンド・ユーザーの問合せ文字列 Oracle Textで認識可能な拡張検索文字列
[Oracle]
((({Oracle}) within TITLE__31)*2,({Oracle}))
[Oracle + Applications]
((((({Applications})*10)*10&(({Oracle};{Applications})*2,({Oracle},{Applications
}))) within TITLE__31)*2,((({Applications})*10)*10&(({Oracle};{Applications})*2,
({Oracle},{Applications}))))
[Oracle - Applications]
(((({Oracle})~{Applications}) within TITLE__31)*2,(({Oracle})~{Applications}))
["Oracle Applications"]
((({Oracle Applications}) within TITLE__31)*2,({Oracle Applications}))
[Ora*]
((((Ora%)) within TITLE__31)*2,((Ora%)))
[Oracle Applications]
(((({Oracle Applications})*2,(({Oracle};{Applications})*2,({Oracle},{Application
s}))) within TITLE__31)*2,(({Oracle Applications})*2,(({Oracle};{Applications})*
2,({Oracle},{Applications}))))

ルールのカスタマイズ

独自の問合せ構文拡張の定義および実装によって、企業の目的に合うように拡張をカスタマイズします。ctxsys.contains演算子を使用したOracle Text問合せに関する詳細な知識が必要です。Oracle Textは、問合せ言語の一部として、シソーラス、テーマ、ステミングおよび同音語など、豊富な言語機能のセットを備えています。


関連項目:

  • 『Oracle Textアプリケーション開発者ガイド』

  • 『Oracle Textリファレンス』


Oracle Ultra Searchをカスタマイズして独自の問合せ構文拡張の実装を使用するには、oracle.ultrasearch.query.Containsクラスのかわりに、問合せアプリケーション内のoracle.ultrasearch.CtxContainsクラスを使用します。CtxContainsを使用すると、任意のOracle Textの問合せをOracle Ultra Searchの問合せの一部として使用できます。次の手順を実行します。

  1. ユーザー入力に基づいてOracle Textの問合せを構成します。たとえば、ユーザー入力が"cat"の場合、ステミング機能を使用して、Oracle Textの問合せ"$cat"を構成できます。これにより、"cat"または"cats"が含まれているドキュメントが検索されます。Oracle Textの問合せの構成には、文字列オブジェクトであればどのようなツールでも使用できます。ユーザーの問合せ構文がどの程度複雑であるかにより、一部の既存のレクサーをJavaで活用できます。

  2. Oracle Textの問合せを使用して、CtxContainsを構成します。次に例を示します。

    String textQuery = "$cat";
    oracle.ultrasearch.Query query = new oracle.ultrasearch.CtxContains (textQuery);
    

    このコードは、catまたはcatsが含まれているドキュメントに対する問合せを構成します。また、次のようにして、問合せの対象をドキュメントのタイトル(コンテンツを含まない)のみに制限することも可能です。

    String textQuery = "cat";
    StringAttribute titleAttribute = instanceMetaData.getStringAttribute("TITLE");
    oracle.ultrasearch.Query query = new oracle.ultrasearch.CtxContains (textQuery, titleAttribute);
    
  3. オプションで、And/Or問合せ演算子で問合せを連結することにより、CtxContainsを他のOracle Ultra Searchの問合せと組み合せることもできます。

  4. 構成した問合せオブジェクトでgetResultメソッドを起動して問合せを実行します。


関連項目:

oracle.ultrasearch.query.CtxContains APIの詳細は、『Oracle Ultra Search Java API Reference』を参照してください。

Oracle Ultra SearchのQueryタグ・ライブラリ

Oracle Ultra Searchでは、Java Query APIに加えて、検索アプリケーションの開発にかわるJSPタグ・ライブラリが提供されています。Oracle Ultra Searchのタグ・ライブラリは、Sun社のJSPバージョン1.1の仕様に基づいて、動的なJava開発作業と静的なHTML開発作業を区別します。このため、Javaに慣れていないWeb開発者でもアプリケーションに検索機能を組み込むことができます。

Oracle Ultra Searchのタグ・ライブラリでは、Java Query API機能のサブセットを提供しています。カスタム問合せ拡張やURL発行などの拡張機能は、タグとしては使用できません。タグ・ライブラリの主な機能には、拡張検索フォームをレンダリングするための検索属性、グループ、言語、LOVを取得する機能、および結果セットを反復処理し、結果ページをレンダリングするためのドキュメント属性とプロパティを取得する機能があります。

次の表に、タグ・ライブラリのサマリーを示します。

タグ 説明 属性
instance Oracle Ultra Searchインスタンスとの接続を確立します。 instanceId

username

password

URL

dataSourceName

tablePagePath

emailPagePath

filePagePath

showAttributes 拡張検索でこのタグを使用し、使用可能な属性のリストを表示します。 instance

locale

showGroups 拡張検索でこのタグを使用し、グループのリストを表示します。 instance

locale

showLanguages 拡張検索でこのタグを使用し、インスタンスに定義されている言語のリストを表示します。 instance
showLOV 検索属性に定義されているすべての値を表示します。 instance

locale

attributeName

attributeType

getResult 検索を実行します。 resultId

instance

query

queryLocale

documentLanguage

from

to

boostTerm

withCount

fetchAttribute getResult内にネストされているタグ。問合せ結果とともにフェッチされる各ドキュメントの属性を指定します。fetchAttributeタグは必要な数に応じてネストできる。 attributeName

attributeType

showHitCount getResultタグでwithCount="true"を設定すると、結果にはヒット総数が含まれ、showHitCountでその総数を表示できます。 result
showResults 検索結果をレンダリングします。 result

instance

showAttributeValue ドキュメント属性をレンダリングします。 attributeName

attributeType


これらのタグの詳細は、後述します。Oracle Ultra Searchのタグを使用するためには、次の要件を満たしてください。

Oracle Ultra Searchのタグ・ライブラリ定義(TLD)ファイルは、sample.earがデプロイされている$ORACLE_HOME/ultrasearch/sample/query/WEB-INF/ultrasearch-taglib.tldにあります。META-INF/taglib.tldという名前でultrasearch_query.jarにも格納されています。

Queryタグの説明

ここでは、Oracle Ultra Searchの各タグおよびその属性と操作について説明します。ここで示す例には静的なHTMLは含まれていませんが、静的なHTMLを挿入して出力をフォーマットすることはできます。

<instance>タグ: Oracle Ultra Searchインスタンスとの接続

Oracle Ultra Searchインスタンスとの接続を確立します。このタグが機能するには、JDBC接続文字列、スキーマのユーザー名とパスワード、Oracle Ultra Searchインスタンス名などの基本パラメータを設定する必要があります。

属性名 説明
instanceId="名前" このタグによって定義されたインスタンスに名前を付けます。この名前は、他のOracle Ultra Searchタグで検索対象のインスタンスを指定するときに使用します。
username データベース接続を作成します。
password データベース接続を作成します。
url JDBC接続の作成に使用するURLを取得します。dataSourceNameが指定されている場合、この属性はオプションです。
dataSourceName JDBCデータ・ソースを識別するJNDI名です。ユーザーは、URLまたはdataSourceNameのいずれかのプロパティを設定する必要があります。URLが指定されている場合、これはオプションです。
instanceName スキーマ・ユーザーが所有しているOracle Ultra Searchインスタンスの名前です。スキーマ・ユーザーが1つのOracle Ultra Searchインスタンスのみ所有している場合、これはオプションです。
tablePagePath データベース表の内容を渡すWebアプリケーションのURLパスです。
emailPagePath 電子メールの内容を渡すWebアプリケーションのURLパスです。
filePagePath ファイルの内容を渡すWebアプリケーションのURLパスです。

このタグによって、instanceIdプロパティで設定される名前のスクリプト変数を定義します。他のすべてのタグ・プロパティは、oracle.ultrasearch.query.QueryInstanceクラスのプロパティに対応しています。URLまたはdataSourceName属性を設定する必要があります。これらは一意です。

次に、データベースに接続するためのURLプロパティの例を示します。

<US:instance
 instanceId="mybookstore"
 url="oracle:jdbc:thin:@dbhost:1521:inst1"
 username="scott"
 password="tiger"
 tablePage="../display.jsp"
 emailPage="../mail.jsp"
 filePage="../display.jsp"
/>

<iterAttributes>タグ: すべての検索属性の表示

ユーザーが拡張検索を実行するとき、アプリケーションでは、使用可能な属性のリスト、グループのリスト、およびインスタンスで定義されている言語のリストを表示する必要があります。これらを表示するには、ページのレンダリングで使用するスクリプト変数を定義するいくつかの反復タグを使用します。

Oracle Ultra Searchの各属性には名前、タイプおよび表示名があり、QueryInstanceタグに設定されているロケールに基づいて翻訳されます。属性タイプは、この属性で使用できる演算子、およびユーザー入力の解析方法を判断するために使用します。

属性名 説明
instance="名前" instanceタグで定義されたオブジェクトを参照するための必須属性です。
locale="ロケール" このタグを使用してフェッチされる表示名を決定します。

このタグは反復タグです。instanceタグ属性で参照されるインスタンス内のすべての検索属性をループ処理します。このタグは、ループ処理ごとにattributeという名前のスクリプト変数(oracle.ultrasearch.query.Attributeオブジェクト)を定義します。また、"displayname"という名前の文字列変数も定義します。この名前はローカライズされた属性名です。

次の例は、"mybookstore"インスタンス内のすべての属性を示します。ここでは英語の表示名を使用しています。

<US:iterAttributes instance="mybookstore" locale="<%=Locale.ENGLISH%>" >
<%= attribute %>
<%= displayname %>
</US:iterAttributes>

<iterGroups>タグ: すべての検索グループの表示

ShowAttributesタグと同様に、Show Groupsタグはインスタンス内のすべてのグループを反復処理します。

属性名 説明
instance="名前" instanceタグで定義されたオブジェクトを参照するための必須属性です。
locale="ロケール" このタグを使用してフェッチされる表示名を決定します。

このタグは、instanceタグ属性で参照されるインスタンス内のすべての検索グループをループ処理します。このタグは、ループ処理ごとにgroupという名前のスクリプト変数(oracle.ultrasearch.query.Groupオブジェクト)を定義します。また、"displayname"という名前の文字列変数も定義します。この名前はローカライズされたグループ名です。

次の例は、"mybookstore"インスタンス内のすべてのグループを示します。ここでは英語の表示名を使用しています。

<US:iterGroups instance="mybookstore" locale="<%=Locale.ENGLISH%>" >
<%= group %>
<%= displayname %>
</US:iterGroups >

<iterLanguages>タグ: すべての検索言語の表示

showAttributesタグと同様に、showLanguagesタグはインスタンス内のすべての言語を反復処理します。各言語はjava.util.Localeオブジェクトで定義されるため、その表示名はOracle Ultra Searchでは処理されません。したがって、このタグでは表示名のスクリプト変数は定義されません。

属性名 説明
instance="名前" instanceタグで定義されたオブジェクトを参照するための必須属性です。

このタグは反復タグです。instanceタグ属性で参照されるインスタンス内のすべての検索言語をループ処理します。このタグは、ループ処理ごとにlanguageという名前のスクリプト変数(java.util.Localeオブジェクト)を定義します。言語の表示名は、JavaのgetDisplayNameメソッドを使用して、オブジェクト自体のプロパティとして提供されます。

次の例は、"mybookstore"インスタンス内のすべての言語を示します。ここでは英語の表示名を使用しています。

<US:iterLanguages instance="mybookstore">
<%= language %>
<%= language.getDisplayName (Locale.ENGLISH) %>
</US:iterLanguages >

<iterLOV>タグ: 検索属性で定義されているすべての値の表示

属性名 説明
instance="名前" instanceタグで定義されたオブジェクトを参照するための必須属性です。
locale="ロケール" このタグを使用してフェッチされる表示名を決定します。
attributeName="属性名" 属性の名前で、属性のLOVはこのLOVにフェッチされます。
attributeType="string | number | date" LOVがフェッチされる属性のタイプです。属性名ではインスタンス内の属性を一意に識別できないため、属性のタイプが必要です。

このタグは反復タグです。検索属性LOV内のすべての値をループ処理します。このタグは、ループ処理ごとにvalueという名前のスクリプト変数を定義します。これは、属性タイプに応じてjava.lang.Stringjava.util.Dateまたはjava.math.BigDecimalのいずれかのオブジェクトになります。また、"displayname"という名前の文字列変数も定義します。この名前はローカライズされた値の表示名です。

次の例は、"mybookstore"インスタンス内にある"Dept"という文字列属性のすべての値を示します。ここでは英語の表示名を使用しています。

<US:iterLOV instance="mybookstore" attribute_name="Dept" attribute_type="String" >
<%= value %>
<%= displayname %>
</US:iterLOV >

問合せの明示

Oracle Ultra Searchでは、問合せを作成するための一連のクラスをサポートしています。現在、これらのクラスに相当するタグはありません。

<getResult>タグ: 検索の実行

このタグは、oracle.ultrasearch.query.Resultタイプのスクリプト変数を定義することで、検索を実行し結果を戻します。

属性名 説明
resultId="名前" このタグによって生成された結果に名前を付けます。この名前は、他のタグで結果をページにレンダリングするために使用します。
instance="名前" instanceタグで定義されたオブジェクトを参照するための必須属性です。
query="<%= expression %>" 検索対象の問合せオブジェクトを指定します。
queryLocale="ロケール" 問合せオブジェクトのロケールを指定します。
documentLanguage="ロケール" ドキュメントの言語を指定します。この属性はオプションです。言語を指定しない場合は、すべての言語が検索対象になります。
from="数値" 最初の結果の索引を指定します。
to="数値" 最後の結果の索引を指定します。
boostTerm="文字列" 検索オプションで使用される検索条件を指定するために使用します。この属性はオプションです。
withCount="true | false" 結果に合計結果数の見積りを含めるかどうかを指定します。この属性はオプションです。この属性を指定しない場合は、withCount=falseを指定した場合と同じ動作になります。

<getResult>タグは、oracle.ultrasearch.query.InstanceクラスのgetResultメソッドに対応しています。getResultメソッドがフェッチする属性を指定できることを除き、タグの属性はメソッドのパラメータにマップされます。<getResult>タグは、メタデータを選択するために、ネストされた<fetchAttribute>タグを使用する必要があります。

次の例は、フランス語のドキュメントの中の、最初の20の英語による問合せドキュメントの検索を示します。

<US:getResult
 resultId="searchresult"
 instance="mybookstore"
 query=""
 queryLocale=""
 documentLanguage=""
 from="1" to="20">
</US:getResult>

<fetchAttribute>タグ: メタデータの選択

このタグは、<getResult>内でネストされたタグとして使用します。このタグは、各ドキュメントの属性が問合せ結果とともにフェッチされるかどうかを指定します。各<getResult>には、ネストした<fetchAttribute>タグを必要数に応じて設定できます。

属性名 説明
attributeName="属性名" 属性の名前で、属性のLOVはこのLOVにフェッチされます。
attributeType="string | number | date" 属性のタイプで、属性のLOVはこのLOVにフェッチされます。属性名ではインスタンス内の属性を一意に識別できないため、属性のタイプが必要です。

<fetchAttribute>タグごとに、<getResult>タグで起動したgetResultメソッドに渡す属性リストが追加されます。

次の例では、前述の<getResult>タグの検索に加えて、各ドキュメントのtitle属性とpublication-date属性をフェッチします。

<US:getResult
 resultId="searchresult"
 instance="mybookstore"
 query=""
 queryLocale=""
 documentLanguage=""
 from="1" to="20">
<US:fetchAttribute
 attributeName="title"
 attributeType="string" />
<US:fetchAttribute
 attributeName="publication-date"
 attributeType="date" />
</US:getResult>

<showHitCount>タグ: 見積りヒット数の表示

検索の実行後に、その結果をレンダリングする必要があります。<US:getResult>タグでwithCount=trueを設定すると、結果にヒット総数が含まれ、<showHitCount>タグでその総数を表示できます。

属性名 説明
result="名前" <US:getResult>タグで指定するresultIdを参照します。

次の例では、検索結果の結果数を表示します。

<US:showHitCount result="searchresult" />

<iterResult>タグ: 結果のレンダリング

このタグは反復タグです。検索結果内のすべてのドキュメントをループ処理します。

属性名 説明
result="名前" <US:getResult>タグで指定するresultIdを参照します。
instance="名前" <US:instance>タグで指定するinstanceIdを参照します。

このタグは、検索結果のすべてのドキュメントをループ処理し、"doc"というスクリプト変数(oracle.ultrasearch.query.Documentオブジェクト)を定義します。さらに、ネストされた<showAttributeValue>タグを設定して、ドキュメントの属性をレンダリングできます。指定した結果が、指定のインスタンスを検索して取得した結果でない場合は、エラーになります。つまり、結果は、インスタンスを検索した結果であることが必要です。

次の例では、検索結果に含まれるすべてのドキュメントのURLを表示します。

<US:iterResult
result="searchresult"
instance="mybookstore">
</US:iterResult>

<showAttributeValue>タグ: ドキュメント属性のレンダリング

このタグは、<US:iterResult>タグ内のドキュメントの属性を表示します。

属性名 説明
attributeName="属性名" ドキュメント属性の名前です。
attributeType="string | number | date" ドキュメント属性のタイプです。属性名ではインスタンス内の属性を一意に識別できないため、属性のタイプが必要です。
default="デフォルト文字列" この属性に対してドキュメントで値を指定しなかった場合に出力される値です。これは、ドキュメントにタイトルが指定されていない場合に便利です。文字列"No Title"は、デフォルト値として表示されます。

このタグは、ドキュメント属性値を検索し、その値をページに表示します。検索結果の一部として属性がフェッチされていない場合、出力は表示されません。

次の例では、検索結果に含まれるすべてのドキュメントのタイトルと発行日を表示します。

<US:iterResult
result="searchresult"
instance="mybookstore">
<US:showAttributeValue attributeName="title" attributeType="string" default="No Title" />
<US:showAttributeValue attributeName="publication-date" attributeType="date" />
</US:iterResult>

Oracle Ultra Searchクローラ・エージェントAPI

クローラ・エージェントを実装すると、Lotus NotesやDocumentumなどの独自のドキュメント・リポジトリをクロールし、索引付けできます。Oracle Ultra Searchでは、独自のリポジトリを、ユーザー定義データ・ソースと呼びます。クローラによるデータ・ソースへのアクセスを可能にするモジュールをクローラ・エージェントと呼びます。

エージェントは、ユーザー定義データ・ソースからドキュメントURLおよび関連付けられたメタデータを収集し、Oracle Ultra Searchクローラに情報を戻します。Oracle Ultra Searchクローラでは、後でクロールするためにその情報をエンキューします。クローラ・エージェントは、Oracle Ultra Searchのクローラ・エージェントAPIを使用して、Javaで実装する必要があります。

Oracle Ultra Searchには、Oracle Ultra SearchエージェントAPIを使用したユーザー定義クローラ・エージェントの実装サンプルが用意されています。起動時に、このサンプル・エージェントは指定のOracleデータベースに接続し、クローラが収集して索引付けを行う表の内容を取得します。

サンプル・エージェントは完全な機能を備えており、他のデータベース・ベースのデータ・ソースに適合するようにカスタマイズできます。このエージェントは、次のタスクを実行します。

クローラ・エージェントの概要

クローラ・エージェントは次の処理を行います。

  • データ・ソースにアクセスするためのクローラの認証

  • HTTP URL(表示URL)を使用したデータ・ソース・ドキュメントへのアクセスの提供

  • ドキュメント属性の形式でドキュメントのメタデータを提供

  • 各ドキュメント属性を、エンド・ユーザーが使用する一般的な属性名にマップ

  • ドキュメントがストリーム方式で1つずつ取り出されるように、データ・ソースのフラット化されたビューを提供

  • 必要に応じて、作成者やタイトルなどの標準メタデータに関するURLドキュメントを解析するようにクローラに指示

  • (オプション)指定したタイム・スタンプ以降に変更されたURLのリストを提供

  • (オプション)ドキュメントの処理について、表示URLのみでなくアクセスURLを提供

エージェントは、ターゲット・データ・ソースからURLのリストを取り出し、クロール処理の前にそのリストをクローラ・キューに保存します。


注意:

なんらかの理由でクローラが中断すると、元のクロールの最新タイム・スタンプを使用してエージェント起動プロセスが繰り返されます。エージェントからフェッチされたURLのエンキューが終了し、クロール中の場合、クローラはエージェントを開始するだけで、エージェントからのURLのフェッチは行いません。かわりに、すでにエンキューしたURLのクロールを終了します。

2種類のクローラ・エージェントがあります。

標準エージェント

標準エージェントは、現在データ・ソースに存在しているURLのリストを戻します。URLが以前にクロールされたかどうかは認識されず、ターゲット・データ・ソースに対する更新の検出はクローラに依存します。標準エージェントとクローラの相互作用は次のとおりです。

  • クローラは、このデータ・ソースのすべての既存URLがターゲット・データ・ソースにすでに存在しない場合、これらのURLにガベージ・コレクション用のマークを付けます。

  • クローラはエージェントをコールして、更新されたURLリストを取得します。すべての既存URLにクロール用のマークを付けます。新しいURLは、URL表およびキューに挿入されます。

  • 前述の処理後、まだガベージ・コレクション用のマークが付いているURLを削除します。

  • クローラはクロール用のマークが付いているすべてのURLを参照し、更新されているかどうかをチェックします。

スマート・エージェント

スマート・エージェントは、クローラが提供する最終更新タイム・スタンプを使用して、更新、挿入または削除されたURLのリストを戻します。クローラは、エージェントから戻されたURLのみをクロールし、既存のURLは再クロールしません。削除されたURLは、クローラによってURL表から削除されます。スマート・エージェントが更新または挿入されたURLのみを戻し、削除されたURLを戻すことができない場合、クローラ側では削除されたURLは検出されません。この場合は、スケジュールのクローラ再クロール・ポリシーを変更し、強制再クロール・モードでスケジュールを定期的に実行する必要があります。強制再クロール・モードでは、エージェントに対し、データ・ソースのすべてのURLを戻すように指示が出されます。

エージェントAPIのisDeltaCrawlingCapableは、起動したエージェントが標準エージェントであるか、スマート・エージェントであるかをクローラに通知します。エージェントAPIのstartCrawling(boolean forceRecrawl, Date lastCrawlTime)によって、クローラは、強制再クロール・モードで実行中かどうか、および最後にクロールした時間をエージェントに通知できます。

ドキュメントの属性とプロパティ

ドキュメント属性(メタデータ)は、ドキュメントのプロパティを示します。一部の属性は、ユーザー・アプリケーションと関連を持たない場合があります。クローラ・エージェントの作成者は、抽出および保存するドキュメント属性を決定する必要があります。収集した属性のリストが構成可能になるように、エージェントを作成することもできます。Oracle Ultra Searchは、エージェントから戻された属性を自動的に登録します。あるドキュメントに関してどの属性を戻すかをエージェントで決定できます。

ライブラリ・パスとJavaクラスパス

エージェントに必要なその他のすべてのJavaクラスパスは、エージェントjarファイルに含まれている必要があります。これは、Oracle Ultra Searchがエージェントjarファイルを自動的にクローラJavaクラスパスに追加し、ユーザーはその他のクラスパスを管理インタフェースから追加できないためです。新しいクラス・パスの追加方法は、付録B「クローラJava CLASSPATHの変更」を参照してください。

エージェント・コードが特定のライブラリ・ファイル(Windowsの.ddlファイル、UNIXの.soファイルなど)にも依存する場合は、ライブラリ・パス環境変数(WindowsのPATH、UNIXのLD_LIBRARY_PATH)にそのファイルへのパスが含まれている必要があります。Oracleがこの環境で起動されることを確認します。Oracleプロセスがクローラを起動すると、ライブラリ・パスなどのすべての環境変数が自動的にOracleから継承されます。

クローラ・エージェントの機能

ここでは、クローラ・エージェントの側面について説明します。

データ・ソース・タイプの登録

データ・ソース・タイプとは、データ・ソースを抽象化したものです。次の属性を使用して、新しいデータ・ソース・タイプを定義できます。

  • データ・ソース・タイプの名前: Lotus Notesなど。最大長は100バイトです。

  • データ・ソース・タイプのID: 自動的に割り当てられます。

  • データ・ソース・タイプの説明: 最大長は4000バイトです。

  • エージェントJavaクラス名: WebDbAgentなど。このクラスの位置は、Oracle Ultra Searchによって$ORACLE_HOME/ultrasearch/lib/agent/に事前定義されており、変更できません。

  • エージェントJava jarファイル名: エージェント・クラスはJavaのjarファイルに格納できます。このjarファイルは、$ORACLE_HOME/ultrasearch/lib/agent/に存在している必要があります。この$ORACLE_HOMEは、中間層ではなく、Oracle Ultra SearchのバックエンドがインストールされているOracleホーム・ディレクトリです。

  • パラメータ: データ・ソースのプロパティです。たとえば、Webデータ・ソースのシードURL、包含パターンおよびロボットの除外などです。パラメータは、パラメータ名(最大100バイト)と説明(最大4000バイト)を指定して定義します。デフォルトでは、パラメータは暗号化されません。

  • 暗号化: 格納時にこのパラメータの値を暗号化するかどうかを指定します。

Oracle Ultra Searchではパラメータの出現回数は規定されません。特定のパラメータが0回以上、少なくとも1回または1回のみ出現するよう指定できません。

エージェント・クラスの依存

クローラ・エージェント・クラスは、Apacheのログイン機能であるlog4j.jarに依存します。log4jのloggerクラスがエージェントJavaクラスで最初に参照されると、クローラはハングします。ここでは、Oracle Ultra Searchにこのクラスパスを指定する方法について説明します。管理ツールを使用して、log4jクラスとエージェント・クラスを同じjarファイルにバンドルし、このjarファイルをカスタム・タイプに指定できます。または、ユーザーのmanifest.mfファイルをagent.jarにパッケージできます。このとき、依存ライブラリ・パスを指定できます。依存ライブラリ・パスは、JVMによってロードされます。たとえば、現在のディレクトリが/home/pdevulap/make_jarで、次のファイルとディレクトリがあるとします。

META-INF/MANIFEST.MForacle/marketing/search/crawleragent/SearchCrawlerAgent.java + other class fileslog4j-1.2.8.jar

MANIFEST.MFのコンテンツの例:

Manifest-Version: 1.0Created-By: Praveen DevulapalliMain-Class: oracle.marketing.search.crawleragent.SearchCrawlerAgentClass-Path: log4j-1.2.8.jar

その他のjarファイルが存在する場合は、単に空白で区切って指定します。

  1. エージェントjarファイルを作成します。

    jar cvfm SearchCrawlerAgent.jar META-INF/MANIFEST.MF oracle/marketing/search/crawleragent/*
    

    これにより、指定されたマニフェスト・ファイルとともにSearchCrawlerAgent.jarが作成されます。jarファイルの作成では、小文字でmを指定して、マニフェスト・ファイルを使用することをjarユーティリティに指示します。

    注意: log4jはこのjarファイルには含まれません。

  2. jarファイルをOracle Ultra Searchの適切な位置($ORACLE_HOME/ultrasearch/lib/agent/SearchCrawlerAgent.jarおよび$ORACLE_HOME/ultrasearch/lib/agent/log4j-1.2.8.jar)に移動します。

新しいクラスパスを指定して既存のエージェントjarファイルを更新するには、次のようにします。

  1. 次のようにして、jarファイルにすでにMANIFEST.MFファイルが存在するかどうかを確認します。

    % jar tf my.jar
    
    META-INF/MANIFEST.MF
    
    a/b/c/d/xyz.class
    
    ...
    

    jarファイルにMANIFEST.MFが存在しない場合は、手順2をスキップします。

  2. マニフェスト・ファイルを展開します。

    % jar xf my.jar META-INF/MANIFEST.MF  --you must specify the complete path as it appears in the jar
    
    META-INF/MANIFEST.MF
    
  3. 次のようにして、MANIFEST.MFのコンテンツを変更し、新しいバージョンでjarファイルを更新します。

    %jar umf META-INF/MANIFEST.MF my.jar
    

データ・ソースの登録

データ・ソース・タイプを定義した後は、次の属性を使用して、そのデータ・ソース・タイプのインスタンスを定義できます。

  • データ・ソース名

  • データ・ソースの説明: 最大長は4000バイトです。

  • データ・ソース・タイプのID。

  • デフォルト言語: デフォルトは「en」(英語)です。

  • パラメータ値: seed - http://www.oracle.com depth - 8など。

データ・ソース属性の登録

Oracle Ultra Searchに新規属性を追加するには、属性名と属性のデータ型を指定します。データ型は、文字列、数値または日付です。名前が同じでデータ型が異なる属性を追加することもできます。エージェントから戻された属性が定義されていない場合は、自動的に登録されます。

ユーザー実装クローラ・エージェント

クローラ・エージェントの要件は次のとおりです。

  • Javaで実装すること。

  • Oracle Ultra Searchによって定義されたJavaエージェントAPIをサポートしていること。

  • URLの属性およびプロパティを戻すこと。

  • (オプション)クローラによるデータ・ソースへのアクセスを認証できること。

  • 各ドキュメントがストリーム方式で1つずつ取り出されるように、データ・ソースをフラット化すること。これは、特定のデータ・ソースのクロール・ロジックをエージェントにカプセル化することです。

  • Oracle Ultra Searchで保持する必要のあるドキュメント属性を決定すること。Oracle Ultra Searchで定義されていない属性は自動的に登録されます。

  • 属性をデータ・ソースのプロパティにマップできること。たとえば、属性「ID」がドキュメントの一意のIDで、「ID」がプロパティ「document_key」にマップされており、この特定のドキュメントに対するIDの値が4の場合、エージェントは(document_key, 4)を戻す必要があります。

  • リクエストに応じて、使用可能な属性LOVを戻すこと。

クローラとクローラ・エージェントの相互作用

クローラは、ユーザーが提供したエージェントを起動することによって、ユーザーが定義したデータ・ソースをクロールします。クローラは次の処理を実行できます。

  • 定義済データ・ソースのクローラ・エージェントの起動

  • データ・ソース・パラメータ情報のエージェントへの提供

  • エージェントを使用した自己認証(必要な場合)

  • URLリストの取出し、およびクロールする必要がある属性/プロパティの関連付け

  • エージェントから提供されたURLを使用したドキュメントの取出し

  • データ・ソースに対する挿入、更新および削除の検出

  • 属性LOVデータの取出し(使用可能な場合)

クローラ・エージェントAPIおよびクラス

クローラ・エージェントAPIは、クローラ・エージェントの実装に使用するメソッドの集合です。クローラ・エージェントの実装例SampleAgent.javaは、$ORACLE_HOME/ultrasearch/sample/agentにあります。

UrlData: クローラ・エージェントは、このインタフェースを使用して、ドキュメントのプロパティと属性値を移入します。Oracle Ultra Searchは、このインタフェースの基本実装を提供します。エージェントは、このインタフェースを直接使用することも、必要に応じて拡張することもできます。クラスは、引数のないコンストラクタを持つDocAttributesです。エージェントは、UrlDataオブジェクトのプールを作成し、クロール時にそのプールを繰り返し参照することもできます。最も単純な実装の場合、エージェントはDocAttributesオブジェクトを1つ作成してデータのリセットと移入を繰り返し、このオブジェクトを戻します。

LovInfo: クローラ・エージェントは、このインタフェースを使用して、属性のLOV定義を送信します。

DataSourceParams: クローラ・エージェントは、このインタフェースを使用して、データ・ソース・パラメータの読取りおよび書込みを行います。

AgentException: クローラ・エージェントは、エラー発生時にこの例外クラスを使用します。

CrawlerAgent: このインタフェースによって、クローラはユーザー定義のデータ・ソースと通信できます。クローラ・エージェントはこのインタフェースを実装する必要があります。

サンプル・エージェント・ファイル

サンプル・エージェント・ファイルは、$ORACLE_HOME/ultrasearch/sample/agentディレクトリに含まれています。テキスト・エディタを使用して、エージェントのソース・コードを表示できます。

SampleAgent_readme.htmファイルとSampleAgent.javaファイルがあります。これらは、エージェントAPIを使用するサンプル・クローラ・エージェント実装用です。

サンプル・クローラ・エージェントの設定

ここでは、サンプル・クローラ・エージェントの設定方法について説明します。

エージェントjarファイルのコンパイルおよび作成

サンプル・エージェントのJavaソース・コードは、最初にクラス・ファイルにコンパイルしてから、$ORACLE_HOMEディレクトリのjarファイルに格納する必要があります。この$ORACLE_HOME/ultrasearch/lib/agent/は、中間層ではなく、Oracle Ultra SearchのバックエンドがインストールされているOracleホーム・ディレクトリです。

コンパイルに必要なクラスは、Oracle JDBC Thinドライバ(ojdbc5.jar)およびultrasearch.jarです。次に例を示します。

$ORACLE_HOME/jdk/bin/javac -J-ms16m -J-mx96m -O -classpath $ORACLE_HOME/dbjava/lib/ojdbc5.jar:
$ORACLE_HOME/ultrasearch/lib/ultrasearch.jar SampleAgent.java

SampleAgent.jarファイルを作成するには、次のように入力します。

$ORACLE_HOME/jdk/bin/jar cv0f  $ORACLE_HOME/ultrasearch/lib/agent/SampleAgent.jar
SampleAgent.class 'SampleAgent$DocNode.class'

データ・ソース・タイプの作成

最初に、サンプル・エージェントを使用するデータ・ソース・タイプを作成します。

  • 名前: URL表タイプ

  • 説明: URLの行がある表

  • エージェント名: SampleAgent

  • エージェントjarファイル: sampleagent

データ・ソース・パラメータの定義

データ・ソース・タイプのパラメータを定義します。

  • データベース接続文字列(DB接続)

  • ユーザー名(URL表のスキーマ所有者)

  • パスワード(スキーマ所有者の暗号化されたパスワード)

  • 表名(URL表名)

  • URL列(ドキュメントURLを保持する列)

  • 無視フラグ列(無視する場合は1、それ以外は0)

  • 言語列(ドキュメント言語)

  • 属性リスト(属性の列のリスト)

  • [column name/attribute name] <data type> [column name/attribute name] <data type> ...の書式で指定します。<data type>は、0が数値、1が文字列、2が日付です。たとえば、ドキュメントにCompany Name、Category、RevenueおよびS&P Ratingの4つの属性がある場合は、[Company Name/Company/1][Category/Classification/1][Revenue/Revenue/0][Rating/Analyst Rating/1]のように指定します。

  • ログ・ファイル名(ログ・ファイル)

  • ログ・ディレクトリ(ログ・ファイルの位置)

このタイプのデータ・ソースの定義

データ・ソースを定義して、データ・ソース・パラメータを初期化します。たとえば、値を指定して、次のスキーマの表にアクセスします。

    TABLE NEWS (
    ARTICLE_NO    NUMBER,
    NEWS_URL      VARCHAR2(740),
    TITLE         VARCHAR2(200),
    AUTHOR        VARCHAR2(100),
    PUB_DATE      DATE default SYSDATE,
    PUBLISHER     VARCHAR2(100),
    PRICE         NUMBER,
    LANG          VARCHAR2(10),
    IGNORE        NUMBER DEFAULT 0,
    PRIMARY KEY (NEWS_URL)
    );
  • データベース接続文字列: dlsun1710:5521:search

  • ユーザー名: SCOTT

  • パスワード: TIGER

  • 表名: NEWS

  • URL列: NEWS_URL

  • 無視フラグ列: IGNORE

  • 言語列: LANG

  • 属性リスト: [ARTICLE_NO/Article Number/0][TITLE/Article Title/1][AUTHOR/Author/1][PUB_DATE/Report Date/2][PUBLISHER/Newspaper/1][PRICE/Download Cost/0]

  • ログ・ファイル名: testagent.log

  • ログ・ディレクトリ: /tmp/ultrasearch/

Oracle Ultra SearchのJava Email API

Oracle Ultra Searchは、アーカイブされた電子メールにアクセスするためのJava APIを提供します。Oracle Ultra Search問合せアプリケーションは、このAPIを使用して、Oracle Ultra Searchシステムで索引付けされたメーリング・リストにアドレス指定されている電子メールを表示します。このAPIは、独自のカスタム問合せアプリケーションを作成するためにも使用できます。

アプリケーションのユーザー・インタフェース・ロジックは完全にJSPで制御されているため、必要に応じて外観と操作性をカスタマイズできます。

電子メール・ドキュメントには有効な情報が含まれていますが、関連情報の検索が容易にできる構成にはなっていません。Oracle Ultra Searchでは、IMAP4プロトコルをサポートするサーバー上の電子メールを取得および索引付けすることができます。

電子メール・ソースは、特定の電子メール・アドレスに送信された電子メールから内容を導出するデータ・ソースです。Oracle Ultra Searchクローラが電子メール・ソースを検索する場合、クローラは電子メールのヘッダー・フィールドのTo:またはCc:に特定の電子メール・アドレスがあるすべての電子メールを収集します。


注意:

Oracle Ultra Searchでは、検索されたすべての電子メールのコピーをOracle Ultra Search Serverがインストールされているローカル・ファイル・システムに格納します。

一般的な電子メール・ソースのアプリケーションでは、電子メール・ソースは、メーリング・リストに送信されたすべての電子メールを示します。この場合は、複数の電子メール・ソースが定義され、各電子メール・ソースは1つの電子メール・リストに対応します。

Oracle Ultra Searchの電子メールのクロールおよびレンダリングは、Sun社のJavaMailのリファレンス実装を使用して、JavaMail APIの最上位に構築されます。これによって、Oracle Ultra Searchは索引付けされた電子メールにアクセスするためのJava APIを提供できます。このAPIが、Oracle Ultra SearchのJava Email APIです。このAPIによって、電子メールのヘッダー情報、内容、添付ファイルなどの情報を取得できます。

このAPIを使用して、JSPまたはサーブレット・ベースのWebアプリケーションにOracle Ultra Searchの電子メールの表示機能を埋め込みます。出荷時のOracle Ultra Searchには、完全な機能を持つJSPのWebアプリケーションが含まれています。このアプリケーションは、APIを直接使用して、索引付けされた電子メールをレンダリングします。ソース・コードは表示可能なため、電子メール・ブラウザをカスタマイズするときに使用できます。

JavaMailの実装

Oracle Ultra Searchには、JavaMail 1.1に準拠した実装が必要です。Sun社のリファレンス実装は、JavaMailバージョン1.2です。このリファレンス実装は、出荷時のOracle Ultra Searchに含まれています。

Java Email API

Oracle Ultra SearchのJava Email APIは、oracle.ultrasearch.queryパッケージ内にカプセル化されています。

メーリング・リスト・ブラウザ・アプリケーション・ファイル

メーリング・リスト・ブラウザ・アプリケーション・ファイルは、$ORACLE_HOME/ultrasearch/sample/queryディレクトリに含まれています。テキスト・エディタを使用すると、メーリング・リスト・ブラウザ・アプリケーションのソース・コードを直接表示できます。

次の表に、すべてのメーリング・リスト・ブラウザ・アプリケーション・ファイル、READMEファイルおよびスタイルシートを示します。

ファイル 説明
SampleAgent_readme.html
このファイル
mail.css
電子メールWebアプリケーション用のスタイルシート

JSPのメーリング・リスト・ブラウザ・アプリケーション・ファイル:

ファイル 説明
mail.jsp
エンド・ユーザーが表示するコードに応じて、他のJSPファイルから戻されたHTMLコードが含まれているメーリング・リスト・ブラウザ・アプリケーション
mailindex.jsp
Oracle Ultra Searchインスタンスのすべての電子メール・ソース(メーリング・リスト)が表示されるJSPページ
mailmsgs.jsp
電子メール・ソース(メーリング・リスト)のすべての電子メールが表示されるJSPページ
mailreader.jsp
電子メールが表示されるJSPページ
mailutil.jsp
mailreader.jspによって使用される様々な機能を定義するJSPページ

すべてのアプリケーションの画像ファイル:

ファイル 説明
images/ultra_mediumbanner.gif
Oracle Ultra Searchのバナー
images/wsd.gif
問合せアプリケーションで使用される背景イメージ

メーリング・リスト・ブラウザ・アプリケーションの設定

JSPメーリング・リスト・ブラウザ・アプリケーション設定の詳細は、「Oracle Ultra Search中間層のインストール」を参照してください。

Oracle Ultra SearchのURLリライタAPI

URLリライタは、Oracle Ultra Search UrlRewriter Javaインタフェースを実装するためにユーザーが提供するJavaモジュールです。クローラは、アクティブ化されたURLリライタを使用して、抽出したURLリンクをURLキューに挿入される前にフィルタ処理およびリライトします。

Webクロールは通常、次のステップで構成されます。

  1. URLキューからその次のURLを取得します。(キューが空の場合、Webクロールは停止します。)

  2. URLの内容をフェッチします。

  3. 内容からURLリンクを抽出します。

  4. リンクをURLキューに挿入します。

生成された新しいURLリンクは、既存のホスト、パスおよびMIMEタイプすべての包含ルールと除外ルールの影響を受けます。

抽出したURLリンクで実行できる操作は2つあります。

URLリンクのフィルタ処理

ユーザーは、Oracle Ultra Searchクローラがサポートする次のメカニズムを使用して、キューに挿入できるURLリンクのタイプを制御します。

  • ターゲットWebサイトのrobots.txtファイル(たとえば、/cgiディレクトリからのURLを禁止する)

  • ホストの包含ルールと除外ルール(たとえば、www.acme.comのURLのみを許可する)

  • ファイル・パスの包含ルールと除外ルール(たとえば、/archiveディレクトリの下にあるURLのみを許可する)

  • MIMEタイプの包含ルール(たとえば、HTMLファイルとPDFファイルのみを許可する)

  • ロボット・メタ・タグNOFOLLOW(たとえば、そのページのいかなるリンクも抽出しない)

  • ブラック・リストURL(たとえば、明示的に指定したURLをクロールしない)


注意:

すべてのURLは、パス・ルールをチェックする前に、ドメイン・ルールを通過する必要があります。パス・ルールを使用すると、クロール領域をさらに制限できます。パス・ルールはホストに固有ですが、ホストごとに2つ以上のパス・ルールを指定できます。たとえば、同じホスト上にパスfiles://host/docおよび除外パスfiles://host/doc/unwantedを含めることができます。

これらのメカニズムによって、フィルタ処理基準に一致するURLリンクのみが処理されます。ただし、ユーザーがURLリンクのフィルタ処理に使用できる他の基準があります。次に例を示します。

  • 特定のファイル名拡張子を持つURLの許可

  • 特定のポート番号からのURLのみ許可

  • 特定ディレクトリのPDFファイルの禁止

クローラが抽出したURLリンクの評価時に使用するユーザー実装モジュールであるため、考えられる基準は非常に大規模になる可能性があります。

URLリンクのリライト

一部のアプリケーションについては、セキュリティ上の理由から、クロールされるURLとエンド・ユーザーが参照するURLが異なる場合があります。たとえば、ファイアウォール内にある内部Webサイトでのクロールはセキュリティ・チェックなしで行われますが、エンド・ユーザーによる問合せがあると、ファイアウォール外の対応するミラーURLを使用する必要があります。

表示URLは、検索結果の表示に使用されるURL文字列です。これは、ユーザーが検索結果リンクをクリックするために使用されるURLです。アクセスURLは、クローラがクロールと索引付けを行うために使用するURL文字列です。アクセスURLはオプションです。アクセスURLがない場合、クローラは表示URLを使用してクロールと索引付けを行います。アクセスURLが指定されている場合、クローラは表示URLを使用せずに、このアクセスURLを使用してクロールします。

標準的なWebクロールで使用できるのは、表示URLのみです。しかし、状況によっては、クローラは外部使用の目的で表示URLを保持しながら、内部サイトをクロールするためにアクセスURLを必要とします。すべての内部URLに対して、ミラー化された外部URLがあります。

次に例を示します。

http://www.acme-qa.us.com:9393/index.html
http://www.acme.com/index.html

URLリンクhttp://www.acme-qa.us.com:9393/index.htmlが抽出されると、キューに挿入される前に、クローラによって、このURLリンクに対する新規の表示URLとアクセスURLが生成されます。

アクセスURL:

http://www.acme-qa.us.com:9393/index.html

表示URL:

http://www.acme.com/index.html

抽出されたURLリンクはリライトされ、クローラは、エンド・ユーザーに公開せずに内部Webサイトをクロールします。

別の例として、クローラが選択するリンクが動的に生成され、それらのリンクがすべて同じページを指し示すときも、(参照ページまたはその他の要因に従って)異なるリンクとなる場合があります。次に例を示します。

http://compete3.acme.com/rt/rt.wwv_media.show?p_type=text&p_id=4424&p_currcornerid=281&p_textid=4423&p_language=us

http://compete3.acme.com/rt/rt.wwv_media.show?p_type=text&p_id=4424&p_currcornerid=498&p_textid=4423&p_language=us

クローラが同じ内容の異なるURLを検出するのは、重複が相当数存在する場合のみです。このため、URLキューは膨大な数のURLとなる可能性があり、その結果、過度のURLリンク生成を引き起こします。この場合は、同じページを指し示すURLが同じURLとなるように、抽出したリンクを正規化することができます。これらのURLをリライトするアルゴリズムはアプリケーションごとに異なり、クローラによる一般的な方法では処理できません。

URLリンクがリライトされると、次のいずれかの結果となります。

  • リンクが未変更のまま挿入されます。

  • リンクが取り消され、挿入されません。

  • 新規表示URLが戻されます。挿入のためにURLリンクが置換されます。

  • 表示URLおよびアクセスURLが戻されます。表示URLは、URLリンクと同一でない可能性があります。

URLリライタの作成および使用

URLリライタを作成して使用するには、次の手順を実行します。

  1. UrlRewriterインタフェースのopencloseおよびrewriteの各メソッドを実装する新規Javaファイルを作成します。リライタSampleRewriter.javaは、$ORACLE_HOME/ultrasearch/extension/より下の参照に使用できます。

  2. リライタJavaファイルをクラス・ファイルにコンパイルします。次に例を示します。

    /jdk1.3.1/bin/javac -O -classpath $ORACLE_HOME/ultrasearch/lib/ultrasearch.jar SampleRewriter.java
    
  3. リライタ・クラス・ファイルを$ORACLE_HOME/ultrasearch/lib/agent/ディレクトリ下のjarファイルにパッケージ化します。次に例を示します。

    /jdk1.3.1/bin/jar cv0f $ORACLE_HOME/ultrasearch/lib/agent/sample.jar SampleRewriter.class
    
  4. 「Webソースの作成」の手順2、または既存のWebデータ・ソースのクローラ・パラメータ・ページの管理ツールで、リライタ・クラス名とjarファイル名(たとえば、SampleRewritersample.jar)を指定します。

  5. 管理ツールの「Web Sources」タブで、URLリライタ・オプションを有効にします。

  6. 対応するスケジュールを起動して、ターゲットWebデータ・ソースをクロールします。クローラ・ログ・ファイルは、「URLリライタSampleRewriterのロード」メッセージによってURLリライタの使用を確認します。


注意:

URLリライトは、Webデータ・ソースにのみ使用可能です。


関連項目:

  • API(oracle.ultrasearch.crawlerパッケージ)の詳細は、『Oracle Ultra Search API Reference』を参照してください。

  • URLリライタSampleRewriter.javaは、$ORACLE_HOME/ultrasearch/extension/にあります。

  • 「Webソース」


Oracle Ultra Searchドキュメント・サービスAPI

ドキュメント・サービス・クローラ・エージェントAPIを使用すると、ドキュメント・コンテンツに基づいて属性データを生成できます。対象となるドキュメントのエージェントからロボット・メタ・タグの指示を受け取り、索引を制御するために元のドキュメント・コンテンツを変換します。

ドキュメント・サービス・エージェントはユーザー実装のJavaモジュールです。クローラと対話して、クロールされたドキュメントの制御性を高めるために、DocumentService Javaインタフェースを実装します。これは、ユーザー定義のドキュメント処理のために、クロール中のコールアウトを許可するクローラ・エージェントの形式のJavaインタフェースです。次の特徴があります。

各クロール・スレッドには、サービス・エージェント・オブジェクトのコピーがあります。ドキュメント・サービス・エージェントのjarファイルまたはクラス・ファイルは、$ORACLE_HOME/ultrasearch/lib/agent/ディレクトリにある必要があります。

APIとクラス

DataSourceParamsインタフェースとAgentExceptionクラスは、ここで説明するインタフェースによって使用されます。これらは、独自のサービス・エージェントを実装するためにOracle Ultra Searchユーザーが使用します。エージェントJavaコードは、次のクラスにインポートします。

import oracle.ultrasearch.crawler.UrlData;

import oracle.ultrasearch.crawler.DocAttributes;

import oracle.ultrasearch.crawler.DataSourceParams;

import oracle.ultrasearch.crawler.AgentException;

インタフェースDocumentService

インタフェースDocumentServiceはドキュメントを処理し、要約、分類、またはドキュメント・テキストを入力とみなしてテキスト出力を生成する、任意の変換機能を実行します。

boolean open(DataSourceParams params, PrintWriter log) throws AgentException;

これは、エージェントがロードされるときに必ず最初にコールされるメソッド・クローラです。これにより、エージェントは初期作業を実行できます。

クローラは、DataSourceParamsインタフェースを使用してエージェント・パラメータを渡します。エージェントはパラメータを検証し、エラーが検出された場合は致命的なエージェント例外を発生させます。

logは、エージェントが情報を出力できるクローラ・ログ・ファイルです。

ドキュメント・サービス・セッションが確立されます。

void close() throws AgentException;

これは、クローラにより必ず最後にコールされるメソッドです。これにより、エージェントはクリーン・アップ作業を実行できます。

ドキュメント・サービス・セッションが終了されます。

int doService(String documentUrl, number urlId, Reader docReader) throws AgentException;

送信されたドキュメントのリクエスト・サービスです。リンクおよび属性を抽出する直前に起動されます。

このファンクションは、このドキュメントの結果がどのような種類であるのかを指定するステータス・コードを返します。次のコードが使用されます。

NO_CHANGE: このドキュメントについての情報は他にありません。

FOLLOW_UP: 値を取得するためにgetRobotsControlgetAttributeおよびgetContentsをコールします。

その他のステータス・コードの値はNO_CHANGEとみなされます。

ドキュメントの処理中の問題が発生すると、エージェント例外がスローされます。致命的なエージェント例外が発生すると、クローラは停止します。警告エージェント例外はNO_CHANGEとみなされ、例外がクローラ・ログに出力されます。

UrlData getAttribute(number urlId):

doServiceFOLLOW_UPステータス・コードを戻すときのみコールされます。

エージェントは、このドキュメントの属性データを含むUrlDataオブジェクトを戻します。追加する属性がない場合は、エージェントは単にnullを戻します。属性が登録されていない場合は、自動的に登録されます。

int getRobotControl (number urlId):

doServiceFOLLOW_UPステータス・コードを戻すときのみコールされます。

このファンクションは、このドキュメント用のロボット・コントロールがどのような種類であるかを指定するステータス・コードを返します。次のコードが使用されます。

USE_CURRENT: 既存の設定を使用します。

FOLLOW_AND_INDEX: リンクをたどり、ドキュメントに索引を付けます。

FOLLOW_AND_NO_INDEX: リンクをたどりますが、このドキュメントに索引を付けません。

NO_FOLLOW_AND_INDEX: リンクの抽出はしませんが、ドキュメントに索引を付けます。

NO_FOLLOW_AND_NO_INDEX: リンクの抽出はせず、索引付けも行いません。

Reader getContents(number urlId):

doServiceFOLLOW_UPステータス・コードを戻すときのみコールされます。

戻されたReaderオブジェクトには、索引付けするHTML内の新しいドキュメント・コンテンツが含まれます。元のドキュメント・コンテンツは破棄されます。

クローラは読込みを終了するとReaderをクローズします。戻されたReaderは、doServiceから渡された元のReaderに基づくフィルタReaderではありません。元のReaderは、getContentsが新しいReaderを戻すとクローズされるためです。

nullが戻された場合、コンテンツの交換は行われません。

元のドキュメントのチェックサムは変更されません。

void received(number urlId) throws AgentException:

ターゲットのドキュメントの操作が終了するとコールされます。これにより、エージェントはそのサービスに関連付けられた作業のクリーン・アップを実行できます。

doServieコールとreceivedは常に一緒に使用します。

クローラは、エージェントが戻したUrlDataオブジェクトを保持しません。これにより、エージェントはオブジェクトを再利用できます。

エージェント登録クライアント・インタフェース

ドキュメント・サービス・エージェントの登録は、wkds_admパッケージのPL/SQL APIを使用します。ドキュメント・サービス・エージェントを登録し、エージェント・インスタンスを定義し、1つまたはすべてのデータ・ソースにクローラ・プリファレンスの形式で割り当てます。APIの詳細は、$ORACLE_HOME/ultrasearch/admin/にあるwk0ds.pkhで参照できます。

ドキュメント・サービス・エージェント・インスタンスが作成されたら、すべてのデータ・ソースにロードされるように割り当てるには、次のAPIを使用します。

wk_crw.update_crawler_config(wk_crw.CRAWLER_COMMON,'CC_AGENT_INSTANCE','<agent instance name>');

特定のデータ・ソースにのみ使用する場合は、次のコマンドを使用します。

wk_crw.update_crawler_config(<data source id>,'CC_AGENT_INSTANCE','<agent instance name>');

エージェント・インスタンスを削除するには、インスタンス名にnull値を指定します。

wk_crw.update_crawler_config(wk_crw.CRAWLER_COMMON,'CC_AGENT_INSTANCE',null);

注意:

これらは内部APIであり、変わることがあります。

ドキュメント・サービス・エージェントの設定例

この例では、DocServiceAgent.javaDocServiceAgent.classファイルにコンパイルされ、wkagent.jarというjarファイルにアーカイブされることを想定しています。

declare
    g_tid1 number;
    g_dsid0 number;
    g_pid0 number;
    g_pid1 number;
  begin
    -- All API calls must start with wk_adm.use_instance
    wk_adm.use_instance('<INSTANCE NAME>');
    -- register the agent
    -- agent class name is 'DocServiceAgent', located in wkagent.jar under
    -- $OH/ultrasearch/lib/agent/
    g_tid1 := WKDS_ADM.new_agent('Simple Agent','Document Service Test Agent',
              'DocServiceAgent','wkagent.jar',wkds_adm.DOC_SERVICE_TYPE);
    -- define agent parameters
    g_pid0 := wkds_adm.add_agent_param(g_tid1,'Admin_user','The user');
    g_pid1 := wkds_adm.add_agent_param(g_tid1,'Password','password','Y'); -- encrypted
    -- define an agent instance based on the registered agent
    g_dsid0 := WKDS_ADM.new_agent_inst('Simple Agent Instance',g_tid1);
    -- set agent parameter value for instance 'Simple Agent Instance'
    wkds_adm.set_agent_param_value(g_dsid0,g_pid0,'WK_TEST'); -- user name
    wkds_adm.set_agent_param_value(g_dsid0,g_pid1,'WK_TEST'); -- password
    -- Associate the agent instance with all data sources
    wk_crw.update_crawler_config(wk_crw.CRAWLER_COMMON,'CC_AGENT_INSTANCE','Simple Agent Instance');

    -- Or associate it with one particular data source:
    -- wk_crw.update_crawler_config(<Data Source id>,'CC_AGENT_INSTANCE','Simple Agent Instance');
  exception when others then wk_err.raise;
  end;
  /

Oracle Ultra Searchの問合せアプリケーション

Oracle Ultra Searchには、複数の問合せアプリケーションおよびサンプル・クローラ・エージェントが含まれています。問合せアプリケーションは、独自の問合せアプリケーションを作成するための例として使用します。問合せアプリケーションは、J2EEに準拠したWebアプリケーションとして記述されています。問合せアプリケーションは、Oracle Ultra SearchのQuery APIを使用します。サンプル・クローラ・エージェントを使用して、独自のクローラ・エージェントを作成することもできます。


注意:

問合せアプリケーションとサンプル・クローラ・エージェントのJavaソース・コード、およびそれに対応するREADMEへのポインタは、Oracle Ultra Searchの「ようこそ」ページ(http://host.domain:port/ultrasearch/index.html)にあります。

問合せアプリケーションでは、キーワードが本文中でハイライトされて表示されるようになりました。これらの変更は、search.jspおよびその依存ファイルに対して行われています。

本文中のキーワードは、検索条件を含む元のドキュメント・セクションを示します。ハイライトにより、検索条件を含むドキュメント全体が異なる色で表示されます。ハイライト機能を有効にするには、設定の1つとしてキャッシュ・ファイルを保持するようにクローラを構成する必要があります。ハイライトはcache.jspで実装され、ユーザーはカスタマイズできます。

フレーム付きのHTMLドキュメントには、フレーム・レイアウトおよびフレーム・コンテンツ仕様のみが含まれ、実際のコンテンツは含まれません。このため、これらのドキュメントのキャッシュされたバージョンでは、ブラウザにブランクで表示されます。

問合せアプリケーションは、デプロイ済のJ2EE Webアプリケーション(sample.ear)として提供されています。このコンポーネントは、Webページ、JDBCドライバ、および電子メール結果を表示するためのJava Email APIを管理するJ2EEコンテナに依存しています。Oracle Containers for J2EE(OC4J)によってsample.earファイルがデプロイされると、Query APIの使用方法を示す一連のJSPファイルが表示されます。

問合せアプリケーションには、検索ポートレットが含まれています。Oracle Ultra Searchのポートレットは、Oracle Application Server Portalで使用する検索ポートレットの作成方法を説明します。

ユーザーが任意の問合せアプリケーションで問合せを発行すると、問合せ結果を含む結果リストが戻されます。ユーザーは、結果リストから参照するドキュメントを選択できます。結果リストには、HTMLドキュメント、ファイル、データベース表のコンテンツ、アーカイブされた電子メール、またはOracle Application Serverの項目を含めることができます。Oracle Ultra Searchの問合せアプリケーションには、電子メールの読取りおよび表示を行うための電子メール・ブラウザも組み込まれています。

Oracle Ultra Search管理ツールおよびOracle Ultra Searchの問合せアプリケーションは、Oracle Ultra Search中間層の一部です。ただし、Oracle Ultra Search管理ツールは、Oracle Ultra Searchの問合せアプリケーションからは独立しています。したがって、セキュリティまたはスケーラビリティを強化するために、他のコンピュータで構築することができます。

問合せアプリケーションを使用しない場合でも、独自の問合せアプリケーションを構築して、Oracle Ultra Search Java Query APIを直接起動することができます。このAPIはJavaでコード化されているため、JavaサーブレットやJSPなど、あらゆるJavaベースのアプリケーションからAPIのメソッドを起動できます(提供されている問合せアプリケーションは、これに該当します)。また、クロールおよび索引付けの完了した電子メールのレンダリングには、Oracle Ultra SearchのJava Email APIのメソッドを直接起動することもできます。

問合せアプリケーション

問合せアプリケーションは、$ORACLE_HOME/ultrasearch/sampleディレクトリに含まれています。

JSPの概要

前述のとおり、JSPコードおよびJava APIを使用して、Webアプリケーションを作成できます。通常、このWebアプリケーションは、Oracle Application Serverなどのアプリケーション・サーバーで実行されます。アプリケーション・サーバーは、パフォーマンスおよびスケーラビリティを向上させるために、Oracleデータベース・サーバーとは別のコンピュータで実行されます。Oracleデータベース・サーバーは、Oracle Ultra Searchの索引を保持します。

JSPアプリケーションは、実行時にJavaサーブレットにコンパイルされます。コンパイルされたサーブレットは、1つ以上のJava Virtual Machine(Java VM)で実行されます。JSPアプリケーションは、Oracle JDBCドライバを使用してOracleデータベース・サーバーと通信します。

すべてのJavaアプリケーションと同様に、Java Query APIおよびEmail APIを使用するには、サーブレット・エンジンのCLASSPATHに次のファイルを追加してください。

  1. $ORACLE_HOME/ultrasearch/lib/ultrasearch_query.jar

  2. $ORACLE_HOME/lib/mail.jar

  3. $ORACLE_HOME/lib/activation.jar

図10-1に、Web問合せアプリケーションでOracle Ultra Search Java Query APIをコールする方法を示します。

図10-1 JSPのコール

図10-1の説明が続きます
「図10-1 JSPのコール」の説明