ヘッダーをスキップ
Oracle Secure Enterprise Search管理者ガイド
10g リリース1(10.1.8.1)
E05386-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

7 Oracle Secure Enterprise Search API

この章では、Oracle Secure Enterprise Search(SES)のAPIおよび関連情報について説明します。この章のトピックは、次のとおりです。


注意:

この章で説明するAPIは、Oracle SESのみでサポートされます。


関連項目:

『Oracle Secure Enterprise Search Java API Reference』

Oracle Secure Enterprise Search APIの概要

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が用意されています。

クローラ・プラグインAPI

Oracle SESには拡張可能なクローラ・プラグイン・フレームワークが含まれており、クローラ・プラグインAPIを使用して独自のドキュメント・リポジトリをクロールして索引付けできます。

セキュリティAPI

Oracle SESには、拡張可能な認証および認可フレームワークも含まれています。 ID管理システムでIDプラグインAPIを使用してユーザーを認可し、認可プラグインAPIを使用して各ソースに独自のセキュリティ・モデルを定義できます。

URLリライタAPI

URLリライタAPIは、抽出されたURLリンクをURLキューへの挿入前にフィルタしてリライトするために、クローラで使用されます。

問合せ時間認可API

問合せ時間認可APIは、検索時に検索結果をフィルタしてドキュメント情報にアクセスします。問合せ時間フィルタリングは、ACLと併用またはACLのかわりに使用できます。

Oracle Secure Enterprise Search WebサービスAPI

Oracle SESには、次のWebサービスAPIが含まれています。


関連項目:

『Oracle Secure Enterprise Search Java API Reference』およびOracle SES管理チュートリアルの「Webサービス・インタフェース」セクション

http://st-curriculum.oracle.com/tutorial/SESAdminTutorial/index.htm


Oracle Secure Enterprise SearchのWebサービスAPIを使用すると、ネットワーク上でOracle SESを検索して管理するための独自のアプリケーションを記述できます。このAPIには、次のメリットがあります。

Oracle SESには、クライアント・サイドJavaプロキシも用意されており、WebサービスのSOAPメッセージをマーシャリングして解析できます。クライアント・アプリケーション自体がOracle SES WebサービスにアクセスしてSOAPリクエストの作成とSOAPレスポンスの解析を実行するかわりに、ライブラリを使用できます。

この項のトピックは、次のとおりです。

WebサービスAPIのインストール

Oracle SES Webサービスは、Oracle SES中間層のスタンドアロンOC4Jサーバーの上位で実行されます。 また、デフォルト・インストールの一部としてインストールされ、構成されます。Oracle SES Webサービスはそのまま使用できます。Oracle SES Webサービスの起動と停止には、同じ中間層管理手順を使用します。

OC4Jには、デフォルトのOracle SES Webサービス管理者コンソールが用意されています。 管理者コンソールのURLは、Oracle SES WebサービスのURLと同じです。

問合せWebサービスのインストール

問合せ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サービスのインストール

管理Webサービスは、Oracle SESインストールの次のアドレスにあります。

http://<host>:<port>/search/ws/admin/SearchAdmin

管理者コンソールから次の情報を取得できます。

  • Oracle SESの管理WSDL記述

  • Webサービスのメッセージと操作のリスト

  • クライアント・サイドのJavaScriptスタブ

Webサービスの概念

Oracle SES Webサービスは、Oracle SESへのリモート・プロシージャ・コール(RPC)インタフェースで構成されています。このRPCインタフェースにより、クライアント・アプリケーションでネットワークを介してOracle SES上で操作を起動できるようになります。 クライアント・アプリケーションでは、Oracle SES WebサービスURLにより公開されたWSDL仕様を使用し、Simple Object Access Protocol(SOAP)を使用してリクエスト・メッセージを送信します。次に、サーバーがクライアント・アプリケーションにSOAPレスポンス・メッセージで応答します。

この項では、次の概念について説明します。

Webサービス

Webサービスとは、URIで識別するソフトウェア・アプリケーションのことで、そのインタフェースとバインディングはXMLで定義、記述および検出できます。Webサービスでは、XMLベース・メッセージとインターネット・ベース製品による、他のソフトウェア・アプリケーションとの直接的な相互作用がサポートされます。

Webサービスの機能は、次のとおりです。

  • 自己公開および記述: Webサービスは他のアプリケーションで認識できるように、機能および属性を定義します。 WSDLファイルを提供することで、Webサービスの機能が他のアプリケーションで使用可能になります。

  • Web上で他のサービスの検出が可能: Webサービスをアプリケーションで検出できるようにUDDIレジストリに登録できます。

  • 起動可能: Webサービスを検出および検査した後に、リモート・アプリケーションはインターネット標準プロトコルを使用してサービスを起動できます。

  • Webサービスは、リクエストおよびレスポンスまたは1方向スタイルであり、同期通信または非同期通信を使用できます。ただし、Webサービス・クライアントおよびWebサービス間の、通信スタイルまたは通信タイプの交換の基本的な単位はメッセージです。

Simple Object Access Protocol

Simple Object Access Protocol(SOAP)は、分散環境で情報交換に使用される軽量のXMLベース・プロトコルです。SOAPは、RPC指向およびメッセージ指向の交換など、様々なスタイルの情報交換をサポートします。RPCスタイルの情報交換では、リクエスト-レスポンス処理が可能であり、エンドポイントはプロシージャ指向のメッセージを受信し、相関付けられたレスポンス・メッセージで応答します。メッセージ指向の情報交換では、メッセージや他のタイプのドキュメントを交換する必要のある組織とアプリケーションがサポートされます。この場合、メッセージは送信されますが、送信者は即時のレスポンスを期待または待機できません。メッセージ指向の情報交換は、ドキュメント・スタイル交換とも呼ばれます。

SOAPの機能は、次のとおりです。

  • プロトコルに非依存

  • 言語に非依存

  • プラットフォームおよびオペレーティング・システムに非依存

  • 添付を取り込むSOAP XMLメッセージのサポート(マルチパートMIME構造を使用)

Webサービス記述言語

Webサービス記述言語(WSDL)は、RPC指向とメッセージ指向の情報を含むネットワーク・サービスを記述するためのXML形式です。プログラマまたは自動開発ツールは、WSDLファイルを作成してサービスを記述し、その記述をインターネット上で使用可能にすることができます。クライアント・サイドのプログラマおよび開発ツールは、公開済のWSDL仕様を使用して、使用可能なWebサービスに関する情報を取得し、使用可能なサービスにアクセスするプロキシまたはプログラム・テンプレートをビルドおよび作成できます。

Webサービスのアーキテクチャ

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サービスのアーキテクチャを示します。

benri001.gifの説明は次にあります。
画像の説明

開発プラットフォーム

クライアント・アプリケーションの実装には、Oracle JDeveloper、Microsoft .NETまたはApache Axisなど、SOAPをサポートしているプラットフォームを使用できます。これらのプラットフォームでは、Oracle SES WSDLインタフェースを使用して自動的にコードを作成できます。生成されたコードを、リクエストの作成、Webサービスの起動およびレスポンスの解釈を行うためのアプリケーション・ロジックとともに組み込みます。

問合せWebサービスの共通データ型

この項のトピックは、次のとおりです。

ベース・データ型

Oracle Secure Enterprise Search Webサービスでは、次のベース・データ型を使用します。

表7-1 ベース・データ型

ベース型 説明

xsd:Boolean

Boolean

true、false

xsd:date

Date

2005-12-31

xsd:int

Integer

256

xsd:long

Long integer

12345678900

xsd:string

String

Oracle Secure Enterprise Search


XMLからJavaへのデータ型マッピング

XMLスキーマのデータ型とJavaのデータ型とのマッピングは、SOAP開発環境に依存します。次の表に、Oracle JDeveloper環境におけるマッピングを示します。

表7-2 XMLからJavaへのデータ型マッピング

XMLスキーマ Oracle JDeveloper

xsd:Boolean

java.lang.Boolean

xsd:date

java.util.Date

xsd:int

java.lang.Integer

xsd:long

java.lang.Long

xsd:string

java.lang.String


複合型

Oracle Secure Enterprise Search Webサービスでは、次の複合データ型を使用します。

OracleSearchResult

検索結果のコンテナ。次の要素があります。

  • returnCount: 検索結果とともにヒットリストの推定カウントが戻されるかどうかを示すブール値

  • estimatedHitCount: 検索結果の推定カウント。-1は、検索結果とともに推定ヒット・カウントが戻されないことを意味します。

  • dupRemoved: 検索結果から近似重複ドキュメントが削除されたかどうかを示すブール値

  • dupMarked: 検索結果に含まれる近似重複ドキュメントがマーク付けされたかどうかを示すブール値。 dupRemovedがtrueの場合、dupMarkedは常にfalseになります。

  • resultElements: 実際のヒットリストを表すresultElementの配列

  • suggestedLinks: 指定した検索に対するsuggestedLinkの配列

  • query: 実際の検索文字列。検索文字列は、Oracle SES問合せ構文に従う必要があります。

  • altKeywords: 指定した検索に対する代替キーワード(推奨)

  • startIndex: 検索結果の開始索引

  • docsReturned: 戻された検索ヒット数

ResultElement

検索結果要素のデータ型。次の要素があります。

  • author: ドキュメントの原本著者

  • description: ドキュメントの説明

  • url: ドキュメントのURL

  • snippet: ドキュメントのコンテキスト内キーワード(KWIC)

  • title: ドキュメントのタイトル

  • lastModified: ドキュメントの最終変更日

  • mimetype: ドキュメントのMIMEタイプ

  • score: ドキュメントのOracle Text有効範囲

  • docID: ドキュメントID

  • language: ドキュメントの言語

  • contentLength: ドキュメントのコンテンツの長さ

  • signature: ドキュメントの署名

  • infoSourceID: ドキュメントのInfoSource ID

  • infoSourcePath: ドキュメントのInfoSourceパス

  • groups: ドキュメントが属しているグループの配列

  • isDuplicate: このドキュメントが結果リストにある別のドキュメントと近似重複しているかどうかを示すブール値

  • hasDuplicate: このドキュメントと近似重複するドキュメントが結果リストに1つ以上あるかどうかを示すブール値

  • fedID: フェデレーテッド・インスタンスのID(ドキュメントのフェッチ元であるフェデレーテッド・インスタンスの追跡に使用)

  • customAttributes: 結果とともにフェッチする必要のある、クロール時にドキュメントから抽出されたかドキュメントについて抽出されたカスタムの非デフォルト属性の配列

SCElement

プロバイダからの推奨コンテンツ。次の要素があります。

  • name: 推奨コンテンツ・プロバイダの名前

  • content: プロバイダからの推奨コンテンツ。このコンテンツは、XMLまたはHTMLコンテンツのバイト配列です。

DataGroup

ソース・グループ。次の要素があります。

  • groupID: ソース・グループID

  • groupName: ソース・グループ名

  • groupDisplayName: ソース・グループの表示名

Attribute

検索属性のデータ型。次の要素があります。

  • id: 検索属性ID

  • name: 検索属性の内部名

  • displayName: 検索属性の表示名

  • type: 検索属性タイプ。値はnumber、stringまたはdateです。

Filter

フィルタ条件(述語)のデータ型。次の要素があります。

  • 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

Node

infosourceノードのデータ型。次の要素があります。

  • id: InfosourceノードID

  • fedID: フェデレーテッド・インスタンスのID。ノードが属しているフェデレーテッド・インスタンスの追跡に使用されます。

  • name: ノード名

  • docCount: ノードの下にあるドキュメントの数。値が–1の場合、ノードの下にドキュメントが存在しますが、カウントは表示できません。

  • hasChildren: ノードに子があるかどうかを示します。

  • fullpath: カテゴリ・ノードのフルパス

  • fullpathIds: フルパスに含まれる各ノードのID

AttributeLOVElement

検索属性値のリストであるAttributeLOVの要素。次の要素があります。

  • value: 属性値(内部値)

  • displayValue: 表示値

SessionContextElement

結果の問合せ時間認可フィルタリング時に使用できる検索ユーザーの認証情報を名前/値ペアの形式で格納するためのデータ構造。次の要素があります。

  • name: 認証属性名

  • value: 認証属性の値

Status

リクエストのステータス。次の要素があります。

  • status: ステータス・コード。値はsuccessfulまたはfailedです。

  • message: ステータス・メッセージ。値はNULLまたはエラー・メッセージ(ステータスがfailedの場合)です。

Language

言語のデータ型。次の要素があります。

  • languageName: 言語名

  • languageDisplayName: 言語の表示名(翻訳名)

配列型

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の配列


関連項目:

付録E「WSDL仕様」

問合せWebサービスの操作

この項のトピックは、次のとおりです。

問合せWebサービスの操作の概要

Oracle Secure Enterprise Searchには、次のカテゴリのWebサービス操作が用意されています。

  • 認証: Oracle SESへのユーザー・アクセスを認証します。この操作が必要となるのは、ユーザーがセキュア検索を実行する場合のみです。

  • 検索: Oracle SESで検索を実行し、ヒットリストとともに推定ヒット・カウント、結果リスト内の近似重複ドキュメント、推奨リンクおよび実行された検索用の代替キーワードなどの情報を取得します。指定した問合せに対して外部プロバイダから推奨コンテンツを取得します。

  • メタデータ: ソース・グループのリスト、サポート対象言語のリストまたは検索属性のリストなど、検索メタデータを取得します。

  • 検索ヒット: キャッシュされたバージョンの検索結果や、検索ヒットのインリンクとアウトリンクなど、検索結果の詳細を取得します。

  • ユーザー・フィードバック: ユーザーが送信したURLなどのユーザー・フィードバックをOracle SESに送信します。

認証操作

この項では、次の認証操作について説明します。

loginRequestメッセージ

このメッセージは、Oracle SESに対して検索ユーザーを認証するようにリクエストします。次のパラメータで構成されます。

  • username: 検索ユーザーのユーザー名

  • password: 検索ユーザーのパスワード

<message name="loginRequest">
   <part name="username"      type="xsd:string"/>
   <part name="password"      type="xsd:string"/>
</message>

注意:

ユーザー名は大/小文字を区別しません。

loginResponseメッセージ

このメッセージには、loginRequestメッセージの戻りステータスが含まれます。

<message name="loginResponse">
   <part name="return"      type="typens:Status"/>
</message>
logoutRequestメッセージ

このメッセージは、ユーザーが検索アプリケーションからログアウトするときに使用されます。

<message name="logoutRequest">
</message>
logoutResponseメッセージ

このメッセージには、logoutRequestメッセージの戻りステータスが含まれます。

<message name="logoutResponse">
   <part name="return"      type="typens:Status"/>
</message>
setSessionContextRequestメッセージ

このメッセージは、問合せ時間フィルタリング時に使用可能な、検索ユーザーの認証情報を渡すために使用されます。


注意:

Webサービスのログイン・コールとログアウト・コールにより、Oracle SESでは問合せ時間フィルタに渡されるセッション・コンテキスト内でAUTH_USER値が自動的に設定またはリセットされます。このセッション・コンテキスト属性は、setSessionContextコールでは明示的に上書きできません。

次のパラメータで構成されます。

  • sessionContext: SessionContextElementの配列。この配列には、問合せ時間認証フィルタリングに必要な認証情報が名前/値ペアの形式で格納されます。

<message name="setSessionContextRequest">
    <part name="sessionContext"     type="typens:SessionContextElementArray"/>
</message>
setSessionContextResponseメッセージ

このメッセージには、setSessionContextメッセージの戻りステータスが含まれます。

<message name="setSessionContextResponse">
  <part name="return"             type="typens:Status"/>
</message>
proxyLoginRequestメッセージ

このメッセージは、プロキシ認証を使用して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人である必要があります。

proxyLoginResponseメッセージ

このメッセージには、proxyLoginRequestメッセージの戻りステータスが含まれます。

<message name="proxyLoginResponse">
  <part name="return"         type="typens:Status"/>
</message>

検索操作

この項では、次の検索操作について説明します。

doOracleSearchメッセージ

これは、検索アプリケーション用のメイン・メッセージです。次のパラメータで構成されます。

  • 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>
doOracleSearchResponseメッセージ

このメッセージは、検索結果をOracleSearchResultデータ型で戻します。

<message name="doOracleSearchResponse">
    <part name="return"  type="typens:OracleSearchResult"/>
</message>
doOracleBrowseSearchメッセージ

このメッセージは、検索を特定のノードに限定します。次のパラメータで構成されます。

  • query: 検索文字列。有効な文字列である必要があり、NULLにすることはできません。検索文字列は、Oracle SES問合せ構文に従う必要があります。 詳細は、「問合せWebサービスの問合せ構文」を参照してください。

  • nodeID: 検索先として限定するノードのID。

  • fedID: 親ノードが属しているフェデレーテッド・インスタンスのID(ローカル・ノードの場合は-1)。

  • 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>
doOracleBrowseSearchResponseメッセージ

このメッセージは、検索結果をOracleSearchResultデータ型で戻します。

<message name="doOracleBrowseSearchResponse">
    <part name="return"  type="typens:OracleSearchResult"/>
</message>
doOracleSimpleSearchメッセージ

これは、簡略化された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>
doOracleSimpleSearchResponseメッセージ

このメッセージは、検索結果をOracleSearchResultデータ型で戻します。

<message name="doOracleSimpleSearchResponse">
  <part name="return"         type="typens:OracleSearchResult"/>
</message>
getSuggestedContentメッセージ

このメッセージは、指定した問合せの推奨コンテンツを戻します。次のパラメータで構成されます。

  • query: 問合せ文字列。

  • returnType: コンテンツが戻されるフォーマット。htmlまたはxmlのいずれかです。指定したプロバイダにスタイル・シートが構成されていない場合、戻りタイプは、htmlまたはxmlのどちらが指定されているかに関係なく、プロバイダによって戻されるコンテンツの戻りタイプになります。

<message name="getSuggestedContent">
  <part name="query"                  type="xsd:string"/>
  <part name="returnType"             type="xsd:string"/>
</message>
getSuggestedContentResponseメッセージ

このメッセージは、問合せの推奨コンテンツを戻します。

<message name="getSuggestedContentResponse">
  <part name="return"                 type="typens:SCElementArray"/>
</message>

参照操作

この項では、次の参照操作について説明します。

getInfoSourceNodesRequestメッセージ

このメッセージは、指定された親ノードIDに関する情報ソース・ノードのリストを取得します。次のパラメータで構成されます。

  • parentNodeID: すべての子ノードが戻されるノードのID。設定されていない場合、メッセージはすべてのルート・ノードを戻します。

  • fedID: 親ノードが属しているフェデレーテッド・インスタンスのID(ローカル・ノードの場合は-1)。

  • 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>
getInfoSourceNodesResponseメッセージ

このメッセージは、情報ソース・ノードの配列を戻します。

<message name="getInfoSourceNodesResponse">
    <part name="nodes"    type="typens:NodeArray"/>
</message>
getInfoSourceAncestorNodesRequestメッセージ

このメッセージは、指定された情報ソース・ノードについて、ルートからのフルパスを取得します。次のパラメータで構成されます。

  • nodeID: ルートからノードへのパスに含まれるすべてのノードが戻されるノードID。nodeIDは必ず設定する必要がありますが、NULLにすることはできません。

  • locale: ロケールを表す2文字のコード。明示的に設定しなければ、デフォルトの英語(en)になります。

<message name="getInfoSourceAncestorNodesRequest">
    <part name="nodeID"        type="xsd:string"/>
    <part name="locale"        type="xsd:string"/>
</message>
getInfoSourceAncestorNodesResponseメッセージ

このメッセージは、情報ソース祖先ノードの配列を戻します。

<message name="getInfoSourceAncestorNodesResponse">
    <part name="nodes"    type="typens:NodeArray"/>
</message>
getInfoSourceNodeRequestメッセージ

このメッセージは、特定のノードを取得します。次のパラメータで構成されます。

  • nodeID: 取得するノードのノードID。nodeIDは必ず設定する必要がありますが、NULLにすることはできません。

  • fedID: 親ノードが属しているフェデレーテッド・インスタンスのID(ローカル・ノードの場合は-1)。

  • 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>
getInfoSourceNodeResponseメッセージ

このメッセージは、リクエストされたノードを戻します。

<message name="getInfoSourceNodeResponse">
    <part name="node    "type="typens:Node"/>
</message>

メタデータ操作

この項では、次のメタデータ操作について説明します。

getLanguageRequestメッセージ

このメッセージは、Oracle SESでサポートされている言語をすべて取得します。クライアント・アプリケーションで言語リストを表示するために使用されます。次のパラメータで構成されます。

locale: ロケールを表す2文字のコード。明示的に設定しなければ、デフォルトの英語(en)になります。

<message name="getLanguagesRequest">
    <part name="locale"        type="xsd:string"/>
</message>
getLanguageResponseメッセージ

このメッセージは、すべてのサポート対象言語を戻します。

<message name="getLanguagesResponse">
    <part name="return"        type="typens:LanguageArray"/>
</message>
getDataGroupsRequestメッセージ

このメッセージは、Oracle SESに定義されているすべてのソース・グループをリクエストします。このメッセージは、クライアント・アプリケーションで検索ページに全ソース・グループを表示するために使用されます。たとえば、エンド・ユーザーは検索結果を1つまたは複数のソース・グループ内に限定できます。次のパラメータで構成されます。

locale: ロケールを表す2文字のコード。明示的に設定しなければ、デフォルトの英語(en)になります。

<message name="getDataGroupsRequest">
    <part name="locale"        type="xsd:string"/>
</message>
getDataGroupsResponseメッセージ

このメッセージは、Oracle SESに定義されているすべてのソース・グループを戻します。

<message name="getDataGroupsResponse">
    <part name="groups"        type="typens:DataGroupArray"/>
</message>
getAttributesRequestメッセージ

このメッセージは、指定されたソース・グループに適用される検索属性のリストを取得します。次のパラメータで構成されます。

  • 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>
getAttributesResponseメッセージ

このメッセージは、検索属性の配列を戻します。

<message name="getAttributesResponse">
    <part name="return"       type="typens:AttributeArray"/>
</message>
getAllAttributesRequestメッセージ

このメッセージは、Oracle SESに定義されているすべての検索属性を取得します。次のパラメータで構成されます。

locale: ロケールを表す2文字のコード。明示的に設定しなければ、デフォルトの英語(en)になります。

<message name="getAllAttributesRequest">
  <part name="locale" type="xsd:string"/>
</message>
getAllAttributesResponseメッセージ

このメッセージは、Oracle SESに定義されているすべての検索属性を戻します。

<message name="getAllAttributesResponse">
    <part name="return"       type="typens:AttributeArray"/>
</message>
getAttributeLOVRequestメッセージ

このメッセージは、指定された検索属性のLOV項目を取得します。次のパラメータで構成されます。

  • attribute: リクエストされたLOV(値リスト)の検索属性。

  • locale: ロケールを表す2文字のコード。明示的に設定しなければ、デフォルトの英語(en)になります。

<message name="getAttributeLOVRequest">
  <part name="attribute"     type="typens:Attribute"/>
  <part name="locale"        type="xsd:string"/>
</message>
getAttributeLOVResponseメッセージ

このメッセージは、検索属性のLOV要素の配列を戻します。

<message name="getAttributeLOVResponse">
  <part name="return"    type="typens:AttributeLOVElementArray"/>
</message>

検索ヒット操作

この項では、次の検索ヒット操作について説明します。

getCachedPageRequestメッセージ

このメッセージは、指定されたドキュメント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>
getCachedPageResponseメッセージ

このメッセージは、キャッシュされたHTMLページのバイト配列を戻します。

<message name="getCachedPageResponse">
    <part name="return"         type="xsd:base64Binary"/>
</message>
getInLinksRequestメッセージ

このメッセージは、指定された検索ヒット(ドキュメント)に関する着信リンクをすべて取得します。次のパラメータで構成されます。

  • 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>
getInLinksResponseメッセージ

このメッセージは、着信リンクのURL文字列の配列を戻します。

<message name="getInLinksResponse">
    <part name="return"      type="typens:StringArray"/>
</message>
getOutLinksRequestメッセージ

このメッセージは、指定された検索ヒット(ドキュメント)に関する発信リンクをすべて取得します。次のパラメータで構成されます。

  • 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>
getOutLinksResponseメッセージ

このメッセージは、発信リンクのURL文字列の配列を戻します。

<message name="getOutLinksResponse">
    <part name="return"      type="typens:StringArray"/>
</message>
logUserClickRequestメッセージ

このメッセージは、ユーザーによるクリックを記録します。次のパラメータで構成されます。

  • 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>
logUserClickResponseメッセージ

このメッセージは、クリックされたドキュメントのURLを戻します。

<message name="logUserClickResponse">
  <part name="url"              type="xsd:string"/>
</message>

ユーザー・フィードバック操作

この項では、次のユーザー・フィードバック操作について説明します。

submitUrlRequestメッセージ

このメッセージは、Oracle SESでクロールして索引付けできるようにURLを送信します。次のパラメータで構成されます。

url: 次回にクロールできるようにクローラに送信されるURL。有効なURLである必要があり、NULLにすることはできません。

<message name="submitUrlRequest">
     <part name="url"        type="xsd:string"/>
</message>
submitUrlResponseメッセージ

このメッセージはステータスを戻します。ステータスは2つの文字列で構成され、第1文字列は送信ステータス(successfulまたはfailed)で、第2文字列は送信ステータスがfailedの場合のエラー・メッセージです。

<message name="submitUrlResponse">
     <part name="return"      type="typens:Status"/>
</message>

問合せWebサービスの問合せ構文

この項では、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のいずれで検索しても、同じ検索結果が戻されます。

句は、二重引用符(")で囲まれた文字列です。1つ以上の単語を含めることができます。

演算子

問合せ構文では、次の演算子が定義されます。

  • プラス[+]: プラス演算子は、直後の検索条件は一致したすべてのドキュメントに存在する必要があることを示します。 たとえば、[Oracle +Applications]を検索すると、OracleおよびApplicationsという単語を含むドキュメントのみが検出されます。複数の単語の検索では、最初のトークンを含むすべてのトークンの前に[+]を付けることができます。 また、二重引用符(")で囲まれた句の前に[+]を付けることもできます。 ただし、[+]と検索する語の間には空白を入れないでください。

  • マイナス[-]: マイナス演算子は、直後の検索条件は検索結果に含まれるどのドキュメントにも存在できないことを示します。 [Oracle -Applications]を検索すると、Applicationsという単語を含まないドキュメントのみが検出されます。複数の単語の検索では、最初のトークン以外のすべてのトークンの前に[-]を付けることができます。1つの単語または句のいずれでもかまいませんが、[-]とトークンの間には空白を入れないでください。

  • アスタリスク[*]: アスタリスクはワイルドカード検索を示します。たとえば、文字列[Ora*]を検索すると、OracleやOratorなど、Oraで始まるすべての単語を含むドキュメントが検出されます。アスタリスクは単語の途中にも挿入できます。たとえば、文字列[A*e]を検索すると、AppleやApeなどの単語を含むドキュメントが検出されます。

デフォルト検索: 暗黙的AND検索

Oracle SESでは、デフォルトですべての検索条件とその条件の関連バリエーションが検索されます。条件を演算子(ANDなど)で結ぶ必要はありません。検索に含まれる条件の順序は、検索結果に影響します。

単語セパレータ

各検索条件を区切るには、1つ以上の空白文字' 'を使用します。

フィルタ条件(拡張条件)

Oracle SESの問合せ構文でサポートされるフィルタ条件は、「Site」と「File type」のみです。title、author、last modified dateなど、他のフィルタ条件(拡張条件)はサポートされません。検索を他のフィルタ条件で制限する場合は、WebサービスAPIメッセージdoOracleSearch内で指定できます。

特殊な検索条件

Oracle SESでは、複数の特殊な検索条件の使用がサポートされます。これにより、ユーザーまたは検索管理者は、Oracle SESの前にある付加機能にアクセスできます。次に特殊な検索条件を示します。

「除外」検索条件

検索結果から除外する条件の直前にマイナス記号[-]を付けると、検索対象から単語を除外できます。ストップ・ワードは除外されません。

例: oracle -search

否定検索を使用するには、別の肯定検索条件が存在する必要があります。次に例を示します。

-searchは無効な検索です。

oracle -searchは有効な検索です。

ワイルドカード検索

oraで始まる単語を検索するとします。アスタリスクを指定できるのは、検索条件の最後(右端)または途中のみです。そのため、*earchなどの条件は検索できません。

例: Ora*

句の検索

引用符で囲むと完全に一致する句を検索できます。この方法でマークした単語は、すべての結果に入力したとおりに表示されます。

例: "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
    

問合せWebサービスの例

ここでは、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>

クライアント・サイド問合せJavaプロキシ・ライブラリ

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.CustomAttribute

  • oracle.search.query.webservice.client.DataGroup

  • oracle.search.query.webservice.client.Filter

  • 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.SessionContextElement

  • oracle.search.query.webservice.client.Status

  • oracle.search.query.webservice.client.SuggestedLink

  • oracle.search.query.webservice.client.SCElement

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サービス・メッセージ

次のWebサービス・メッセージと操作は、Oracle SES内部でのみ使用されます。将来のリリースでは、変更または削除されることがあります。

  • setSearchUserRequestsetSearchUserResponsesetSearchUser

管理Webサービスの操作

管理WebサービスAPIには、次の管理操作が含まれています。

表7-3 管理Webサービスの操作

クラス 説明

getEstimatedIndexFragmentation()

推定索引フラグメンテーション・レベルを整数の率で戻します。

getSchedules(String locale)

すべてのクローラ・スケジュールに関する情報を戻します。

localeは、翻訳文字列で使用されるロケールです。

getScheduleStatus(String name, String locale)

クローラ・スケジュールの現在のステータスが戻されます。

nameはクローラ・スケジュールの名前です。

localeは、戻り値の翻訳文字列で使用されるロケールです。

login(String username, String pwd)

セッションを認証して作成します。

usernameは管理者ユーザー名です。

pwdは管理者パスワードです。

logout()

現在のセッションをログアウトしてクローズします。

optimizeIndexNow()

検索索引を最適化します。

startSchedule(String name)

指定したクローラ・スケジュールを開始します。

nameはクローラ・スケジュールの名前です。

stopSchedule(String name)

指定したクローラ・スケジュールを停止します。

nameはクローラ・スケジュールの名前です。


クライアント・サイド管理Javaプロキシ・ライブラリ

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


関連項目:

  • 『Oracle Secure Enterprise Search Java API Reference』

  • 『Oracle Application Server Web Services開発者ガイド』のWebサービス・プロキシのCLASSPATHの設定に関する項


管理WebサービスのSOAPフォールト・エラー・コード

管理Webサービス・リクエストの結果としてエラーが発生すると、SOAPフォールトが戻されます。提供されたJavaプロキシ・クライアントを使用すると、javax.xml.rpc.soap.SOAPFaultExceptionがスローされます。マシン解析可能なエラー・コードにアクセスするには、SOAPFaultException.getFaultCode()メソッドをコールします。

次の表に、管理Webサービスのエラー・コードを示します。

表7-4 管理Webサービスのエラー・コード

エラー・コード 説明 SOAPフォールト・コード接頭辞

Authentication

提供されたセキュリティ資格証明が無効です。

Client

InternalError

内部エラーが発生しました。 再試行してください。

Server

InvalidSchedule

指定されたスケジュールが実行される操作に対して無効です。

Client

InvalidScheduleName

指定されたスケジュール名が存在しません。

Client


Oracle Secure Enterprise Search Java SDK

Oracle Secure Enterprise Search Java SDKには、次のAPIが用意されています。

クローラ・プラグインAPI

クローラ・プラグインを実装すると、独自のドキュメント・リポジトリをクロールして索引付けできます。Oracle SESでは、独自リポジトリをユーザー定義ソースと呼びます。クローラからソースへのアクセスを可能にするモジュールを、クローラ・プラグイン(またはコネクタ)と呼びます。

プラグインによりユーザー定義ソースからドキュメントURLと関連メタデータが収集され、この情報がOracle SESクローラに戻されます。クローラは、収集時に各URLの処理を開始します。クローラ・プラグインは、Oracle SESクローラ・プラグインAPIを使用してJavaで実装する必要があります。クローラ・プラグインは、$ORACLE_HOME/search/lib/pluginsディレクトリに置かれます。

この項のトピックは、次のとおりです。


関連項目:

Oracle SES開発者チュートリアルの、クローラ・プラグインAPIの使用ガイド

http://st-curriculum.oracle.com/tutorial/SESDevTutorial/index.htm


クローラ・プラグインの概要

次のダイアグラムに、クローラ・プラグインのアーキテクチャを示します。

benri010.gifの説明は次にあります。
画像の説明

クローラ・プラグインを作成するには、クローラ・プラグインAPIの2つのインタフェース(CrawlerPluginManagerおよびCrawlerPlugin)を実装する必要があります。クローラ・プラグインの機能は、次のとおりです。

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

  • ドキュメントが保護されている場合は、アクセス制御リスト(ACL)情報を提供します。

  • 各ドキュメント属性をエンド・ユーザーが使用する共通属性名にマップします。

  • 必要に応じて、指定のタイムスタンプ以降に変更があったURLのリストを提供します。

  • 必要に応じて、ドキュメント処理のために表示URLのみでなくアクセスURLを提供します。

  • ドキュメントのコンテンツをJava Reader形式で提供します。つまり、プラグインはドキュメントをフェッチする必要があります。

  • 属性のみのドキュメント、つまりメタデータを含んでいてもコンテンツのないドキュメントをクローラに送信できます。

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

ドキュメント属性またはメタデータでは、ドキュメント・プロパティが記述されます。アプリケーションに無関係な属性も使用できます。クローラ・プラグインの作成者は、どのドキュメント属性を抽出して保存するかを決定する必要があります。収集された属性のリストが構成可能になるようにプラグインを作成することもできます。Oracle SESでは、プラグインから戻された属性が自動的に登録されます。プラグインは、ドキュメントについて戻す属性を決定できます。

ライブラリ・パスとJava CLASSPATH

プラグインに必要な他のすべての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ライブラリ・パスは、クローラによってこれらの場所に明示的に設定されます。

クローラ・プラグインの制限事項

プラグインはMIMEタイプの拒否および大容量のドキュメントの拒否を、プラグイン自身で処理する必要があります。たとえば、プラグインでは、zipファイルのようにタイプやサイズに基づいて索引付けしないファイルを拒否する必要があります。また、ログ・ファイルなどのプレーン・テキスト・ファイルは、非常に大きくなることがあります。クローラはHTMLファイルとプレーン・テキスト・ファイルをメモリーに読み取るため、ファイルが大きいとメモリー不足になる可能性があります。

クローラ・プラグインの機能

この項では、クローラ・プラグインの各側面について説明します。

ソースの登録

ソース登録が自動化されます。ソース・タイプを定義した後、次のようにそのインスタンスを定義できます。

  • ソース名

  • ソースの説明(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とクラス

クローラ・プラグインAPIは、クローラ・プラグインの実装に使用されるクラスとインタフェースのコレクションです。

表7-5 クローラ・プラグイン・インタフェースとクラス

インタフェース/クラス 説明

CrawlerPluginManager

このインタフェースは、クローラ・プラグイン・インスタンスの生成に使用されます。

ユーザー定義ソース・タイプを定義できるように、管理ページで自動プラグイン登録に使用する一般的なプラグイン情報を提供します。getCrawlerPluginコールで戻されるプラグイン・オブジェクト(複数の実装が使用可能な場合)と戻されるプラグイン・インスタンス数に関するコントロールが用意されています。戻されるインスタンスが1つのみの場合は、プラグイン実装でマルチスレッド実行を処理する必要があります。

getCrawlerPluginコールは各スレッドで開始されるため、CrawlingThreadServiceオブジェクトのパスインはスレッド固有です。

CrawlerPlugin

このインタフェースは、クローラ・プラグインでOracle SESクローラとの統合に使用されます。

Oracle SESクローラはプラグイン・マネージャ・クラスをロードし、プラグイン・マネージャAPIを起動してクローラ・プラグイン・インスタンスを取得します。各プラグイン・インスタンスは、スレッド実行コンテキスト内で実行されます。

QueueService

このインタフェースはOracle SESクローラにより実装され、GeneralServiceオブジェクトを介してプラグインで使用可能になります。

このインタフェースは、クローラ・プラグインでURL関連データをクローラに送信するために使用されます。

DataSourceService

このインタフェースはOracle SESクローラにより実装され、GeneralServiceオブジェクトを介してプラグインで使用可能になります。

このインタフェースは、クローラ・プラグインで現在クロールされているドキュメント・セットの管理に使用されます。

GeneralService

このインタフェースは、プラグインにOracle SESサービスと実装済インタフェース・オブジェクトを提供します。Oracle SESクローラにより実装され、プラグイン・マネージャの初期化を介して使用可能になります。

このインタフェースは、クローラ・プラグインでOracle SESインタフェース・オブジェクトの取得に使用されます。

CrawlingThreadService

このインタフェースは、クローラ・プラグインでクローラ関連タスクの実行に使用されます。プラグインのcrawl()メソッドを起動するクロール・スレッド固有の実行コンテキストがあります。

DocumentMetadata

このインタフェースは、処理と索引付けのためにドキュメントの属性とプロパティを保持します。

このインタフェースは、クローラ・プラグインでURL関連データをクローラに送信するために使用されます。

DocumentContainer

このインタフェースは、クローラ・プラグインでドキュメント情報の送信または取得に使用されます。

DocumentAcl

このインタフェースは、クローラ・プラグインでドキュメントのアクセス制御リスト(ACL)情報の送信に使用されます。

ProcessingException

このクラスでは、プラグイン・リクエストの処理エラーに関する情報がカプセル化されています。


URLリライタAPI

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


注意:

URLリライタAPIは、クローラ・プラグインSDKに付属しています。URLリライタAPIはWebソースに使用します。

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

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

  2. URLのコンテンツをフェッチします。

  3. コンテンツからURLリンクを抽出します。

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

生成された新規URLリンクは、既存のすべての境界ルールに従います。

抽出されたURLリンクに対して、次の2つの操作を実行できます。

  • フィルタ: 不要なURLリンクを削除します。

  • リライト: URLリンクを変換します。

URLリンクのフィルタ

ユーザーは、Oracle SESクローラでサポートされている次のメカニズムを使用して、キューに挿入可能なURLリンクのタイプを制御します。

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

  • ホスト包含および除外ルール。たとえば、www.example.comからのURLのみを許可します。

  • ファイル・パス包含および除外ルール。たとえば、/archiveディレクトリ下のURLのみを許可します。

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

  • ロボットのメタタグNOFOLLOW。たとえば、そのページからのリンクは抽出しません。

  • ブラック・リストURL。たとえば、クロール対象外として明示的に指定されたURL。

これらのメカニズムを使用すると、フィルタ基準を満たすURLリンクのみが処理されます。ただし、URLリンクのフィルタには、他の基準を使用することもできます。次に例を示します。

  • 特定のファイル名拡張子が付いたURLを許可します。

  • 特定のポート番号からのURLのみを許可します。

  • 特定のディレクトリにあるPDFファイルをすべて禁止します。

様々な基準が考えられるため、抽出されたURLリンクの評価時にクローラで使用可能なユーザー実装モジュールに委任されます。

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リンクとは異なる場合があります。

URLリライタの作成と使用

URLリライタを作成して使用する手順は、次のとおりです。

  1. UrlRewriterインタフェースのopencloseおよびrewriteメソッドを実装する新規のJavaファイルを作成します。

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

    $ORACLE_HOME/jdk/bin/javac -classpath $ORACLE_HOME/search/lib/search.jar SampleRewriter.java
    
    
  3. リライタ・クラス・ファイルを$ORACLE_HOME/search/lib/plugins/ディレクトリにあるjarファイルにパッケージします。次に例を示します。

    $ORACLE_HOME/jdk/bin/jar cv0f $ORACLE_HOME/search/lib/plugins/sample.jar SampleRewriter.class
    
    
  4. 既存のWebソースのホーム - ソース - クロール・パラメータ・ページで、UrlRewriterオプションを有効化し、リライタ・クラス名とjarファイル名(SampleRewriterおよびsample.jarなど)を指定します。

  5. 対応するスケジュールを起動して、ターゲットWebソースをクロールします。クローラ・ログ・ファイルで、「URLリライタ"SampleRewriter"のロード」というメッセージでURLリライタの使用を確認します。


注意:

URLリライトを使用できるのは、Webソースの場合のみです。


関連項目:

API(oracle.search.sdk.crawlerパッケージ)については、『Oracle Secure Enterprise Search Java API Reference』を参照してください。

セキュリティAPI

Oracle SESには、独自のドキュメント・リポジトリをクロールして索引付けできる(クローラ・プラグインAPI)拡張可能なクローラ・プラグイン・フレームワークに加えて、拡張可能な認証および認可フレームワークが含まれています。 このフレームワークにより、ID管理システムを使用してユーザーを認可できます(IDプラグインAPI)。 また、各ソースに独自のセキュリティ・モデルを定義できます(認可プラグインAPI)。

IDプラグインAPI

IDプラグインAPIはID管理システムと通信して、ログイン時にユーザー名とパスワードを使用してユーザーを認証します。 また、指定したユーザーのグループ(またはロール)のリストも提供します。

IDプラグイン・マネージャは、初期化パラメータを管理し、IdentityPluginオブジェクトを戻します。

IDプラグインを追加するには、グローバル設定 - ID管理設定ページで新規IDプラグインの登録をクリックし、IDプラグイン・マネージャのクラス名とjarファイル名を入力します。

認可プラグインAPI

ユーザー/グループ・モデルに適合しない認可要件を持つソースについては、認可プラグインによって、さらに柔軟なセキュリティ・モデルが提供されます (認証はIDプラグインで処理されます)。

認可プラグインを使用すると、クローラ・プラグインでは、ドキュメント属性と同様のセキュリティ属性を追加できます。 認可プラグインはログイン時に起動され、問合せ文字列に対してセキュリティ・フィルタを構築します。 このセキュリティ・フィルタは、各ドキュメントのセキュリティ属性の値に対して適用されます。 セキュリティ属性の値がセキュリティ・フィルタと一致したドキュメントのみがユーザーに戻されます (すべてのセキュリティ属性は文字列値です)。

認可プラグインには、次のコンポーネントのいずれかまたは両方を含めることができます。

  • QueryFilterPlugin: 現行ユーザーのセキュリティ属性のリストを取得します。 ユーザーがメンバーであるグループ(またはセキュリティ・ロール)のリストを戻すことができます。 たとえば、respが職責に対するGRANTセキュリティ属性で、User1がログインした場合、QueryFilterPlugin.getSecurityValues("resp")User1の職責に対応する値の配列を戻します。 これらの値を使用して、User1とその職責に対して認可されたドキュメントを戻すためのフィルタを構築できます。

  • ResultFilterPlugin: 問合せ時間認可(QTA)を実装します。 ヒットリストが作成されると、Oracle SESは結果フィルタ・プラグインをコールして、ユーザーが各ドキュメントの参照を認可されているかどうかをチェックします。 ヒットリストにリストされるのは、ユーザーが参照を許可されているドキュメントのみです。 結果フィルタは、唯一のセキュリティ・デバイスとして使用したり、他のセキュリティと組み合せて使用できます。 また、結果フィルタを使用してタイトルまたは表示URLを変更できます。


注意:

QTAを実装する方法としてResultFilterをお薦めします(QueryTimeFilterではなく)。

ユーザー定義セキュリティ・モデル

ユーザー定義セキュリティ・モデルを使用すると、Oracle SESでは、管理者が新規のユーザー定義ソースを定義する前に認可ページが表示されます。 UserDefinedSecurityModelインタフェースによって、AuthorizationManagerインタフェースを実装するクラスの名前、および特定ユーザーに対するセキュリティ・フィルタの構築に使用するセキュリティ属性の名前とタイプ(GRANTまたはDENY)が戻されます。


関連項目:

API(oracle.search.sdk.securityパッケージ)については、『Oracle Secure Enterprise Search Java API Reference』を参照してください。

問合せ時間認可API

問合せ時間認可により、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のインスタンスをスローできます。

RequestInfoDocumentInfoおよびFolderInfoインタフェースを実装するオブジェクトはフィルタリング用の引数として渡されますが、これらのインタフェースをフィルタ作成者が実装する必要はありません。

このAPIには、次のインタフェースと例外が含まれています。

表7-6 問合せ時間認可のインタフェースおよび例外

インタフェース/例外 説明

ResultFilterPlugin

このインタフェースは、検索時に検索結果をフィルタしてドキュメント情報にアクセスします。

このインタフェースを実装するオブジェクトがソースに割り当てられている場合は、そのソースに属している検索結果やドキュメントの他の取得は、このフィルタを通過してからエンド・ユーザーに表示されます。

PluginException

この例外は、失敗が発生したことを示すためにResultFilterPluginインタフェース内のメソッドによりスローされます。

RequestInfo

このインタフェースは、ドキュメント、フォルダまたはソース全体を除外するためにResultFilterPluginに渡すことのできるリクエスト関連の情報を表示します。

DocumentInfo

このインタフェースは、ドキュメントを除外するためにResultFilterPluginに渡すことのできるドキュメント関連の情報を表示します。

FolderInfo

このインタフェースは、フォルダの参照を制御するためにResultFilterPluginに渡すことのできるフォルダ関連の情報を表示します。



関連項目:

oracle.search.sdkパッケージについては、『Oracle Secure Enterprise Search Java API Reference』を参照してください。

フィルタ実装のスレッド・セーフティ

ResultFilterPluginインタフェースを実装するクラスは、実行中のOracle SES検索アプリケーションのライフタイム中は存続するように設計する必要があります。 通常は、ResultFilterPluginの単一インスタンスにより様々な検索エンド・ユーザーからの複数のコンカレント要求が処理されます。したがって、このクラスのfilterDocumentspruneSourcefilterBrowseFoldersおよびgetCurrentUserNameメソッドは、リエントラントかつスレッド・セーフである必要があります。

問合せ時間フィルタのコンパイルとパッケージ

問合せ時間フィルタ・クラスをコンパイルするには、Java CLASSPATHに次のファイルを2つ以上含める必要があります。これらのファイルは、Oracle SESサーバー・ディレクトリにあります。

  • $ORACLE_HOME/search/lib/search_query.jar

  • $ORACLE_HOME/jlib/servlet.jar

ResultFilterPluginクラス(複数可)とすべての関連Javaクラスを含むjarファイルを1つ作成することをお薦めします。このjarファイルは、Oracle SESサーバーでアクセスできる安全な場所に置く必要があります。このjarファイルが危険にさらされると、検索サーバーにおけるドキュメント・アクセスのセキュリティも危険にさらされる可能性があります。

問合せ時間フィルタには、作成したjarファイルに含まれておらずOracle SESのCLASSPATHにもない、他のクラスまたはjarファイルを必要とすることがあります。その場合は、必要なファイルをJARファイル・マニフェストのClass-Path属性に追加する必要があります。このマニフェスト・ファイルを、作成するjarファイルに含めてください。

Oracle SESでは、実行時にResultFilterPluginで使用されるクラスがみつからない場合、ログ・ファイルにエラー・メッセージが書き込まれ、そのソースからの全ドキュメントは処理中の検索リクエストについて除外されます。


関連項目:

JARファイル・マニフェストの詳細は、http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.htmlを参照してください。