この章では、Oracle Ultra SearchのAPIおよび関連情報について説明します。この章では、次の項目について説明します。
関連項目: 『Oracle Ultra Search API Reference』 |
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
の次の依存ファイルを含める必要があります。
ojdbc5.jar
orai18n.jar
orai18n-mapping.jar
orai18n-translation.jar
$ORACLE_HOME/oc4j/j2ee/home/jazn.jar
$ORACLE_HOME/oc4j/j2ee/home/jazncore.jar
$ORACLE_HOME/jlib/ldapjclnt10.jar
Oracle Ultra Searchは、索引付けされたデータの問合せ用にJava APIを提供します。このAPIのメソッドによって、問合せ結果を検索および表示します。このAPIはJavaで記述されているため、JSPバージョン1.1以上などのJavaベースのテクノロジをサポートする広範囲のWebアプリケーション・サーバーと互換性があります。Java APIは、スケーラビリティを得るためにJDBC接続プーリングを使用します。
Java APIは、HTMLレンダリング要素を必要としません。アプリケーションでは、HTMLインタフェースを完全にカスタマイズできます。たとえば、次のものを構築できます。
基本検索フォーム
拡張検索フォーム
問合せ結果の表示
ヘルプ・ページ
フィードバック・ページ
URL登録
Oracle Ultra Search Java Query APIを使用して、WebアプリケーションにOracle Ultra Searchの問合せ機能を埋め込みます。このAPIでは、次の2種類のメソッドをサポートします。
問合せ結果データのみを取得するメソッド
問合せ結果データを含むHTMLコードを取得するメソッド
データのみのメソッドは、HTMLを戻しません。これは、HTMLコードを完全に制御してレンダリングする必要がある場合に使用します。HTMLコードを取得するメソッドでは、問合せ入力ボックスおよび結果リストをWebアプリケーションに埋め込む機能をサポートしています。
Oracle Ultra Search Java Query APIを使用して、次の操作を実行できます。
問合せ結果の取得
戻される合計ヒット数など、問合せのプロパティの設定
問合せセッションの言語の設定
Oracle Ultra Searchのディクショナリ・データの取得(Oracle Ultra Searchの表にアクセスし、定義済のすべてのデータ・グループや属性などを取得)
問合せインタフェースおよび検索結果画面のカスタマイズおよび生成(Webアプリケーションへの埋込みが可能なHTMLコードのブロックを戻すプロシージャにより可能)
検索を行うエンド・ユーザーのシードURLリストへのURLの発行
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 Ultra Searchをカスタマイズして独自の問合せ構文拡張の実装を使用するには、oracle.ultrasearch.query.Contains
クラスのかわりに、問合せアプリケーション内のoracle.ultrasearch.CtxContains
クラスを使用します。CtxContains
を使用すると、任意のOracle Textの問合せをOracle Ultra Searchの問合せの一部として使用できます。次の手順を実行します。
ユーザー入力に基づいてOracle Textの問合せを構成します。たとえば、ユーザー入力が"cat"の場合、ステミング機能を使用して、Oracle Textの問合せ"$cat"を構成できます。これにより、"cat"または"cats"が含まれているドキュメントが検索されます。Oracle Textの問合せの構成には、文字列オブジェクトであればどのようなツールでも使用できます。ユーザーの問合せ構文がどの程度複雑であるかにより、一部の既存のレクサーをJavaで活用できます。
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);
オプションで、And/Or問合せ演算子で問合せを連結することにより、CtxContains
を他のOracle Ultra Searchの問合せと組み合せることもできます。
構成した問合せオブジェクトでgetResult
メソッドを起動して問合せを実行します。
関連項目: oracle.ultrasearch.query.CtxContains APIの詳細は、『Oracle Ultra Search Java API Reference』を参照してください。 |
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のタグを使用するためには、次の要件を満たしてください。
ultrasearch_query
.jar
ファイルをインストールし、CLASSPATHまたはWebアプリケーションのWEB-INF/lib
ディレクトリに格納します。このファイルは、Oracle Ultra Searchをインストールすると提供され、ultrasearch/lib
ディレクトリに格納されています。
タグ・ライブラリ説明ファイルのultrasearch-taglib.tldがアプリケーションとともにデプロイされ、<%@ taglib uri="/WEB-INF/ultrasearch-taglib.tld" prefix="US" %>のように、JSPページのtaglibディレクティブの指定場所に存在していることを確認してください。
Oracle Ultra Searchのタグ・ライブラリ定義(TLD)ファイルは、sample
.ear
がデプロイされている$ORACLE_HOME/ultrasearch/sample/query/WEB-INF/ultrasearch-taglib
.tld
にあります。META-INF/taglib
.tld
という名前でultrasearch_query
.jar
にも格納されています。
ここでは、Oracle Ultra Searchの各タグおよびその属性と操作について説明します。ここで示す例には静的なHTMLは含まれていませんが、静的なHTMLを挿入して出力をフォーマットすることはできます。
Oracle Ultra Searchインスタンスとの接続を確立します。このタグが機能するには、JDBC接続文字列、スキーマのユーザー名とパスワード、Oracle Ultra Searchインスタンス名などの基本パラメータを設定する必要があります。
このタグによって、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" />
ユーザーが拡張検索を実行するとき、アプリケーションでは、使用可能な属性のリスト、グループのリスト、およびインスタンスで定義されている言語のリストを表示する必要があります。これらを表示するには、ページのレンダリングで使用するスクリプト変数を定義するいくつかの反復タグを使用します。
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>
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 >
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 >
属性名 | 説明 |
---|---|
instance="名前" | instanceタグで定義されたオブジェクトを参照するための必須属性です。 |
locale="ロケール" | このタグを使用してフェッチされる表示名を決定します。 |
attributeName="属性名" | 属性の名前で、属性のLOVはこのLOVにフェッチされます。 |
attributeType="string | number | date" | LOVがフェッチされる属性のタイプです。属性名ではインスタンス内の属性を一意に識別できないため、属性のタイプが必要です。 |
このタグは反復タグです。検索属性LOV内のすべての値をループ処理します。このタグは、ループ処理ごとにvalueという名前のスクリプト変数を定義します。これは、属性タイプに応じてjava
.lang
.String
、java
.util
.Date
またはjava
.math
.BigDecimal
のいずれかのオブジェクトになります。また、"displayname"という名前の文字列変数も定義します。この名前はローカライズされた値の表示名です。
次の例は、"mybookstore"インスタンス内にある"Dept"という文字列属性のすべての値を示します。ここでは英語の表示名を使用しています。
<US:iterLOV instance="mybookstore" attribute_name="Dept" attribute_type="String" > <%= value %> <%= displayname %> </US:iterLOV >
このタグは、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>
このタグは、<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>
検索の実行後に、その結果をレンダリングする必要があります。<US:getResult>タグでwithCount=trueを設定すると、結果にヒット総数が含まれ、<showHitCount>タグでその総数を表示できます。
属性名 | 説明 |
---|---|
result="名前" | <US:getResult>タグで指定するresultIdを参照します。 |
次の例では、検索結果の結果数を表示します。
<US:showHitCount result="searchresult" />
このタグは反復タグです。検索結果内のすべてのドキュメントをループ処理します。
属性名 | 説明 |
---|---|
result="名前" | <US:getResult>タグで指定するresultIdを参照します。 |
instance="名前" | <US:instance>タグで指定するinstanceIdを参照します。 |
このタグは、検索結果のすべてのドキュメントをループ処理し、"doc"というスクリプト変数(oracle
.ultrasearch
.query
.Document
オブジェクト)を定義します。さらに、ネストされた<showAttributeValue>タグを設定して、ドキュメントの属性をレンダリングできます。指定した結果が、指定のインスタンスを検索して取得した結果でない場合は、エラーになります。つまり、結果は、インスタンスを検索した結果であることが必要です。
次の例では、検索結果に含まれるすべてのドキュメントのURLを表示します。
<US:iterResult result="searchresult" instance="mybookstore"> </US:iterResult>
このタグは、<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>
クローラ・エージェントを実装すると、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データベースに接続し、クローラが収集して索引付けを行う表の内容を取得します。
サンプル・エージェントは完全な機能を備えており、他のデータベース・ベースのデータ・ソースに適合するようにカスタマイズできます。このエージェントは、次のタスクを実行します。
データ・ソース・パラメータの読取り
データ・ソースが含まれるデータベースとの接続
データ・ソースからフェッチするドキュメントURLおよび属性の初期化
ドキュメントURLおよび属性のデータ・ソースからのフェッチ
データ・ソースからの切断
クローラ・エージェントは次の処理を行います。
データ・ソースにアクセスするためのクローラの認証
HTTP URL(表示URL)を使用したデータ・ソース・ドキュメントへのアクセスの提供
ドキュメント属性の形式でドキュメントのメタデータを提供
各ドキュメント属性を、エンド・ユーザーが使用する一般的な属性名にマップ
ドキュメントがストリーム方式で1つずつ取り出されるように、データ・ソースのフラット化されたビューを提供
必要に応じて、作成者やタイトルなどの標準メタデータに関する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クラスパスは、エージェント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ファイルが存在する場合は、単に空白で区切って指定します。
エージェントjarファイルを作成します。
jar cvfm SearchCrawlerAgent.jar META-INF/MANIFEST.MF oracle/marketing/search/crawleragent/*
これにより、指定されたマニフェスト・ファイルとともにSearchCrawlerAgent.jar
が作成されます。jarファイルの作成では、小文字でmを指定して、マニフェスト・ファイルを使用することをjarユーティリティに指示します。
注意: log4jはこのjarファイルには含まれません。
jarファイルをOracle Ultra Searchの適切な位置($ORACLE_HOME/ultrasearch/lib/agent/SearchCrawlerAgent.jar
および$ORACLE_HOME/ultrasearch/lib/agent/log4j-1.2.8.jar
)に移動します。
新しいクラスパスを指定して既存のエージェントjarファイルを更新するには、次のようにします。
次のようにして、jarファイルにすでにMANIFEST.MF
ファイルが存在するかどうかを確認します。
% jar tf my.jar META-INF/MANIFEST.MF a/b/c/d/xyz.class ...
jarファイルにMANIFEST.MF
が存在しない場合は、手順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
次のようにして、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は、クローラ・エージェントの実装に使用するメソッドの集合です。クローラ・エージェントの実装例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を使用するサンプル・クローラ・エージェント実装用です。
ここでは、サンプル・クローラ・エージェントの設定方法について説明します。
サンプル・エージェントの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 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を直接使用して、索引付けされた電子メールをレンダリングします。ソース・コードは表示可能なため、電子メール・ブラウザをカスタマイズするときに使用できます。
Oracle Ultra Searchには、JavaMail 1.1に準拠した実装が必要です。Sun社のリファレンス実装は、JavaMailバージョン1.2です。このリファレンス実装は、出荷時のOracle Ultra Searchに含まれています。
メーリング・リスト・ブラウザ・アプリケーション・ファイルは、$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中間層のインストール」を参照してください。
URLリライタは、Oracle Ultra Search UrlRewriter Javaインタフェースを実装するためにユーザーが提供するJavaモジュールです。クローラは、アクティブ化されたURLリライタを使用して、抽出したURLリンクをURLキューに挿入される前にフィルタ処理およびリライトします。
URLキューからその次のURLを取得します。(キューが空の場合、Webクロールは停止します。)
URLの内容をフェッチします。
内容からURLリンクを抽出します。
リンクをURLキューに挿入します。
生成された新しいURLリンクは、既存のホスト、パスおよびMIMEタイプすべての包含ルールと除外ルールの影響を受けます。
抽出したURLリンクで実行できる操作は2つあります。
フィルタ処理: 不要なURLリンクを取り除きます。
リライト: URLリンクを変換します。
ユーザーは、Oracle Ultra Searchクローラがサポートする次のメカニズムを使用して、キューに挿入できるURLリンクのタイプを制御します。
ホストの包含ルールと除外ルール(たとえば、www.acme.comのURLのみを許可する)
ファイル・パスの包含ルールと除外ルール(たとえば、/archiveディレクトリの下にあるURLのみを許可する)
MIMEタイプの包含ルール(たとえば、HTMLファイルとPDFファイルのみを許可する)
ロボット・メタ・タグNOFOLLOW
(たとえば、そのページのいかなるリンクも抽出しない)
ブラック・リストURL(たとえば、明示的に指定したURLをクロールしない)
これらのメカニズムによって、フィルタ処理基準に一致するURLリンクのみが処理されます。ただし、ユーザーがURLリンクのフィルタ処理に使用できる他の基準があります。次に例を示します。
特定のファイル名拡張子を持つURLの許可
特定のポート番号からのURLのみ許可
特定ディレクトリのPDFファイルの禁止
クローラが抽出した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リライタを作成して使用するには、次の手順を実行します。
UrlRewriterインタフェースのopen
、close
およびrewrite
の各メソッドを実装する新規Javaファイルを作成します。リライタSampleRewriter.java
は、$ORACLE_HOME/ultrasearch/extension/
より下の参照に使用できます。
リライタJavaファイルをクラス・ファイルにコンパイルします。次に例を示します。
/jdk1.3.1/bin/javac -O -classpath $ORACLE_HOME/ultrasearch/lib/ultrasearch.jar SampleRewriter.java
リライタ・クラス・ファイルを$ORACLE_HOME/ultrasearch/lib/agent/
ディレクトリ下のjarファイルにパッケージ化します。次に例を示します。
/jdk1.3.1/bin/jar cv0f $ORACLE_HOME/ultrasearch/lib/agent/sample.jar SampleRewriter.class
「Webソースの作成」の手順2、または既存のWebデータ・ソースのクローラ・パラメータ・ページの管理ツールで、リライタ・クラス名とjarファイル名(たとえば、SampleRewriter
とsample
.jar
)を指定します。
管理ツールの「Web Sources」タブで、URLリライタ・オプションを有効にします。
対応するスケジュールを起動して、ターゲットWebデータ・ソースをクロールします。クローラ・ログ・ファイルは、「URLリライタSampleRewriterのロード」メッセージによってURLリライタの使用を確認します。
注意: URLリライトは、Webデータ・ソースにのみ使用可能です。 |
関連項目:
|
ドキュメント・サービス・クローラ・エージェントAPIを使用すると、ドキュメント・コンテンツに基づいて属性データを生成できます。対象となるドキュメントのエージェントからロボット・メタ・タグの指示を受け取り、索引を制御するために元のドキュメント・コンテンツを変換します。
ドキュメント・サービス・エージェントはユーザー実装のJavaモジュールです。クローラと対話して、クロールされたドキュメントの制御性を高めるために、DocumentService
Javaインタフェースを実装します。これは、ユーザー定義のドキュメント処理のために、クロール中のコールアウトを許可するクローラ・エージェントの形式のJavaインタフェースです。次の特徴があります。
ユーザーの選択により、索引付けして検索可能にするために、処理された結果をドキュメント属性(種別、テーマ、主旨など)としてクローラに戻します。
エージェントからのロボット・メタ・タグの指示は、リンクに従わずに索引を付けて(または索引を付けずに)、ターゲット・ドキュメントを無視できます。
索引付けのために元のドキュメント・コンテンツを変換およびフィルタ処理できます。
1つのドキュメント・サービス・エージェントをすべてのデータ・ソースまたは特定のデータ・ソースに対して割り当てることができます。
ドキュメント・サービス・エージェントの定義をサポートします。
各クロール・スレッドには、サービス・エージェント・オブジェクトのコピーがあります。ドキュメント・サービス・エージェントのjarファイルまたはクラス・ファイルは、$ORACLE_HOME/ultrasearch/lib/agent/
ディレクトリにある必要があります。
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はドキュメントを処理し、要約、分類、またはドキュメント・テキストを入力とみなしてテキスト出力を生成する、任意の変換機能を実行します。
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
: 値を取得するためにgetRobotsControl
、getAttribute
およびgetContents
をコールします。
その他のステータス・コードの値はNO_CHANGE
とみなされます。
ドキュメントの処理中の問題が発生すると、エージェント例外がスローされます。致命的なエージェント例外が発生すると、クローラは停止します。警告エージェント例外はNO_CHANGE
とみなされ、例外がクローラ・ログに出力されます。
UrlData getAttribute(number urlId):
doService
がFOLLOW_UP
ステータス・コードを戻すときのみコールされます。
エージェントは、このドキュメントの属性データを含むUrlDataオブジェクトを戻します。追加する属性がない場合は、エージェントは単にnullを戻します。属性が登録されていない場合は、自動的に登録されます。
int getRobotControl (number urlId):
doService
がFOLLOW_UP
ステータス・コードを戻すときのみコールされます。
このファンクションは、このドキュメント用のロボット・コントロールがどのような種類であるかを指定するステータス・コードを返します。次のコードが使用されます。
USE_CURRENT
: 既存の設定を使用します。
FOLLOW_AND_INDEX
: リンクをたどり、ドキュメントに索引を付けます。
FOLLOW_AND_NO_INDEX
: リンクをたどりますが、このドキュメントに索引を付けません。
NO_FOLLOW_AND_INDEX
: リンクの抽出はしませんが、ドキュメントに索引を付けます。
NO_FOLLOW_AND_NO_INDEX
: リンクの抽出はせず、索引付けも行いません。
Reader getContents(number urlId):
doService
がFOLLOW_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.java
がDocServiceAgent.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には、複数の問合せアプリケーションおよびサンプル・クローラ・エージェントが含まれています。問合せアプリケーションは、独自の問合せアプリケーションを作成するための例として使用します。問合せアプリケーションは、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のメソッドを直接起動することもできます。
前述のとおり、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に次のファイルを追加してください。
$ORACLE_HOME/ultrasearch/lib/ultrasearch_query.jar
$ORACLE_HOME/lib/mail.jar
$ORACLE_HOME/lib/activation.jar
図10-1に、Web問合せアプリケーションでOracle Ultra Search Java Query APIをコールする方法を示します。