この章では、Oracle Secure Enterprise Search(SES)のAPIおよび関連情報について説明します。この章のトピックは、次のとおりです。
|
注意: この章で説明するAPIは、Oracle SESのみでサポートされます。 |
Oracle Secure Enterprise Searchには、次のAPIが用意されています。
WebサービスAPI
WebサービスAPIは、Oracle SES検索機能を検索アプリケーションに統合するために使用されます。Oracle SESには、Javaプロキシ・ライブラリが用意されています。公開済のWebサービス記述言語(WSDL)ファイルに基づいてJavaライブラリを使用するかプロキシを作成し、Oracle SES Webサービスにアクセスできます。Oracle SESには、次の2つのWebサービスAPIが用意されています。
問合せWebサービスAPI
管理WebサービスAPI
クローラ・プラグインAPI
Oracle SESには拡張可能なクローラ・プラグイン・フレームワークが含まれており、クローラ・プラグインAPIを使用して独自のドキュメント・リポジトリをクロールして索引付けできます。
セキュリティAPI
Oracle SESには、拡張可能な認証および認可フレームワークも含まれています。アイデンティティ管理システムでアイデンティティ・プラグインAPIを使用してユーザーを認可し、認可プラグインAPIを使用して各ソースに独自のセキュリティ・モデルを定義できます。
URLリライタAPI
URLリライタAPIは、抽出されたURLリンクをURLキューへの挿入前にフィルタしてリライトするために、クローラで使用されます。
問合せ時認可API
問合せ時認可APIは、検索時に検索結果をフィルタしてドキュメント情報にアクセスします。問合せ時フィルタリングは、ACLと併用またはACLのかわりに使用できます。
Oracle SESには、次のWebサービスAPIが含まれています。
問合せWebサービスAPI: 検索問合せを実行できます。たとえば、oracle benefitsを検索すると、すべてのドキュメントが戻されます。Oracle SESのデフォルトのランキングをカスタマイズして、自社にとってより関連性の高い検索結果リストを作成したり、カスタマイズ・アプリケーション用にクラスタリングを構成することもできます。
管理WebサービスAPI: クロール・スケジュールの開始と停止、スケジュール・ステータスのチェック、推定索引フラグメンテーション・レベルの取得、索引最適化の実行などの管理アクションのサブセットを実行できます。
|
関連項目: 『Oracle Secure Enterprise Search Java API Reference』およびOracle SES管理チュートリアルの「Webサービス・インタフェース」セクション
|
Oracle Secure Enterprise SearchのWebサービスAPIを使用すると、ネットワーク上でOracle SESを検索して管理するための独自のアプリケーションを記述できます。このAPIには、次のメリットがあります。
標準インターネット・プロトコルを介して、Oracle SESサーバーに接続している任意のコンピュータにアプリケーションをデプロイできます。
Webサービス・プロトコルはXMLベースであり、アプリケーションの統合が容易になります。
Oracle SESには、クライアント・サイドJavaプロキシも用意されており、WebサービスのSOAPメッセージをマーシャリングして解析できます。クライアント・アプリケーション自体がOracle SES WebサービスにアクセスしてSOAPリクエストの作成とSOAPレスポンスの解析を実行するかわりに、ライブラリを使用できます。
この項のトピックは、次のとおりです。
Oracle SES Webサービスは、Oracle SES中間層のスタンドアロンOC4Jサーバーの上位で実行されます。また、デフォルト・インストールの一部としてインストールされ、構成されます。Oracle SES Webサービスはそのまま使用できます。Oracle SES Webサービスの起動と停止には、同じ中間層管理手順を使用します。
OC4Jには、デフォルトのOracle SES Webサービス管理者コンソールが用意されています。管理者コンソールのURLは、Oracle SES WebサービスのURLと同じです。
問合せWebサービスは、Oracle SESインストールの次のアドレスにあります。
http://<host>:<port>/search/query/OracleSearch
たとえば、Oracle SES中間層がホストmyhost上で実行中で、ポート番号が8888の場合、問合せWebサービスのURLは次のようになります。
http://myhost:8888/search/query/OracleSearch
管理者コンソールから次の情報を取得できます。
Oracle SESの問合せWSDL記述
Webサービスのメッセージと操作のリスト
クライアント・サイドJavaプロキシおよびソース・コード
管理Webサービスは、Oracle SESインストールの次のアドレスにあります。
http://<host>:<port>/search/ws/admin/SearchAdmin
管理者コンソールから次の情報を取得できます。
Oracle SESの管理WSDL記述
Webサービスのメッセージと操作のリスト
クライアント・サイドのJavaScriptスタブ
Oracle SES Webサービスは、Oracle SESへのリモート・プロシージャ・コール(RPC)インタフェースで構成されています。このRPCインタフェースにより、クライアント・アプリケーションでネットワークを介してOracle SES上で操作を起動できるようになります。クライアント・アプリケーションでは、Oracle SES WebサービスURLにより公開されたWSDL仕様を使用し、Simple Object Access Protocol(SOAP)を使用してリクエスト・メッセージを送信します。次に、サーバーがクライアント・アプリケーションにSOAPレスポンス・メッセージで応答します。
この項では、次の概念について説明します。
Webサービスとは、URIで識別するソフトウェア・アプリケーションのことで、そのインタフェースとバインディングはXMLで定義、記述および検出できます。Webサービスでは、XMLベース・メッセージとインターネット・ベース製品による、他のソフトウェア・アプリケーションとの直接的な相互作用がサポートされます。
Webサービスの機能は、次のとおりです。
自己公開および記述: Webサービスは他のアプリケーションで認識できるように、機能および属性を定義します。WSDLファイルを提供することで、Webサービスの機能が他のアプリケーションで使用可能になります。
Web上で他のサービスの検出が可能: Webサービスをアプリケーションで検出できるようにUDDIレジストリに登録できます。
起動可能: Webサービスを検出および検査した後に、リモート・アプリケーションはインターネット標準プロトコルを使用してサービスを起動できます。
Webサービスは、リクエストおよびレスポンスまたは1方向スタイルであり、同期通信または非同期通信を使用できます。ただし、Webサービス・クライアントおよびWebサービス間の、通信スタイルまたは通信タイプの交換の基本的な単位はメッセージです。
Simple Object Access Protocol(SOAP)は、分散環境で情報交換に使用される軽量のXMLベース・プロトコルです。SOAPは、RPC指向およびメッセージ指向の交換など、様々なスタイルの情報交換をサポートします。RPCスタイルの情報交換では、リクエスト-レスポンス処理が可能であり、エンドポイントはプロシージャ指向のメッセージを受信し、相関付けられたレスポンス・メッセージで応答します。メッセージ指向の情報交換では、メッセージや他のタイプのドキュメントを交換する必要のある組織とアプリケーションがサポートされます。この場合、メッセージは送信されますが、送信者は即時のレスポンスを期待または待機できません。メッセージ指向の情報交換は、ドキュメント・スタイル交換とも呼ばれます。
SOAPの機能は、次のとおりです。
プロトコルに非依存
言語に非依存
プラットフォームおよびオペレーティング・システムに非依存
添付を取り込むSOAP XMLメッセージのサポート(マルチパートMIME構造を使用)
Oracle SES Webサービスは、Oracle SES中間層のOC4Jサーバーにより動作します。Oracle SES Webサービスの実装、構成およびデプロイメントには、OC4Jサーバーにより提供されるプロシージャと標準が適用されます。
Oracle SESのWSDLでは、Oracle SES Webサービスの操作とメッセージを定義します。Oracle SES Webサービスのメッセージ交換はRPCスタイルです。このスタイルでは、SOAPメッセージ・ボディの内容はプロシージャを指定する構造に準拠しており、パラメータまたはレスポンスのセットと結果およびその他のパラメータが含まれます。
Oracle SESのSOAPメッセージではHTTPバインディングが使用され、SOAPメッセージはHTTPリクエスト・ボディに埋め込まれ、HTTPレスポンスで戻されます。
次のダイアグラムに、Oracle SES Webサービスのアーキテクチャを示します。

Oracle Secure Enterprise Search Webサービスでは、次のベース・データ型を使用します。
XMLスキーマのデータ型とJavaのデータ型とのマッピングは、SOAP開発環境に依存します。次の表に、Oracle JDeveloper環境におけるマッピングを示します。
Oracle SES Webサービスでは、次の複合データ型を使用します。
検索結果のコンテナ。次の要素があります。
returnCount: 検索結果とともにヒットリストの推定カウントが戻されるかどうかを示すブール値
estimatedHitCount: 検索結果の推定カウント。-1は、検索結果とともに推定ヒット・カウントが戻されないことを意味します。
dupRemoved: 検索結果から近似重複ドキュメントが削除されたかどうかを示すブール値
dupMarked: 検索結果に含まれる近似重複ドキュメントがマーク付けされたかどうかを示すブール値。dupRemovedがtrueの場合、dupMarkedは常にfalseになります。
resultElements: 実際のヒットリストを表すresultElementの配列
suggestedLinks: 指定した検索に対するsuggestedLinkの配列
query: 実際の検索文字列。検索文字列は、Oracle SES問合せ構文に従う必要があります。
altKeywords: 指定した検索に対する代替キーワード(推奨)
startIndex: 検索結果の開始索引
docsReturned: 戻された検索ヒット数
検索結果要素のデータ型。次の要素があります。
author: ドキュメントの原本著者
description: ドキュメントの説明
url: ドキュメントのURL
snippet: ドキュメントのコンテキスト内キーワード(KWIC)
title: ドキュメントのタイトル
lastModified: ドキュメントの最終変更日
mimetype: ドキュメントのMIMEタイプ
score: ドキュメントのOracle Text有効範囲
docID: ドキュメントID
language: ドキュメントの言語
contentLength: ドキュメントのコンテンツの長さ
signature: ドキュメントの署名
infoSourceID: ドキュメントのInfoSource ID
infoSourcePath: ドキュメントのInfoSourceパス
groups: ドキュメントが属しているグループの配列
fedID: フェデレーテッド・インスタンスのID(ドキュメントのフェッチ元であるフェデレーテッド・インスタンスの追跡に使用)
customAttributes: クロール時にドキュメントから抽出されたかドキュメントについて抽出されたデフォルト以外のカスタム属性の配列
CustomAttributeでは、カスタム(ユーザー定義)属性の名前と値がカプセル化されています。属性の名前は、属性の実際の名前とタイプがname_type形式で表されますたとえば、String属性fooは、foo_STRINGで表されます。すべてのDate属性は、mm/dd/yyyy形式を使用します。
プロバイダからの推奨コンテンツ。次の要素があります。
name: 推奨コンテンツ・プロバイダの名前
content: プロバイダからの推奨コンテンツ。このコンテンツは、XMLまたはHTMLコンテンツのバイト配列です。
ソース・グループ。次の要素があります。
groupID: ソース・グループID
groupName: ソース・グループ名
groupDisplayName: ソース・グループの表示名
検索属性のデータ型。次の要素があります。
id: 検索属性ID
name: 検索属性の内部名
displayName: 検索属性の表示名
type: 検索属性タイプ。値はnumber、stringまたはdateです。
フィルタ条件(述語)のデータ型。次の要素があります。
attributeId: 検索属性ID
attributeType: 検索属性タイプ。値はnumber、stringまたはdateです。
operator: フィルタ条件の演算子
attributeTypeがstringの場合は、equalsまたはcontainsを使用する必要があります。
attributeTypeがnumberまたはdateの場合は、greaterthan、greaterthanequals、lessthan、lessthanequalsまたはequalsを使用する必要があります。
attributeValue: フィルタ条件(述語)の値
string型の属性の場合、値は単に文字列自体です。
number型の属性の場合、値は、+または-記号(オプション)とそれに続く0(ゼロ)個以上の数字(整数)、さらにそれに続く小数部(オプション)で表される必要があります。小数部は、小数点とそれに続く0(ゼロ)個以上の数字で構成されます。文字列の整数部または小数部には、数字を1つ以上含める必要があります。
date型の属性の場合、値には書式mm/dd/yyyyを使用する必要があります。mmは月(01〜12)、ddは日付(01〜31)、yyyyは年(2005など)です。
次に例を示します。
「Title contains 'Oracle Secure Enterprise Search'」(タイトルに'Oracle Secure Enterprise Search'を含む)というフィルタ条件の場合、クライアント・アプリケーションは検索属性Titleの属性IDを検索し、次の(要素,値)ペアを含める必要があります。
attributeID = 1(Titleの検索属性IDが1の場合)
operator = contains
attributeValue = Oracle Secure Enterprise Search
「Price greater than 1000」(1000を超える価格)というフィルタ条件の場合、クライアント・アプリケーションは検索属性Priceの属性IDを検索し、次の(要素,値)ペアを含める必要があります。
attributeID = 2(Priceの検索属性IDが2の場合)
operator = greaterthan
attributeValue = 1000
infosourceノードのデータ型。次の要素があります。
id: InfosourceノードID
fedID: フェデレーテッド・インスタンスのID。ノードが属しているフェデレーテッド・インスタンスの追跡に使用されます。
name: ノード名
docCount: ノードの下にあるドキュメントの数。値が–1の場合、ノードの下にドキュメントが存在しますが、カウントは表示できません。
hasChildren: ノードに子があるかどうかを示します。
fullpath: カテゴリ・ノードのフルパス
fullpathIds: フルパスに含まれる各ノードのID
結果の問合せ時認可フィルタリング時に使用できる検索ユーザーの認証情報を名前/値ペアの形式で格納するためのデータ構造。次の要素があります。
name: 認証属性名
value: 認証属性の値
Oracle Secure Enterprise Search Webサービスでは、次の複合配列型を使用します。
AttributeArray: Attributeの配列
AttributeLOVElementArray: AttributeLOVElementの配列
CustomAttributeArray: CustomAttributeの配列
SCElementArray: SCElementの配列
DataGroupArray: DataGroupの配列
FilterArray: Filterの配列
IntArray: intの配列
LanguageArray: Languageの配列
NodeArray: Nodeの配列
ResultElementArray: ResultElementの配列
SessionContextElementArray: SessionContextElementの配列
StringArray: Stringの配列
この項のトピックは、次のとおりです。
Oracle Secure Enterprise Searchには、次のカテゴリのWebサービス操作が用意されています。
認証: Oracle SESへのユーザー・アクセスを認証します。この操作が必要となるのは、ユーザーがセキュア検索を実行する場合のみです。
検索: Oracle SESで検索を実行し、ヒットリストとともに推定ヒット・カウント、結果リスト内の近似重複ドキュメント、推奨リンクおよび検索用の代替キーワードなどの情報を取得します。指定した問合せに対して外部プロバイダから推奨コンテンツを取得します。Oracle SESのデフォルトのランキングをカスタマイズして、自社にとってより関連性の高い検索結果リストを作成したり、カスタマイズしたOracle SESアプリケーション用にクラスタリングを構成することもできます。
メタデータ: ソース・グループのリスト、サポート対象言語のリストまたは検索属性のリストなど、検索メタデータを取得します。
検索ヒット: キャッシュされたバージョンの検索結果や、検索ヒットのインリンクとアウトリンクなど、検索結果の詳細を取得します。
ユーザー・フィードバック: ユーザーが送信したURLなどのユーザー・フィードバックをOracle SESに送信します。
この項では、次の認証操作について説明します。
このメッセージは、Oracle SESに対して検索ユーザーを認証するようにリクエストします。次のパラメータで構成されます。
username: 検索ユーザーのユーザー名
password: 検索ユーザーのパスワード
<message name="loginRequest"> <part name="username" type="xsd:string"/> <part name="password" type="xsd:string"/> </message>
|
注意: ユーザー名は大/小文字を区別しません。 |
このメッセージには、loginRequestメッセージの戻りステータスが含まれます。
<message name="loginResponse"> <part name="return" type="typens:Status"/> </message>
このメッセージは、ユーザーが検索アプリケーションからログアウトするときに使用されます。
<message name="logoutRequest"> </message>
このメッセージには、logoutRequestメッセージの戻りステータスが含まれます。
<message name="logoutResponse"> <part name="return" type="typens:Status"/> </message>
このメッセージは、問合せ時フィルタリング時に使用可能な、検索ユーザーの認証情報を渡すために使用されます。
|
注意: Webサービスのログイン・コールとログアウト・コールにより、Oracle SESでは問合せ時フィルタに渡されるセッション・コンテキスト内で AUTH_USER値が自動的に設定またはリセットされます。このセッション・コンテキスト属性は、setSessionContextコールでは明示的に上書きできません。 |
次のパラメータで構成されます。
sessionContext: SessionContextElementの配列。この配列には、問合せ時認証フィルタリングに必要な認証情報が名前/値ペアの形式で格納されます。
<message name="setSessionContextRequest">
<part name="sessionContext" type="typens:SessionContextElementArray"/>
</message>
このメッセージには、setSessionContextメッセージの戻りステータスが含まれます。
<message name="setSessionContextResponse"> <part name="return" type="typens:Status"/> </message>
このメッセージは、プロキシ認証を使用してOracle SESにエンド・ユーザーをログインさせます。このメッセージは次のパラメータで構成されます。
username: プロキシ・ユーザーのユーザー名
password: プロキシ・ユーザーのパスワード
searchUser: エンド・ユーザーのユーザー名
<message name="proxyLoginRequest"> <part name="username" type="xsd:string"/> <part name="password" type="xsd:string"/> <part name="searchUser" type="xsd:string"/> </message>
プロキシ・ユーザーは、Oracle SESインスタンスで作成されるフェデレーション・トラステッド・エンティティの1人である必要があります。
このメッセージには、proxyLoginRequestメッセージの戻りステータスが含まれます。
<message name="proxyLoginResponse"> <part name="return" type="typens:Status"/> </message>
この項では、次の検索操作について説明します。
このメッセージは、Oracle SES拡張検索を起動して検索結果を戻します。次のパラメータで構成されます。
query: 検索文字列。この検索文字列は、Oracle SES問合せ構文に従う必要があります。詳細は、「問合せWebサービスの問合せ構文」を参照してください。
startIndex: 最初に戻されるヒットリスト内のドキュメントの索引。明示的に設定しなければ、デフォルトの1になります。
docsRequested: 戻されるヒットリスト内のドキュメントの最大数。明示的に設定しなければ、デフォルトの10になります。
dupRemoved: 重複削除を有効または無効にするブール型フラグ。オンにすると、ヒットリスト内の重複ドキュメントが削除されます。明示的に設定しなければ、デフォルトのfalseになります。注意: dupRemovedがオンの場合、dupMarkedスイッチは無効です。
dupMarked: 重複検出を有効または無効にするブール型フラグ。明示的に設定しなければ、デフォルトのfalseになります。注意: dupRemovedがオンの場合、dupMarkedスイッチは無効です。
groups: 検索対象として限定するデーター・ソース・グループ。明示的に設定しなければ、デフォルトですべてのグループが対象となります。
queryLang: 問合せの言語。ロケールと同じです。明示的に設定しなければ、デフォルトの英語(en)になります。これは、検索オプションで使用されます。
docLang: 検索対象として限定するドキュメントの言語。値を明示的に設定しないと、検索はすべての言語のドキュメントに対して実行されます。
returnCount: 結果とともに合計ヒット・カウントをフェッチするかどうかを示すブール型フラグ。明示的に設定しなければ、デフォルトのfalseになります。
filterConnector: すべてのフィルタ間のコネクタ。andはヒットリスト内のドキュメントがすべてのフィルタを満たす必要があることを示し、orはヒットリスト内のドキュメントが1つ以上のフィルタを満たす必要があることを示します。明示的に設定しなければ、デフォルトのandになります。
filters: フィルタの配列。各フィルタは、検索結果に対する制限です。フィルタはfilterConnectorで接続されます。明示的に設定しなければ、デフォルトのnullになります(検索結果にフィルタは適用されません)。
fetchAttributes: 検索結果とともにフェッチされるカスタムまたはデフォルト以外の属性IDを表す整数の配列。
searchControls: 拡張フィルタ条件およびランキング・パラメータを指定するXML文字列。
|
注意: 属性フィルタ LastModifiedDateは、mm/dd/yyyy形式を使用します。 |
public OracleSearchResult doOracleAdvancedSearch(String query,
Integer startIndex,
Integer docsRequested,
Boolean dupRemoved,
Boolean dupMarked,
DataGroup[] groups,
String queryLang,
String docLang,
Boolean returnCount,
String filterConnector,
Filter[] filters,
Integer[] fetchAttributes,
String searchControls)
throws Exception
このメッセージは、Oracle SESフェッチ検索を起動してフェッチ結果を戻します。次のパラメータで構成されます。
query: 検索文字列。この検索文字列は、Oracle SES問合せ構文に従う必要があります。詳細は、「問合せWebサービスの問合せ構文」を参照してください。
targetDocIdList: 通常は、クラスタ・ノードからのターゲット・ドキュメントIDのリスト。
startIndex: 最初に戻されるヒットリスト内のドキュメントの索引。明示的に設定しなければ、デフォルトの1になります。
docsRequested: 戻されるヒットリスト内のドキュメントの最大数。明示的に設定しなければ、デフォルトの10になります。
queryLang: 問合せの言語。ロケールと同じです。明示的に設定しなければ、デフォルトの英語(en)になります。これは、検索オプションで使用されます。
fetchAttributeNames: 検索結果とともにフェッチされるカスタムまたはデフォルト以外の属性名の配列。
groupAttr: グループ化に使用する属性。
sortAttrList: ソート属性設定のリスト。
clusterList: クラスタ構成のリスト。
public OracleResultContainer doOracleFetchSearch(String query,
String[] targetDocIdList,
Integer startIndex,
Integer docsRequested,
String queryLang,
String[] fetchAttributeNames,
GroupAttribute groupAttr,
SortAttribute[] sortAttrList,
ClusterConfig[] clusterList)
throws Exception
このメッセージは、Oracle SESの編成された検索を起動して検索結果を戻します。次のパラメータで構成されます。
query: 検索文字列。この検索文字列は、Oracle SES問合せ構文に従う必要があります。詳細は、「問合せWebサービスの問合せ構文」を参照してください。
topN: グループ化、ソートおよびクラスタリングでの上位N件の検索結果。
startIndex: 最初に戻されるヒットリスト内のドキュメントの索引。明示的に設定しなければ、デフォルトの1になります。
docsRequested: 戻されるヒットリスト内のドキュメントの最大数。明示的に設定しなければ、デフォルトの10になります。
dupRemoved: 重複削除を有効または無効にするブール型フラグ。オンにすると、ヒットリスト内の重複ドキュメントが削除されます。明示的に設定しなければ、デフォルトのfalseになります。注意: dupRemovedがオンの場合、dupMarkedスイッチは無効です。
dupMarked: 重複検出を有効または無効にするブール型フラグ。明示的に設定しなければ、デフォルトのfalseになります。注意: dupRemovedがオンの場合、dupMarkedスイッチは無効です。
groups: 検索対象として限定するデーター・ソース・グループ。明示的に設定しなければ、デフォルトですべてのグループが対象となります。
queryLang: 問合せの言語。ロケールと同じです。明示的に設定しなければ、デフォルトの英語(en)になります。これは、検索オプションで使用されます。
docLang: 検索対象として限定するドキュメントの言語。値を明示的に設定しないと、検索はすべての言語のドキュメントに対して実行されます。
returnCount: 結果とともに合計ヒット・カウントをフェッチするかどうかを示すブール型フラグ。明示的に設定しなければ、デフォルトのfalseになります。
filterConnector: すべてのフィルタ間のコネクタ。andはヒットリスト内のドキュメントがすべてのフィルタを満たす必要があることを示し、orはヒットリスト内のドキュメントが1つ以上のフィルタを満たす必要があることを示します。明示的に設定しなければ、デフォルトのandになります。
filters: フィルタの配列。各フィルタは、検索結果に対する制限です。フィルタはfilterConnectorで接続されます。明示的に設定しなければ、デフォルトのnullになります(検索結果にフィルタは適用されません)。
fetchAttributeNames: 検索結果とともにフェッチされるカスタムまたはデフォルト以外の属性名の配列。
searchControls: 拡張フィルタ条件およびランキング・パラメータを指定するXML文字列。
groupAttr: グループ化に使用する属性。
sortAttrList: ソート属性設定のリスト。
clusterList: クラスタ構成のリスト。
public OracleResultContainer doOracleOrganizedSearch(String query,
Integer topN,
Integer startIndex,
Integer docsRequested,
Boolean dupRemoved,
Boolean dupMarked,
DataGroup[] groups,
String queryLang,
String docLang,
Boolean returnCount,
String filterConnector,
Filter[] filters,
String[] fetchAttributeNames,
String searchControls,
GroupAttribute groupAttr,
SortAttribute[] sortAttrList,
ClusterConfig[] clusterList)
throws Exception
これは、検索アプリケーション用のメイン・メッセージです。次のパラメータで構成されます。
query: 検索文字列。有効な文字列である必要があり、NULLにすることはできません。検索文字列は、Oracle SES問合せ構文に従う必要があります。詳細は、「問合せWebサービスの問合せ構文」を参照してください。
startIndex: 最初に戻される結果の索引。たとえば、67件の結果がある場合、20件目から始めることができます。明示的に設定しなければ、デフォルトの1になります。
docsRequested: 戻される結果の最大数。明示的に設定しなければ、デフォルトの10になります。
dupRemoved: 重複削除を有効または無効にします。オンにすると、検索結果では、すべての近似重複ドキュメントが結果リストから削除されます。dupRemovedがオンの場合、dupMarkedスイッチは無効です。明示的に設定しなければ、デフォルトのfalseになります。
dupMarked: 重複検出を有効または無効にします。dupRemovedがオフでdupMarkedがオンの場合、検索結果では、結果リストからのすべての近似重複ドキュメントが保持され、重複マークが付けられます。dupRemovedがオンの場合、dupMarkedスイッチは無効です。明示的に設定しなければ、デフォルトのfalseになります。
groups: 検索結果を指定のソース・グループからのドキュメントに限定します。明示的に設定しなければ、デフォルトですべてのグループが対象となります。
queryLang: 問合せ言語の引数は、有効なISO言語コードである必要があります。このコードは、ISO-639の定義に従って、2文字の小文字のコードです。たとえば、英語はenで、ドイツ語はdeです。 明示的に設定しなければ、デフォルトの英語(en)になります。これは、検索オプションに使用されます。
docLang: 検索を制限するためのドキュメント言語を設定します。値を明示的に設定しないと、検索はすべての言語のドキュメントに対して実行されます。
returnCount: 結果とともに合計ヒット・カウントを戻す場合はtrueに設定します。明示的に設定しなければ、デフォルトのfalseになります。
filterConnector: すべてのフィルタ間のコネクタ。andは検索結果がすべてのフィルタを満たす必要があることを示し、orは検索結果がフィルタを1つ以上満たすのみでよいことを示します。明示的に設定しなければ、デフォルトのandになります。
filters: フィルタの配列。各フィルタは、検索結果に対する制限です。フィルタはfilterConnectorで接続されます。明示的に設定しなければ、デフォルトのnullになります(検索結果にフィルタは適用されません)。
fetchAttributes: resultElements内でフェッチされるデフォルト以外の属性IDを表す整数の配列。デフォルトはnull(または1つの整数値0に設定)であるため、デフォルト属性以外の属性はresultElements内でフェッチされません。
<message name="doOracleSearch"> <part name="query" type="xsd:string"/> <part name="startIndex" type="xsd:int"/> <part name="docsRequested" type="xsd:int"/> <part name="dupRemoved" type="xsd:boolean"/> <part name="dupMarked" type="xsd:boolean"/> <part name="groups" type="typens:DataGroupArray"/> <part name="queryLang" type="xsd:string"/> <part name="docLang" type="xsd:string"/> <part name="returnCount" type="xsd:boolean"/> <part name="filterConnector" type="xsd:string"/> <part name="filters" type="typens:FilterArray"/> <part name="fetchAttributes" type="typens:IntArray"/> </message>
このメッセージは、検索結果をOracleSearchResultデータ型で戻します。
<message name="doOracleSearchResponse">
<part name="return" type="typens:OracleSearchResult"/>
</message>
このメッセージは、検索を特定のノードに限定します。次のパラメータで構成されます。
query: 検索文字列。有効な文字列である必要があり、NULLにすることはできません。検索文字列は、Oracle SES問合せ構文に従う必要があります。詳細は、「問合せWebサービスの問合せ構文」を参照してください。
nodeID: 検索先として限定するノードのID。
fedID: 親ノードが属しているフェデレーテッド・インスタンスのID(ローカル・ノードの場合はnull)。
startIndex: 最初に戻される結果の索引。たとえば、67件の結果がある場合、20件目から始めることができます。明示的に設定しなければ、デフォルトの1になります。
docsRequested: 戻される結果の最大数。明示的に設定しなければ、デフォルトの10になります。
dupRemoved: 重複削除を有効または無効にします。オンの場合、検索結果では、すべての近似重複ドキュメントが結果リストから削除されます。dupRemovedがオンの場合、dupMarkedスイッチは無効です。明示的に設定しなければ、デフォルトのfalseになります。
dupMarked: 重複検出を有効または無効にします。dupRemovedがオフでdupMarkedがオンの場合、検索結果では、結果リストからのすべての近似重複ドキュメントが保持され、重複マークが付けられます。dupRemovedがオンの場合、dupMarkedスイッチは無効です。明示的に設定しなければ、デフォルトのfalseになります。
queryLang: 問合せ言語の引数は、有効なISO言語コードである必要があります。このコードは、ISO-639の定義に従って、2文字の小文字のコードです。たとえば、英語はenで、ドイツ語はdeです。 明示的に設定しなければ、デフォルトの英語(en)になります。これは、検索オプションに使用されます。
docLang: 検索を制限するためのドキュメント言語を設定します。値を明示的に設定しないと、検索はすべての言語のドキュメントに対して実行されます。
returnCount: 結果とともに合計ヒット・カウントを戻す場合はtrueに設定します。明示的に設定しなければ、デフォルトのfalseになります。
fetchAttributes: resultElements内でフェッチされるデフォルト以外の属性IDを表す整数の配列。デフォルトはnull(または1つの整数値0に設定)であるため、デフォルト属性以外の属性はresultElements内でフェッチされません。
<message name="doOracleBrowseSearch">
<part name="query" type="xsd:string"/>
<part name="nodeID" type="xsd:string"/>
<part name="fedID" type="xsd:string"/>
<part name="startIndex" type="xsd:int"/>
<part name="docsRequested" type="xsd:int"/>
<part name="dupRemoved" type="xsd:boolean"/>
<part name="dupMarked" type="xsd:boolean"/>
<part name="queryLang" type="xsd:string"/>
<part name="docLang" type="xsd:string"/>
<part name="returnCount" type="xsd:boolean"/>
<part name="fetchAttributes" type="typens:IntArray"/>
</message>
このメッセージは、検索結果をOracleSearchResultデータ型で戻します。
<message name="doOracleBrowseSearchResponse">
<part name="return" type="typens:OracleSearchResult"/>
</message>
これは、簡略化されたdoOracleSearch形式のメッセージです。このメッセージの場合、doOracleSearchメッセージに指定する拡張検索パラメータを指定する必要はありません。このメッセージは次のパラメータで構成されます。
query: 検索文字列。有効な文字列である必要があり、NULLにすることはできません。検索文字列は、Oracle SES問合せ構文に従う必要があります。詳細は、「問合せWebサービスの問合せ構文」を参照してください。
startIndex: 最初に戻される結果の索引。たとえば、67件の結果がある場合、20件目から始めることができます。明示的に設定しなければ、デフォルトの1になります。
docsRequested: 戻される結果の最大数。明示的に設定しなければ、デフォルトの10になります。
dupRemoved: 重複削除を有効または無効にします。オンにすると、検索結果では、すべての近似重複ドキュメントが結果リストから削除されます。dupRemovedがオンの場合、dupMarkedスイッチは無効です。明示的に設定しなければ、デフォルトのfalseになります。
dupMarked: 重複検出を有効または無効にします。dupRemovedがオフでdupMarkedがオンの場合、検索結果では、結果リストからのすべての近似重複ドキュメントが保持され、重複マークが付けられます。dupRemovedがオンの場合、dupMarkedスイッチは無効です。明示的に設定しなければ、デフォルトのfalseになります。
returnCount: 結果とともに合計ヒット・カウントを戻す場合はtrueに設定します。明示的に設定しなければ、デフォルトのfalseになります。
<message name="doOracleSimpleSearch"> <part name="query" type="xsd:string"/> <part name="startIndex" type="xsd:int"/> <part name="docsRequested" type="xsd:int"/> <part name="dupRemoved" type="xsd:boolean"/> <part name="dupMarked" type="xsd:boolean"/> <part name="returnCount" type="xsd:boolean"/> </message>
このメッセージは、検索結果をOracleSearchResultデータ型で戻します。
<message name="doOracleSimpleSearchResponse"> <part name="return" type="typens:OracleSearchResult"/> </message>
このメッセージは、指定した問合せの推奨コンテンツを戻します。次のパラメータで構成されます。
query: 問合せ文字列。
returnType: コンテンツが戻されるフォーマット。htmlまたはxmlのいずれかです。指定したプロバイダにスタイル・シートが構成されていない場合、戻りタイプは、htmlまたはxmlのどちらが指定されているかに関係なく、プロバイダによって戻されるコンテンツの戻りタイプになります。
<message name="getSuggestedContent"> <part name="query" type="xsd:string"/> <part name="returnType" type="xsd:string"/> </message>
このメッセージは、問合せの推奨コンテンツを戻します。
<message name="getSuggestedContentResponse"> <part name="return" type="typens:SCElementArray"/> </message>
この項では、次の参照操作について説明します。
このメッセージは、指定された親ノードIDに関する情報ソース・ノードのリストを取得します。次のパラメータで構成されます。
parentNodeID: すべての子ノードが戻されるノードのID。設定されていない場合、メッセージはすべてのルート・ノードを戻します。
fedID: 親ノードが属しているフェデレーテッド・インスタンスのID(ローカル・ノードの場合はnull)。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
<message name="getInfoSourceNodesRequest">
<part name="parentNodeID" type="xsd:string"/>
<part name="fedID" type="xsd:string"/>
<part name="locale" type="xsd:string"/>
</message>
このメッセージは、情報ソース・ノードの配列を戻します。
<message name="getInfoSourceNodesResponse">
<part name="nodes" type="typens:NodeArray"/>
</message>
このメッセージは、指定された情報ソース・ノードについて、ルートからのフルパスを取得します。次のパラメータで構成されます。
nodeID: ルートからノードへのパスに含まれるすべてのノードが戻されるノードID。nodeIDは必ず設定する必要がありますが、NULLにすることはできません。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
<message name="getInfoSourceAncestorNodesRequest">
<part name="nodeID" type="xsd:string"/>
<part name="locale" type="xsd:string"/>
</message>
|
注意: Oracle SESでは、 getInfoSourceAncestorNodeメッセージは推奨されていません。 |
このメッセージは、情報ソース祖先ノードの配列を戻します。
<message name="getInfoSourceAncestorNodesResponse">
<part name="nodes" type="typens:NodeArray"/>
</message>
このメッセージは、特定のノードを取得します。次のパラメータで構成されます。
nodeID: 取得するノードのノードID。nodeIDは必ず設定する必要がありますが、NULLにすることはできません。
fedID: 親ノードが属しているフェデレーテッド・インスタンスのID(ローカル・ノードの場合はnull)。
locale: ロケールを表す2文字のコード。明示的に設定しなければ、デフォルトの英語(en)になります。
メッセージの書式は、次のとおりです。
<message name="getInfoSourceNodeRequest"> <part name="nodeID "type="xsd:string"/> <part name="fedID" "type="xsd:string"/> <part name="locale "type="xsd:string"/> </message>
このメッセージは、リクエストされたノードを戻します。
<message name="getInfoSourceNodeResponse">
<part name="node "type="typens:Node"/>
</message>
この項では、次のメタデータ操作について説明します。
このメッセージは、Oracle SESでサポートされている言語をすべて取得します。クライアント・アプリケーションで言語リストを表示するために使用されます。次のパラメータで構成されます。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
<message name="getLanguagesRequest">
<part name="locale" type="xsd:string"/>
</message>
このメッセージは、すべてのサポート対象言語を戻します。
<message name="getLanguagesResponse">
<part name="return" type="typens:LanguageArray"/>
</message>
このメッセージは、Oracle SESに定義されているすべてのソース・グループをリクエストします。このメッセージは、クライアント・アプリケーションで検索ページに全ソース・グループを表示するために使用されます。たとえば、エンド・ユーザーは検索結果を1つまたは複数のソース・グループ内に限定できます。次のパラメータで構成されます。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
<message name="getDataGroupsRequest">
<part name="locale" type="xsd:string"/>
</message>
このメッセージは、Oracle SESに定義されているすべてのソース・グループを戻します。
<message name="getDataGroupsResponse">
<part name="groups" type="typens:DataGroupArray"/>
</message>
このメッセージは、指定されたソース・グループに適用される検索属性のリストを取得します。次のパラメータで構成されます。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
groups: リクエストを指定のソース・グループの属性に限定します。明示的に設定しなければ、デフォルトですべてのグループが対象となります。
groupConnector: すべてのグループ間のコネクタ。andは、レスポンスが各グループの属性の共通部分を検索することでソース・グループ・セット内で使用可能な属性であることを示します。orは、レスポンスが各グループの属性のユニオンを検索することでソース・グループ・セット内で使用可能な属性であることを示します。明示的に設定しなければ、デフォルトのorになります。
<message name="getAttributesRequest">
<part name="locale" type="xsd:string"/>
<part name="groups" type="typens:DataGroupArray"/>
<part name="groupConnector" type="xsd:string"/>
</message>
このメッセージは、検索属性の配列を戻します。
<message name="getAttributesResponse">
<part name="return" type="typens:AttributeArray"/>
</message>
このメッセージは、Oracle SESに定義されているすべての検索属性を取得します。次のパラメータで構成されます。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
<message name="getAllAttributesRequest"> <part name="locale" type="xsd:string"/> </message>
このメッセージは、Oracle SESに定義されているすべての検索属性を戻します。
<message name="getAllAttributesResponse">
<part name="return" type="typens:AttributeArray"/>
</message>
このメッセージは、指定された検索属性のLOV項目を取得します。次のパラメータで構成されます。
attribute: リクエストされたLOV(値リスト)の検索属性。
locale: ロケールを表す2文字のコード。 明示的に設定しなければ、デフォルトの英語(en)になります。
<message name="getAttributeLOVRequest"> <part name="attribute" type="typens:Attribute"/> <part name="locale" type="xsd:string"/> </message>
このメッセージは、検索属性のLOV要素の配列を戻します。
<message name="getAttributeLOVResponse"> <part name="return" type="typens:AttributeLOVElementArray"/> </message>
この項では、次の検索ヒット操作について説明します。
このメッセージは、指定されたドキュメントIDと検索文字列について、キャッシュされたバージョンのドキュメントを取得します。検索文字列は、出力内でハイライトされます。次のパラメータで構成されます。
query: 検索文字列
docID: フェッチされるドキュメントのID
fedID: フェデレーテッド・インスタンスのID(ドキュメントのフェッチ元であるフェデレーテッド・インスタンスの追跡に使用)
<message name="getCachedPageRequest">
<part name="query" type="xsd:string"/>
<part name="docID" type="xsd:int"/>
<part name="fedID" type="xsd:string"/>
</message>
このメッセージは、キャッシュされたHTMLページのバイト配列を戻します。
<message name="getCachedPageResponse">
<part name="return" type="xsd:base64Binary"/>
</message>
このメッセージは、指定された検索ヒット(ドキュメント)に関する着信リンクをすべて取得します。次のパラメータで構成されます。
docID: 着信リンクがフェッチされるドキュメントのID。有効なドキュメントIDである必要があり、NULLにすることはできません。
maxNum: リクエストされた着信リンクの最大数。明示的に設定しなければ、デフォルトの25になります。
fedID: フェデレーテッド・インスタンスのID(ドキュメントのフェッチ元であるフェデレーテッド・インスタンスの追跡に使用)
<message name="getInLinksRequest">
<part name="docID" type="xsd:int"/>
<part name="maxNum" type="xsd:int"/>
<part name="fedID" type="xsd:string"/>
</message>
このメッセージは、着信リンクのURL文字列の配列を戻します。
<message name="getInLinksResponse">
<part name="return" type="typens:StringArray"/>
</message>
このメッセージは、指定された検索ヒット(ドキュメント)に関する発信リンクをすべて取得します。次のパラメータで構成されます。
docID: 発信リンクがフェッチされるドキュメントのID。有効なドキュメントIDである必要があり、NULLにすることはできません。
maxNum: リクエストされた発信リンクの最大数。明示的に設定しなければ、デフォルトの25になります。
fedID: フェデレーテッド・インスタンスのID(ドキュメントのフェッチ元であるフェデレーテッド・インスタンスの追跡に使用)
<message name="getOutLinksRequest">
<part name="docID" type="xsd:int"/>
<part name="maxNum" type="xsd:int"/>
<part name="fedID" type="xsd:string"/>
</message>
このメッセージは、発信リンクのURL文字列の配列を戻します。
<message name="getOutLinksResponse">
<part name="return" type="typens:StringArray"/>
</message>
このメッセージは、ユーザーによるクリックを記録します。次のパラメータで構成されます。
queryID: 送信された検索のID。
urlID: ユーザーがクリックしたドキュメントのID。
infosourceID: 情報ソースID。なしの場合は、デフォルト値として–1が使用されます。
position: 結果リストでのドキュメントの位置(ページ上で最初のヒットまたはページ上で9番目のヒットなど)。
fedID: 連携ID。ドキュメントが常駐するフェデレーテッド・インスタンスを指定します。
<message name="logUserClickRequest">
<part name="queryID" type="xsd:int"/>
<part name="urlID" type="xsd:int"/>
<part name="infoSourceID" type="xsd:int"/>
<part name="position" type="xsd:int"/>
<part name="fedID" type="xsd:string"/>
</message>
このメッセージは、クリックされたドキュメントのURLを戻します。
<message name="logUserClickResponse"> <part name="url" type="xsd:string"/> </message>
この項では、次のユーザー・フィードバック操作について説明します。
このメッセージは、Oracle SESでクロールして索引付けできるようにURLを送信します。次のパラメータで構成されます。
url: 次回にクロールできるようにクローラに送信されるURL。有効なURLである必要があり、NULLにすることはできません。
<message name="submitUrlRequest">
<part name="url" type="xsd:string"/>
</message>
このメッセージはステータスを戻します。ステータスは2つの文字列で構成され、第1文字列は送信ステータス(successfulまたはfailed)で、第2文字列は送信ステータスがfailedの場合のエラー・メッセージです。
<message name="submitUrlResponse">
<part name="return" type="typens:Status"/>
</message>
この項では、Oracle Secure Enterprise Search APIで使用される問合せ構文について説明します。
検索条件には、1つのワード、フレーズまたは特殊な検索条件を使用できます。たとえば、検索文字列がoracle secure enterprise searchの場合、この検索文字列にはoracle、secure、enterpriseおよびsearchという4つの検索条件が含まれています。検索文字列がoracle "secure enterprise search"の場合は、oracleおよび"secure enterprise search"という2つの検索条件が含まれています。
大/小文字の異なる検索条件は、同一として扱われます(大/小文字の区別はありません)。たとえば、oracle、Oracle、ORACLEのいずれで検索しても、同じ検索結果が戻されます。
問合せ構文では、次の演算子が定義されます。
プラス[+]: プラス演算子は、直後の検索条件は一致したすべてのドキュメントに存在する必要があることを示します。たとえば、[Oracle +Applications]を検索すると、OracleおよびApplicationsというワードを含むドキュメントのみが検出されます。複数のワードの検索では、最初のトークンを含むすべてのトークンの前に[+]を付けることができます。また、二重引用符(")で囲まれたフレーズの前に[+]を付けることもできます。ただし、[+]と検索する語の間には空白を入れないでください。
マイナス[-]: マイナス演算子は、直後の検索条件は検索結果に含まれるどのドキュメントにも存在できないことを示します。[Oracle -Applications]を検索すると、Applicationsというワードを含まないドキュメントのみが検出されます。複数のワードの検索では、最初のトークン以外のすべてのトークンの前に[-]を付けることができます。1つのワードまたはフレーズのいずれでもかまいませんが、[-]とトークンの間には空白を入れないでください。
アスタリスク[*]: アスタリスクはワイルドカード検索を示します。たとえば、文字列[Ora*]を検索すると、OracleやOratorなど、Oraで始まるすべてのワードを含むドキュメントが検出されます。アスタリスクはワードの途中にも挿入できます。たとえば、文字列[A*e]を検索すると、AppleやApeなどのワードを含むドキュメントが検出されます。
Oracle SESでは、デフォルトですべての検索条件とその条件の関連バリエーションが検索されます。条件を演算子(ANDなど)で結ぶ必要はありません。検索に含まれる条件の順序は、検索結果に影響します。
Oracle SESの問合せ構文でサポートされるフィルタ条件は、「Site」と「File type」のみです。title、author、last modified dateなど、他のフィルタ条件(拡張条件)はサポートされません。検索を他のフィルタ条件で制限する場合は、WebサービスAPIメッセージdoOracleSearch内で指定できます。
Oracle SESでは、複数の特殊な検索条件の使用がサポートされます。これにより、ユーザーまたは検索管理者は、Oracle SESの前にある付加機能にアクセスできます。次に特殊な検索条件を示します。
検索結果から除外する条件の直前にマイナス記号[-]を付けると、検索対象からワードを除外できます。ストップ・ワードは除外されません。
例: oracle -search
否定検索を使用するには、別の肯定検索条件が存在する必要があります。次に例を示します。
-searchは無効な検索です。
oracle -searchは有効な検索です。
引用符で囲むと完全に一致するフレーズを検索できます。この方法でマークしたワードは、すべての結果に入力したとおりに表示されます。
例: "oracle secure enterprise search"
検索する特定のWebサイトはわかっていても、そのサイト内の情報の場所が不明な場合は、特定のWebサイト内でのみ検索します。検索に続けて文字列site: とホスト名を入力します。
例: oracle site:text.us.oracle.com
注意:
ドメイン制限はサポートされません。これは、Oracle SESでは、左側を切り捨てるワイルドカード検索(*.oracle.comなど)がサポートされないためです。
この検索条件に除外演算子(-)を適用すると、Webサイトを検索対象から除外できます。
サイト制限付きの検索条件は、他の検索条件との暗黙的AND条件です。
使用可能なサイト制限は1つのみです。また、検索文字列にサイト包含とサイト除外の両方を使用することはできません。たとえば、次の検索文字列は無効です。
oracle search site:www.oracle.com -site:otn.oracle.com
検索接頭辞filetype: は、直後に指定した拡張子を持つドキュメントのみが含まれるように、戻される結果をフィルタします。filetype: と指定の拡張子の間には空白を挿入できません。
例: oracle filetype:doc
注意:
この検索条件に除外演算子(-)を適用すると、ファイル・タイプを検索対象から除外できます。
指定できるファイル・タイプは1つのみです。doc、htm、html、xml、ps、pdf、txt、rtf、pptおよびxls. doc、html、pdf、txt、rtf、ppt、xlsの各拡張子がサポートされています。
ファイル・タイプ制限付きの検索条件は、他の検索条件との暗黙的AND条件です。
使用可能なファイル・タイプ制限は1つのみです。また、検索文字列にファイル・タイプ包含とファイル・タイプ除外の両方を使用することはできません。たとえば、次の検索文字列は無効です。
oracle search filetype:doc -filetype:pdf
ここでは、Oracle Secure Enterprise SearchのプロキシJavaライブラリを使用して基本検索機能を提供する単純なJSPアプリケーションを示します。
<%@page contentType="text/html; charset=utf-8" %>
<%@page import = "java.util.Vector" %>
<%@page import = "java.net.URL" %>
<%@page import = "java.util.Properties" %>
<%@page import = "java.util.HashMap" %>
<%@page import = "org.apache.soap.Header" %>
<%@page import = "org.apache.soap.rpc.Call" %>
<%@page import = "org.apache.soap.rpc.Parameter" %>
<%@page import = "org.apache.soap.rpc.Response" %>
<%@page import = "org.apache.soap.Fault" %>
<%@page import = "org.apache.soap.SOAPException" %>
<%@page import = "org.apache.soap.Constants" %>
<%@page import = "org.apache.soap.encoding.SOAPMappingRegistry" %>
<%@page import = "org.apache.soap.encoding.soapenc.BeanSerializer" %>
<%@page import = "org.apache.soap.util.xml.QName" %>
<%@page import = "oracle.soap.transport.http.OracleSOAPHTTPConnection" %>
<%@page import = "oracle.soap.encoding.soapenc.EncUtils" %>
<%@page import = "oracle.search.query.webservice.client.*" %>
<%
//
// Get the search term entered by the user
//
String searchTerm = request.getParameter("searchTerm");
if (searchTerm == null) searchTerm = "";
//
// Define the result element array.
//
ResultElement[] resElemArray = null; // ResultElement is one of the proxy Java
classes
int estimatedHitCount = 0;
if (searchTerm != null && !"".equals(searchTerm))
{
//
// Create the Oracle SES Web Services client stub
//
OracleSearchService stub = new OracleSearchService();
//
// Set the Oracle SES Web Services URL.
// The URL is http://<host>:<port>/search/query/OracleSearch
//
stub.setSoapURL("http://staca19:7777/search/query/OracleSearch");
//
// Get the search result by calling OracleSearchService.doOracleSearch()
//
OracleSearchResult result = stub.doOracleSearch(searchTerm,
new Integer(1),
new Integer(10),
Boolean.TRUE,
Boolean.TRUE,
null,
"en",
"en",
Boolean.TRUE,
null,
null,
null);
//
// Get the estimated hit count by calling
estimatedHitCount = result.getEstimatedHitCount().intValue();
// Get the search results
resElemArray = result.getResultElements();
}
%>
<HTML>
<HEAD>
<TITLE>Oracle SES Web Services Demo </TITLE>
</HEAD>
<BODY>
<FORM name="searchBox" method="post" action="./DemoWS.jsp">
<INPUT id="inputMain" type="text" size="40" name="searchTerm" value="<%=searchTerm%>">
<INPUT type="hidden" name="searchTerm" value="<%= searchTerm %>">
<INPUT type="submit" name="action" value="Search">
</FORM>
<BR><BR><BR>
<%
//
// Render the search results
//
if (resElemArray == null || resElemArray.length == 0)
{
%>
<H3> There are no matches for the search term </H3>
<%
}
else
{
%>
<H3> There are about <%=estimatedHitCount%> matches </H3>
<%
for (int i=0; i<resElemArray.length; i++)
{
String title = resElemArray[i].getTitle();
if (title == null) title = "Untitled Document";
%>
<P>
<B><A HREF="<%=resElemArray[i].getUrl()%>"><%=title%></A> </B>
<BR>
<%=resElemArray[i].getSnippet()%>
<BR>
</P>
<%
}
}
%>
</BODY>
</HTML>
Oracle SESには、クライアント・サイドJavaプロキシも用意されており、WebサービスのSOAPメッセージをマーシャリングして解析できます。クライアント・アプリケーションでは、ライブラリを使用してOracle SES Webサービスにアクセスできます。
プロキシ・ライブラリには次のJavaクラスが含まれており、対応するWebサービスのデータ型およびメッセージにマップされています。
oracle.search.query.webservice.client.Attribute
oracle.search.query.webservice.client.AttributeLOVElement
oracle.search.query.webservice.client.ClusterAttribute
oracle.search.query.webservice.client.ClusterConfig
oracle.search.query.webservice.client.ClusterTree
oracle.search.query.webservice.client.CustomAttribute
oracle.search.query.webservice.client.DataGroup
oracle.search.query.webservice.client.Filter
oracle.search.query.webservice.client.GroupAttribute
oracle.search.query.webservice.client.GroupingResult
oracle.search.query.webservice.client.Language
oracle.search.query.webservice.client.Node
oracle.search.query.webservice.client.OracleSearchResult
oracle.search.query.webservice.client.OracleSearchService
oracle.search.query.webservice.client.ResultElement
oracle.search.query.webservice.client.SCElement
oracle.search.query.webservice.client.SessionContextElement
oracle.search.query.webservice.client.SortAttribute
oracle.search.query.webservice.client.Status
oracle.search.query.webservice.client.SuggestedLink
Oracle SESのクライアント・サイドJavaプロキシ・ライブラリを使用してクライアント・アプリケーションをコンパイルし、実行するには、次のファイルをJavaのCLASSPATHに含める必要があります。これらのファイルは、Oracle SESサーバー・ファイル・ディレクトリから取得できます。
$ORACLE_HOME/search/lib/search_client.jar(プロキシJavaライブラリ)
$ORACLE_HOME/oc4j/webservices/lib/soap.jar
$ORACLE_HOME/oc4j/j2ee/home/lib/http_client.jar
$ORACLE_HOME/lib/xmlparserv2.jar
$ORACLE_HOME/lib/mail.jar
$ORACLE_HOME/lib/activation.jar
次のWebサービス・メッセージと操作は、Oracle SES内部でのみ使用されます。将来のリリースでは、変更または削除されることがあります。
setSearchUserRequest、setSearchUserResponse、setSearchUser
管理WebサービスAPIには、次の管理操作が含まれています。
表9-3 管理Webサービスの操作
| クラス | 説明 |
|---|---|
|
|
推定索引フラグメンテーション・レベルを整数の率で戻します。 |
|
|
すべてのクローラ・スケジュールに関する情報を戻します。
|
|
|
クローラ・スケジュールの現在のステータスが戻されます。
|
|
|
セッションを認証して作成します。
|
|
|
現在のセッションをログアウトしてクローズします。 |
|
|
検索索引を最適化します。 |
|
|
指定したクローラ・スケジュールを開始します。
|
|
|
指定したクローラ・スケジュールを停止します。
|
Oracle SESには、クライアント・サイドJavaプロキシが用意されており、WebサービスのSOAPメッセージをマーシャリングして解析できます。クライアント・アプリケーションでは、ライブラリを使用してOracle SES管理Webサービスにアクセスできます。
プロキシ・ライブラリには次のJavaクラスが含まれており、対応するWebサービスのデータ型およびメッセージにマップされています。
oracle.search.admin.ws.client.Schedule
oracle.search.admin.ws.client.ScheduleStatus
oracle.search.admin.ws.client.SearchAdminClient
Oracle SESのクライアント・サイドJavaプロキシ・スタブを使用してクライアント・アプリケーションをコンパイルし、実行するには、次のファイルをJavaのCLASSPATHに含める必要があります。
$ORACLE_HOME/search/lib/search_admin_wsclient.jar
wsclient_extended.jar
wsclient_extended.jarファイルは、Oracle Technology Networkからの個別ダウンロードとして使用可能です。
http://www.oracle.com/technology/software/products/ias/htdocs/utilsoft.html
管理Webサービス・リクエストの結果としてエラーが発生すると、SOAPフォールトが戻されます。提供されたJavaプロキシ・クライアントを使用すると、javax.xml.rpc.soap.SOAPFaultExceptionがスローされます。コンピュータ解析可能なエラー・コードにアクセスするには、SOAPFaultException.getFaultCode()メソッドをコールします。
次の表に、管理Webサービスのエラー・コードを示します。
Oracle Secure Enterprise Search Java SDKには、次のAPIが用意されています。
|
関連項目: セキュア・クローラの構築方法の詳細は、次のWebサイトにあるホワイト・ペーパー「Building Custom Crawlers」を参照してください。
|
クローラ・プラグインを実装すると、独自のドキュメント・リポジトリをクロールして索引付けできます。Oracle SESでは、独自リポジトリをユーザー定義ソースと呼びます。クローラからソースへのアクセスを可能にするモジュールを、クローラ・プラグイン(またはコネクタ)と呼びます。
プラグインによりユーザー定義ソースからドキュメントURLと関連メタデータが収集され、この情報がOracle SESクローラに戻されます。クローラは、収集時に各URLの処理を開始します。クローラ・プラグインは、Oracle SESクローラ・プラグインAPIを使用してJavaで実装する必要があります。クローラ・プラグインは、$ORACLE_HOME/search/lib/pluginsディレクトリに置かれます。
クローラ・プラグインを構築する基本手順は、次のとおりです。
プラグインのjarファイルをコンパイルして作成します。
最初に、プラグインのJavaソース・コードをクラス・ファイルにコンパイルし、$ORACLE_HOME/search/lib/plugins/ディレクトリにあるjarファイルに配置する必要があります。コンパイルに必要なライブラリは、$ORACLE_HOME/search/lib/search_sdk.jarです。
ソース・タイプを作成します。
クローラ・プラグインのソースを作成する前に、そのソースのソース・タイプを作成する必要があります。Oracle Secure Enterprise Search管理ツールから、グローバル設定 - ソース・タイプ・ページに移動し、(前のステップで作成した)Javaクラス名とjarファイル名を指定します。
ソースを作成します。
ホーム - ソース・ページで、作成したソース・タイプからソースを作成します。作成したソース・タイプのパラメータも定義する必要があります。
たとえば、ファイルのクローラ・プラグインでは、Linuxボックスの/scratch/testをクロールするとします。この場合は、シードURLをfile://localhost/scratch/testのように指定します。
クローラ・プラグインを実行します。
ホーム - スケジュール・ページから、クローラのスケジュールを開始します。
この項のトピックは、次のとおりです。
|
関連項目: Oracle SES開発者チュートリアルの、クローラ・プラグインAPIの使用ガイド
|
次のダイアグラムに、クローラ・プラグインのアーキテクチャを示します。

クローラ・プラグインを作成するには、クローラ・プラグインAPIの2つのインタフェース(CrawlerPluginManagerおよびCrawlerPlugin)を実装する必要があります。クローラ・プラグインの機能は、次のとおりです。
ドキュメントのメタデータをドキュメント属性形式で提供します。
ドキュメントが保護されている場合は、アクセス制御リスト(ACL)情報を提供します。
各ドキュメント属性をエンド・ユーザーが使用する共通属性名にマップします。
必要に応じて、指定のタイムスタンプ以降に変更があったURLのリストを提供します。
ドキュメントのコンテンツをJava Reader形式で提供します。つまり、プラグインはドキュメントをフェッチする必要があります。
属性のみのドキュメント、つまりメタデータを含んでいてもコンテンツのないドキュメントをクローラに送信できます。
ドキュメント属性またはメタデータでは、ドキュメント・プロパティが記述されます。アプリケーションに無関係な属性も使用できます。クローラ・プラグインの作成者は、どのドキュメント属性を抽出して保存するかを決定する必要があります。収集された属性のリストが構成可能になるようにプラグインを作成することもできます。Oracle SESでは、プラグインから戻された属性が自動的に登録されます。プラグインは、ドキュメントについて戻す属性を決定できます。
プラグインに必要な他のすべてのJavaクラスを、プラグインのjarファイルに含める必要があります。(プラグインに必要な追加jarファイルのパスは、プラグインjarファイルに含まれるMANIFEST.MFファイルのClass-Pathに追加できます。)これは、Oracle SESではプラグインのjarファイルが自動的にクローラのJava CLASSPATHに追加され、ユーザーは管理インタフェースから他のCLASSPATHを追加できないためです。
プラグイン・コードが特定のライブラリ・ファイル(Windowsでは.dllファイル、UNIXでは.soファイルなど)にも依存する場合、ライブラリは、$ORACLE_HOME/libディレクトリまたは$ORACLE_HOME/search/lib/pluginsディレクトリの下に置く必要があります。Javaライブラリ・パスは、クローラによってこれらの場所に明示的に設定されます。
この項では、クローラ・プラグインの各側面について説明します。
ソース登録が自動化されます。ソース・タイプを定義した後、次のようにそのインスタンスを定義できます。
ソース名
ソースの説明(4000バイト以内)
ソース・タイプID
デフォルト言語: デフォルトはen(英語)
次のようなパラメータ値
seed - http://www.oracle.com depth – 8
属性名と属性データ型を指定して、Oracle SESに新規の属性を追加できます。データ型は、string、numberまたはdateです。プラグインから戻される属性は、未定義であれば自動的に登録されます。
クローラ・プラグインには、次の要件があります。
Javaで実装すること。
Oracle SESにより定義されているJavaプラグインAPIをサポートすること。
URLの属性とプロパティを戻すこと。
Oracle SESで保持するドキュメント属性を決定すること。Oracle SESで定義されていない属性は自動的に登録されます。
属性をソース・プロパティにマップできること。たとえば、IDという属性がドキュメントの一意IDであれば、プラグインは(document_key, 4)を戻す必要があります。IDという属性はプロパティdocument_keyにマップされており、このドキュメントの場合の値は4です。
属性LOVが使用可能な場合は、リクエスト時に属性LOVを戻すこと。
クローラ・プラグインAPIは、クローラ・プラグインの実装に使用されるクラスとインタフェースのコレクションです。
表9-5 クローラ・プラグイン・インタフェースとクラス
| インタフェース/クラス | 説明 |
|---|---|
|
|
このインタフェースは、クローラ・プラグインでOracle SESクローラとの統合に使用されます。 Oracle SESクローラはプラグイン・マネージャ・クラスをロードし、プラグイン・マネージャAPIを起動してクローラ・プラグイン・インスタンスを取得します。各プラグイン・インスタンスは、スレッド実行コンテキスト内で実行されます。 |
|
|
このインタフェースは、クローラ・プラグイン・インスタンスの生成に使用されます。 ユーザー定義ソース・タイプを定義できるように、管理ページで自動プラグイン登録に使用する一般的なプラグイン情報を提供します。
|
|
|
このインタフェースは、クローラ・プラグインでクロール関連タスクの実行に使用されます。プラグインの |
|
|
このインタフェースはOracle SESクローラにより実装され、 このインタフェースは、クローラ・プラグインで現在クロールされているドキュメント・セットの管理に使用されます。 |
|
|
このインタフェースは、クローラ・プラグインでドキュメントのアクセス制御リスト(ACL)情報の送信に使用されます。 |
|
|
このインタフェースは、クローラ・プラグインでドキュメント情報の送信または取得に使用されます。 |
|
|
このインタフェースは、処理と索引付けのためにドキュメントの属性とプロパティを保持します。 このインタフェースは、クローラ・プラグインでURL関連データをクローラに送信するために使用されます。 |
|
|
このインタフェースは、ドキュメント・サービス・プラグインでドキュメント属性またはドキュメント・コンテンツ(あるいはその両方)をクローラに送信するために使用されます。 |
|
|
このインタフェースは、ドキュメント・サービス・プラグインの登録に使用されます。また、クローラでDocumentServiceオブジェクトを作成するために使用されます。 |
|
|
このインタフェースは、プラグインにOracle SESサービスと実装済インタフェース・オブジェクトを提供します。Oracle SESクローラにより実装され、プラグイン・マネージャの初期化を介して使用可能になります。 このインタフェースは、クローラ・プラグインでOracle SESインタフェース・オブジェクトの取得に使用されます。 |
|
Logger |
このインタフェースは、クローラ・プラグインでメッセージをクローラ・ログ・ファイルに出力するために使用されます。 |
|
LovInfo |
このインタフェースは、クローラ・プラグインとソース・プラグインの両方で、ソースに対する属性の値リスト(LOV)の設定と取得に使用されます。 |
|
|
クローラ・プラグイン用のこのインタフェースは、ソース・パラメータの値を読み取ります。 |
|
|
このインタフェースはOracle SESクローラにより実装され、 このインタフェースは、クローラ・プラグインでURL関連データをクローラに送信するために使用されます。 |
|
|
このクラスは、パラメータの一般的なプロパティを記述します。 |
|
|
このクラスは、クローラのレスポンスを送信するための重大度コードを提供します。 |
|
|
このクラスでは、データ・ソース・プラグイン固有のエラーに関する情報がカプセル化されています。 |
|
|
このクラスでは、プラグイン・リクエストの処理エラーに関する情報がカプセル化されています。 |
|
|
クローラ・マネージャ・クラスは、属性ベースのセキュリティを使用するクローラを使用するために、このインタフェースを実装する必要があります。 |
ドキュメント・サービスAPIは、クローラ・プラグインAPIに付属しています。このAPIは、ドキュメント・サービス・プラグインの登録に使用されます。ドキュメント・サービスは、ドキュメントからの入力を受け入れ、いっくつかの操作を実行します。たとえば、監査用のドキュメント・サービスやカスタム・メタタグを表示するドキュメント・サービスを作成できます。
|
注意: Secure Enterprise Searchドキュメント・サマライザは、検索結果クラスタリング用のドキュメント・サービスであり、デフォルトで組み込まれています。このドキュメント・サービスは、ドキュメントの最も重要なフレーズ(必要な場合はセンテンスも)を抽出します。 |
ドキュメント・サービス・プラグイン(ドキュメント・サービス・インスタンス)は、ドキュメント・サービスAPIを実装するJavaクラスです。ドキュメント・サービス・プラグインは、ドキュメント・コンテンツと属性を受け入れ、更新済のドキュメント・コンテンツと新規属性を提供します。タイトル、作成者および説明の属性値は、常に検索ヒット表示で使用されます。ドキュメント・サービス・プラグインでは、ドキュメント言語を設定したり、入力ドキュメント・コンテンツを更新済またはフィルタ済ドキュメントに置換することもできます。
ドキュメント・サービス・パイプラインは、リストの順序で起動されるドキュメント・サービス・インスタンスのリストです。同じインスタンスを異なるパイプラインに割り当てることができますが、同じインスタンスを同じパイプラインに2回割り当てることはできません。複数のパイプラインを定義できます。たとえば、あるパイプラインをグローバルで使用し、他のパイプラインは特定のソースで使用できます。すべてのインスタンスをパイプラインに含める必要はありません。
管理ツールのグローバル設定 - クローラ構成ページで、すべてのソースに対するグローバル・パイプラインを設定できます。各ソースについては、ホーム - ソース - クロール・パラメータ・ページで、各ソースが特定のパイプラインを使用するように設定できます。ローカル・サービス・パイプラインが定義されていないかぎり、グローバル・パイプライン(有効にした場合)がすべてのソースで使用されます。
DocumentServiceManagerは、ドキュメント・サービス・プラグインを登録するためにOracle SES管理ツールで使用されるインタフェースです。ドキュメント・サービスを作成する場合は、ドキュメント・サービス・マネージャのタイプを選択します。ドキュメント・サービス・マネージャは、新規に作成することも、すでに作成されているドキュメント・サービス・マネージャのリストから選択することもできます。
グローバル設定 - ドキュメント・サービス・ページで、ドキュメント・サービス・マネージャ、インスタンスおよびパイプラインを作成できます。
ドキュメント・サービスが起動されている場合、ドキュメント解析、属性抽出および言語検出はすでに実行されています。クローラは、ドキュメント・サービス・プラグインで加えられた変更のみを処理し、そのドキュメントは索引付けのためにキャッシュされます。
ソースのドキュメント・サービス・パイプラインを追加または変更した場合は、ソースの再クロールを強制的に実行する必要があります。
ドキュメント・サービス・プラグインを作成および使用する手順は、次のとおりです。
DocumentServiceインタフェースのinit、closeおよびprocessメソッドを実装する新規のJavaファイル(DocumentSummarizer.javaなど)を作成します。
DocumentServiceManagerインタフェースを実装する新規のJavaファイル(DocumentSummarizerManager.javaなど)を作成します。
関連するすべてのJavaファイルをクラス・ファイルにコンパイルします。次に例を示します。
$ORACLE_HOME/jdk/bin/javac -classpath $ORACLE_HOME/search/lib/search_sdk.jar DocumentSummarizer.java
すべてのクラス・ファイルを$ORACLE_HOME/search/lib/plugins/docディレクトリにあるjarファイルにパッケージします。次に例を示します。
$ORACLE_HOME/jdk/bin/jar cv0f $ORACLE_HOME/search/lib/plugins/doc/extractor/extractor.jar DocumentSummarizer.class DocumentSummarizerManager.class
|
注意: ドキュメント・サービス・プラグインのjarファイルは、 $ORACLE_HOME/search/lib/plugins/docディレクトリの下にデプロイする必要があります。 |
グローバル設定 - ドキュメント・サービス・ページで、jarファイルを新規ドキュメント・サービス・プラグインとして登録します。この例の場合、jarファイル名はextractor/extractor.jarで、サービス・プラグイン・マネージャ・クラス名はoracle.search.plugin.doc.extractor.DocumentSummarizerManagerです。
登録すると、このドキュメント・サービス・プラグインからインスタンスを作成できます。
URLリライタは、Oracle SES UrlRewriter Javaインタフェースを実装するユーザー提供のJavaモジュールです。URLリライタがアクティブ化されている場合は、抽出されたURLリンクをURLキューへの挿入前にフィルタしてリライトするために、クローラで使用されます。
|
注意: URLリライタAPIは、クローラ・プラグインSDKに付属しています。URLリライタAPIはWebソースに使用します。 |
URLキューから次のURLを取得します。(Webクロールは、キューが空になると停止します。)
URLのコンテンツをフェッチします。
コンテンツからURLリンクを抽出します。
URLキューにリンクを挿入します。
生成された新規URLリンクは、既存のすべての境界ルールに従います。
抽出されたURLリンクに対して、次の2つの操作を実行できます。
フィルタ: 不要なURLリンクを削除します。
リライト: URLリンクを変換します。
ユーザーは、Oracle SESクローラでサポートされている次のメカニズムを使用して、キューに挿入可能なURLリンクのタイプを制御します。
ホスト包含および除外ルール。たとえば、www.example.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のかわりにクロールに使用されます。
通常のWebクロールで使用できるのは、表示URLのみです。ただし、クローラが外部用には表示URLを保持したまま、内部サイトのクロールにアクセスURLを必要とする場合があります。内部URLごとに、外部のミラー化URLが存在します。
次に例を示します。
http://www.example-qa.us.com:9393/index.html http://www.example.com/index.html
URLリンクhttp://www.example-qa.us.com:9393/index.htmlが抽出されると、キューに挿入される前にクローラにより新規の表示URLと新規のアクセスURLが生成されます。
アクセスURLは、次のようになります。
http://www.example-qa.us.com:9393/index.html
表示URLは、次のようになります。
http://www.example.com/index.html
抽出されたURLリンクはリライトされ、クローラではエンド・ユーザーに公開せずに内部Webサイトがクロールされます。
もう1つの例が、クローラが選択したリンクが動的に生成され、すべてが同じページを指していても(参照側ページや他のファクタに応じて)異なるリンクを使用できる場合です。次に例を示します。
http://compete3.example.com/rt/rt.wwv_media.show?p_type=text&p_id=4424&p_currcornerid=281&p_textid=4423&p_language=us http://compete3.example.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リンクとは異なる場合があります。
UrlRewriterインタフェースのopen、closeおよびrewriteメソッドを実装する新規のJavaファイルを作成します。
リライタJavaファイルをクラス・ファイルにコンパイルします。次に例を示します。
$ORACLE_HOME/jdk/bin/javac -classpath $ORACLE_HOME/search/lib/search_sdk.jar SampleRewriter.java
リライタ・クラス・ファイルを$ORACLE_HOME/search/lib/plugins/ディレクトリにあるjarファイルにパッケージします。次に例を示します。
$ORACLE_HOME/jdk/bin/jar cv0f $ORACLE_HOME/search/lib/plugins/sample.jar SampleRewriter.class
既存のWebソースの管理ツールのホーム - ソース - クロール・パラメータ・ページで、UrlRewriterオプションを有効にし、リライタ・クラス名とjarファイル名(SampleRewriterおよびsample.jarなど)を指定します。
対応するスケジュールを起動して、ターゲットWebソースをクロールします。クローラ・ログ・ファイルで、「URLリライタ"SampleRewriter"のロード」というメッセージでURLリライタの使用を確認します。
|
注意: URLリライトを使用できるのは、Webソースの場合のみです。 |
Oracle SESには、独自のドキュメント・リポジトリをクロールして索引付けできる(クローラ・プラグインAPI)拡張可能なクローラ・プラグイン・フレームワークに加えて、拡張可能な認証および認可フレームワークが含まれています。このフレームワークにより、アイデンティティ管理システムを使用してユーザーを認可できます(アイデンティティ・プラグインAPI)。また、各ソースに独自のセキュリティ・モデルを定義できます(認可プラグインAPI)。
アイデンティティ・プラグインAPIはアイデンティティ管理システムと通信して、ログイン時にユーザー名とパスワードを使用してユーザーを認証します。また、指定したユーザーのグループ(またはロール)のリストも提供します。
アイデンティティ・プラグイン・マネージャは、初期化パラメータを管理し、IdentityPluginオブジェクトを戻します。
アイデンティティ・プラグインを追加するには、グローバル設定 - アイデンティティ管理設定ページで新規アイデンティティ・プラグインの登録をクリックし、アイデンティティ・プラグイン・マネージャのクラス名とjarファイル名を入力します。
ユーザー/グループ・モデルに適合しない認可要件を持つソースについては、認可プラグインによって、さらに柔軟なセキュリティ・モデルが提供されます(認証はアイデンティティ・プラグインで処理されます)。
認可プラグインを使用すると、クローラ・プラグインでは、ドキュメント属性と同様のセキュリティ属性を追加できます。認可プラグインはログイン時に起動され、問合せ文字列に対してセキュリティ・フィルタを構築します。このセキュリティ・フィルタは、各ドキュメントのセキュリティ属性の値に対して適用されます。 セキュリティ属性の値がセキュリティ・フィルタと一致したドキュメントのみがユーザーに戻されます。(すべてのセキュリティ属性は文字列値です)。
認可プラグインには、次のコンポーネントのいずれかまたは両方を含めることができます。
QueryFilterPlugin: 現行ユーザーのセキュリティ属性のリストを取得します。ユーザーがメンバーであるグループ(またはセキュリティ・ロール)のリストを戻すことができます。たとえば、respが職責に対するGRANTセキュリティ属性で、User1がログインした場合、QueryFilterPlugin.getSecurityValues("resp")はUser1の職責に対応する値の配列を戻します。これらの値を使用して、User1とその職責に対して認可されたドキュメントを戻すためのフィルタを構築できます。
ResultFilterPlugin: 問合せ時認可(QTA)を実装します。ヒットリストが作成されると、Oracle SESは結果フィルタ・プラグインをコールして、ユーザーが各ドキュメントの参照を認可されているかどうかをチェックします。ヒットリストにリストされるのは、ユーザーが参照を許可されているドキュメントのみです。結果フィルタは、唯一のセキュリティ・デバイスとして使用したり、他のセキュリティと組み合せて使用できます。また、結果フィルタを使用してタイトルまたは表示URLを変更できます。
|
注意: QTAを実装する方法として ResultFilterをお薦めします(QueryTimeFilterではなく)。 |
ユーザー定義セキュリティ・モデルを使用すると、Oracle SESでは、管理者が新規のユーザー定義ソースを定義する前に認可ページが表示されます。UserDefinedSecurityModelインタフェースによって、AuthorizationManagerインタフェースを実装するクラスの名前、および特定ユーザーに対するセキュリティ・フィルタの構築に使用するセキュリティ属性の名前とタイプ(GRANTまたはDENY)が戻されます。
AuthorizationManagerプラグインのクラス名またはjarファイル名を変更する必要がある場合は、変更を許可するためにそのソースのセキュリティをオフにする必要があります。ACL設定を「アクセス制御リストを使用しない」に変更して適用すると、AuthorizationManagerの詳細を編集できます。警告: セキュリティをオフにしている間、ユーザーは影響を受けたソースのドキュメントにアクセスできます。さらに、新規のAuthorizationManagerは、以前と同じセキュリティ属性モデルを共有する必要があります。
問合せ時認可により、Oracle SES管理者は、保護対象のソースに属しているOracle SESリポジトリからフェッチされる各ドキュメントを検索時に検証するソースに、Javaクラスを関連付けることができます。この結果のフィルタ・クラスによりアクセス権を動的にチェックし、現行の検索ユーザーが各ドキュメントを参照するための資格証明を持っていることを確認できます。
この認可モデルは、セルフ・サービスやフェデレーテッド・ソースを除くすべてのソースに適用できます。また、ソースに対するアクセス制御の単一プロバイダとして機能するのみでなく、ポストフィルタとしても使用できます。たとえば、ソースはより汎用的なACLでスタンプする一方、問合せ時認可を使用して結果を微調整できます。
問合せ時認可の特性は、次のとおりです。
より静的なACLスタンプに比べると検索時に動的なアクセス制御が可能です。
検索ユーザーに戻されるドキュメントをフィルタします。
検索ユーザーがフォルダを参照可能かどうかを決定する参照機能を制御します。
必要に応じてソース全体を結果からプルーニングし、各ドキュメントを個別にフィルタすることによるパフォーマンス・コストを低減できます。
セルフ・サービスおよびフェデレーテッド・ソースを除くすべてのソース・タイプに適用可能です。
結果フィルタを使用して、検索ユーザーに戻された結果のタイトルまたは表示URLを変更できます。
問合せ時フィルタリングは、ResultFilterPluginインタフェースのクラス実装により処理されます。
ドキュメント・アクセスのフィルタリングは、ResultFilterPluginインタフェースのfilterDocumentsメソッドにより処理されます。最も一般的なフィルタリング状況は、検索リクエストで発生します。この状況では、結果リストからのドキュメントのバッチを指定して、このメソッドがコールされます。検索ユーザーに戻される結果からすべてまたは一部のドキュメントが削除されるか、まったく削除されないかは、このメソッドから戻される値に基づいて決定されます。
個別ドキュメントへのアクセスも制御されます。たとえば、ドキュメントのキャッシュ・コピーを表示したり、インリンクまたはアウトリンクにアクセスするには、filterDocumentsをコールして検索ユーザーの認可を判別する必要があります。
ResultFilterPlugin実装は、参照アプリケーション内のフォルダへのアクセスと可視性の制御も受け持ちます。フォルダが問合せ時フィルタで保護されたソースに属している場合、参照ページではフォルダ名の横にドキュメント・カウントがリストされません。かわりに、フォルダには「すべてを表示」リンクが表示されます。
パフォーマンス上の理由で、参照ページに表示される問合せ時フィルタリング済フォルダごとに、現行の検索ユーザーが参照可能なドキュメント数を正確に判別するには、コストがかかりすぎる場合があります。このタスクでは、各フォルダで使用可能なドキュメントの合計数を計算するために、各フォルダの各ドキュメントをフィルタで処理する必要があります。このように煩雑で時間のかかる操作を回避するために、ドキュメント・カウントは使用されません。かわりに、フォルダを参照できるかどうかは問合せ時フィルタにより明示的に決定されます。
フォルダは、filterBrowseFoldersメソッドの結果に基づいて参照ページに表示されるか、非表示になります。この結果により、フォルダに含まれるドキュメントが表示される単一フォルダ参照ページへのアクセスも制御されます。
特定のソースについてフォルダ名のセキュリティが重要でなければ、filterBrowseFoldersメソッドでは、プロンプトなしですべてのフォルダについて参照アプリケーションでの参照を認可できます。フォルダの選択後も、ドキュメント・リストはfilterDocumentsメソッドを介してフィルタされます。フォルダ名が機密情報を示している場合は、この方法を使用しないでください。
セキュリティがきわめて重要な場合は、すべてのフォルダを参照できないように非表示にするのが最も容易な方法です。ソースからのドキュメントは、引き続き「基本検索」および「拡張検索」ボックスでの検索問合せに使用できますが、ユーザーは検索アプリケーションの参照ページでソースを参照できなくなります。
フォルダのフィルタリングには、次の制限事項があります。
filterBrowseFoldersメソッドでは、サブフォルダへのアクセスが暗黙的に制限されることはありません。たとえば、フォルダ/Miscellaneous/www.example.com/privateが検索ユーザーに対して非表示に設定されていても、/Miscellaneous/www.example.com/private/a/bなどのサブフォルダは、このメソッドにより明示的にも除外されていなければ、そのユーザーが参照できます。ユーザーがブックマークまたは外部リンクをたどって参照アプリケーションで認可されているサブフォルダに直接アクセスすると、このサブフォルダを参照できます。
このメソッドは、参照アプリケーション外部の機能には影響しません。これは、汎用的なフォルダ・プルーニング・メソッドではありません。参照アプリケーション外部での検索問合せとドキュメントの取出しに影響するのは、filterDocumentsおよびpruneSourceメソッドのみです。
ResultFilterPluginインタフェースは、ソース・レベルでアクセス権限を判別する機能を提供します。この判別は、pruneSourceメソッドへのコールを介して実行されます。フィルタリング対象となるドキュメント数やフォルダ数が多い場合は、このメソッドをコールできます。特定のユーザーについてソース全体を認可したり認可を取り消すことで、各ドキュメントを個別にフィルタするよりもパフォーマンスが大幅に向上することがあります。
ResultFilterPluginの実装では、このメソッドにドキュメントまたはフォルダへのアクセス保護を依存しないでください。このメソッドは、厳密には最適化機能です。特定の検索リクエストまたはドキュメント・アクセスについて起動されるという保証はありません。たとえば、単一ドキュメントに対する認可の実行時に、Oracle SESでは、このメソッドをコールせずにfilterDocumentsメソッドを直接コールできます。したがって、プルーニングなしで完全なセキュリティを提供するには、filterDocumentsメソッドとfilterBrowseFoldersメソッドを実装する必要があります。
問合せ時フィルタでは、使用可能な任意の基準に基づいて、ソースおよびドキュメントに対する検索ユーザーのアクセス権限を定義できます。たとえば、時刻に応じてソースへのアクセスを拒否するフィルタを記述できます。
ただし、ほとんどの場合、その検索リクエストの認証済ユーザーに基づいてフィルタにより制限が適用されます。リクエストに関するOracle SES認証済ユーザー名は、RequestInfoオブジェクトに含まれます。このユーザー名の値にアクセスする手順は、リクエストの発信元がJSP検索アプリケーションであるかOracle SES問合せWebサービス・インタフェースであるかに応じて異なります。どちらのタイプのリクエストでも、認証済ユーザー名へのアクセスに使用される鍵は、文字列値AUTH_USERです。
|
注意: ユーザー名は大/小文字を区別しません。 |
ResultFilterPlugin.getCurrentUserNameメソッドの次のサンプル実装は、JSPまたはWebサービス・リクエストから現行の認証済ユーザーを取得する方法を示しています。
public String getCurrentUserName( RequestInfo req )
throws PluginException
{
HttpServletRequest servReq = req.getHttpRequest();
Map sessCtx = req.getSessionContext();
String user = null;
if( servReq != null )
{
HttpSession session = servReq.getSession();
if( session != null )
user = ( String ) session.getAttribute( "AUTH_USER" );
}
else if( sessCtx != null )
{
// Web Service request
user = ( String ) sessCtx.get( "AUTH_USER" );
}
if( user == null )
user = "unknown";
return user;
}
oracle.search.sdkパッケージには、問合せ時認可APIのインタフェースと例外がすべて含まれています。
問合せ時認可フィルタを記述するには、ResultFilterPluginインタフェースを実装します。このインタフェース内のメソッドは、PluginExceptionのインスタンスをスローできます。
RequestInfo、DocumentInfoおよびFolderInfoインタフェースを実装するオブジェクトはフィルタリング用の引数として渡されますが、これらのインタフェースをフィルタ作成者が実装する必要はありません。
このAPIには、次のインタフェースと例外が含まれています。
表9-6 問合せ時認可のインタフェースおよび例外
| インタフェース/例外 | 説明 |
|---|---|
|
|
このインタフェースは、検索時に検索結果をフィルタしてドキュメント情報にアクセスします。 このインタフェースを実装するオブジェクトがソースに割り当てられている場合は、そのソースに属している検索結果やドキュメントの他の取得は、このフィルタを通過してからエンド・ユーザーに表示されます。 |
|
|
この例外は、失敗が発生したことを示すために |
|
|
このインタフェースは、ドキュメントを除外するために |
|
|
このインタフェースは、フォルダの参照を制御するために |
|
|
このインタフェースは、ドキュメント、フォルダまたはソース全体を除外するために |
ResultFilterPluginインタフェースを実装するクラスは、実行中のOracle SES検索アプリケーションのライフタイム中は存続するように設計する必要があります。通常は、ResultFilterPluginの単一インスタンスにより様々な検索エンド・ユーザーからの複数のコンカレント要求が処理されます。したがって、このクラスのfilterDocuments、pruneSource、filterBrowseFoldersおよびgetCurrentUserNameメソッドは、リエントラントかつスレッド・セーフである必要があります。
問合せ時フィルタ・クラスをコンパイルするには、Java CLASSPATHに次のファイルを2つ以上含める必要があります。これらのファイルは、Oracle SESサーバー・ディレクトリにあります。
$ORACLE_HOME/search/lib/search_query.jar
$ORACLE_HOME/lib/servlet.jar
ResultFilterPluginクラス(複数可)とすべての関連Javaクラスを含むjarファイルを1つ作成することをお薦めします。このjarファイルは、Oracle SESサーバーでアクセスできる安全な場所に置く必要があります。このjarファイルが危険にさらされると、検索サーバーにおけるドキュメント・アクセスのセキュリティも危険にさらされる可能性があります。
問合せ時フィルタには、作成したjarファイルに含まれておらずOracle SESのCLASSPATHにもない、他のクラスまたはjarファイルを必要とすることがあります。その場合は、必要なファイルをJARファイル・マニフェストのClass-Path属性に追加する必要があります。このマニフェスト・ファイルを、作成するjarファイルに含めてください。
Oracle SESでは、実行時にResultFilterPluginで使用されるクラスがみつからない場合、ログ・ファイルにエラー・メッセージが書き込まれ、そのソースからの全ドキュメントは処理中の検索リクエストについて除外されます。