この章では、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には、拡張可能な認証および認可フレームワークも含まれています。 ID管理システムでIDプラグインAPIを使用してユーザーを認可し、認可プラグインAPIを使用して各ソースに独自のセキュリティ・モデルを定義できます。
URLリライタAPI
URLリライタAPIは、抽出されたURLリンクをURLキューへの挿入前にフィルタしてリライトするために、クローラで使用されます。
問合せ時間認可API
問合せ時間認可APIは、検索時に検索結果をフィルタしてドキュメント情報にアクセスします。問合せ時間フィルタリングは、ACLと併用またはACLのかわりに使用できます。
Oracle SESには、次のWebサービスAPIが含まれています。
問合せWebサービスAPI: 検索問合せを実行できます。たとえば、oracle benefitsを検索すると、すべてのドキュメントが戻されます。
管理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プロキシおよびソース・コード
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 Secure Enterprise Search 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
: 結果とともにフェッチする必要のある、クロール時にドキュメントから抽出されたかドキュメントについて抽出されたカスタムの非デフォルト属性の配列
プロバイダからの推奨コンテンツ。次の要素があります。
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で検索を実行し、ヒットリストとともに推定ヒット・カウント、結果リスト内の近似重複ドキュメント、推奨リンクおよび実行された検索用の代替キーワードなどの情報を取得します。指定した問合せに対して外部プロバイダから推奨コンテンツを取得します。
メタデータ: ソース・グループのリスト、サポート対象言語のリストまたは検索属性のリストなど、検索メタデータを取得します。
検索ヒット: キャッシュされたバージョンの検索結果や、検索ヒットのインリンクとアウトリンクなど、検索結果の詳細を取得します。
ユーザー・フィードバック: ユーザーが送信した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>
この項では、次の検索操作について説明します。
これは、検索アプリケーション用のメイン・メッセージです。次のパラメータで構成されます。
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(ローカル・ノードの場合は-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>
このメッセージは、検索結果を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(ローカル・ノードの場合は-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>
このメッセージは、情報ソース・ノードの配列を戻します。
<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>
このメッセージは、情報ソース祖先ノードの配列を戻します。
<message name="getInfoSourceAncestorNodesResponse"> <part name="nodes" type="typens:NodeArray"/> </message>
このメッセージは、特定のノードを取得します。次のパラメータで構成されます。
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>
このメッセージは、リクエストされたノードを戻します。
<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.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サービス・メッセージと操作は、Oracle SES内部でのみ使用されます。将来のリリースでは、変更または削除されることがあります。
setSearchUserRequest
、setSearchUserResponse
、setSearchUser
管理WebサービスAPIには、次の管理操作が含まれています。
表7-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が用意されています。
クローラ・プラグインを実装すると、独自のドキュメント・リポジトリをクロールして索引付けできます。Oracle SESでは、独自リポジトリをユーザー定義ソースと呼びます。クローラからソースへのアクセスを可能にするモジュールを、クローラ・プラグイン(またはコネクタ)と呼びます。
プラグインによりユーザー定義ソースからドキュメントURLと関連メタデータが収集され、この情報がOracle SESクローラに戻されます。クローラは、収集時に各URLの処理を開始します。クローラ・プラグインは、Oracle SESクローラ・プラグインAPIを使用してJavaで実装する必要があります。クローラ・プラグインは、$ORACLE_HOME/search/lib/plugins
ディレクトリに置かれます。
この項のトピックは、次のとおりです。
関連項目: 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は、クローラ・プラグインの実装に使用されるクラスとインタフェースのコレクションです。
表7-5 クローラ・プラグイン・インタフェースとクラス
インタフェース/クラス | 説明 |
---|---|
|
このインタフェースは、クローラ・プラグイン・インスタンスの生成に使用されます。 ユーザー定義ソース・タイプを定義できるように、管理ページで自動プラグイン登録に使用する一般的なプラグイン情報を提供します。
|
|
このインタフェースは、クローラ・プラグインでOracle SESクローラとの統合に使用されます。 Oracle SESクローラはプラグイン・マネージャ・クラスをロードし、プラグイン・マネージャAPIを起動してクローラ・プラグイン・インスタンスを取得します。各プラグイン・インスタンスは、スレッド実行コンテキスト内で実行されます。 |
|
このインタフェースはOracle SESクローラにより実装され、 このインタフェースは、クローラ・プラグインでURL関連データをクローラに送信するために使用されます。 |
|
このインタフェースはOracle SESクローラにより実装され、 このインタフェースは、クローラ・プラグインで現在クロールされているドキュメント・セットの管理に使用されます。 |
|
このインタフェースは、プラグインにOracle SESサービスと実装済インタフェース・オブジェクトを提供します。Oracle SESクローラにより実装され、プラグイン・マネージャの初期化を介して使用可能になります。 このインタフェースは、クローラ・プラグインでOracle SESインタフェース・オブジェクトの取得に使用されます。 |
|
このインタフェースは、クローラ・プラグインでクローラ関連タスクの実行に使用されます。プラグインの |
|
このインタフェースは、処理と索引付けのためにドキュメントの属性とプロパティを保持します。 このインタフェースは、クローラ・プラグインでURL関連データをクローラに送信するために使用されます。 |
|
このインタフェースは、クローラ・プラグインでドキュメント情報の送信または取得に使用されます。 |
|
このインタフェースは、クローラ・プラグインでドキュメントのアクセス制御リスト(ACL)情報の送信に使用されます。 |
|
このクラスでは、プラグイン・リクエストの処理エラーに関する情報がカプセル化されています。 |
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.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)拡張可能なクローラ・プラグイン・フレームワークに加えて、拡張可能な認証および認可フレームワークが含まれています。 このフレームワークにより、ID管理システムを使用してユーザーを認可できます(IDプラグインAPI)。 また、各ソースに独自のセキュリティ・モデルを定義できます(認可プラグインAPI)。
IDプラグインAPIはID管理システムと通信して、ログイン時にユーザー名とパスワードを使用してユーザーを認証します。 また、指定したユーザーのグループ(またはロール)のリストも提供します。
IDプラグイン・マネージャは、初期化パラメータを管理し、IdentityPlugin
オブジェクトを戻します。
IDプラグインを追加するには、グローバル設定 - ID管理設定ページで新規IDプラグインの登録をクリックし、IDプラグイン・マネージャのクラス名とjarファイル名を入力します。
ユーザー/グループ・モデルに適合しない認可要件を持つソースについては、認可プラグインによって、さらに柔軟なセキュリティ・モデルが提供されます (認証はIDプラグインで処理されます)。
認可プラグインを使用すると、クローラ・プラグインでは、ドキュメント属性と同様のセキュリティ属性を追加できます。 認可プラグインはログイン時に起動され、問合せ文字列に対してセキュリティ・フィルタを構築します。 このセキュリティ・フィルタは、各ドキュメントのセキュリティ属性の値に対して適用されます。 セキュリティ属性の値がセキュリティ・フィルタと一致したドキュメントのみがユーザーに戻されます (すべてのセキュリティ属性は文字列値です)。
認可プラグインには、次のコンポーネントのいずれかまたは両方を含めることができます。
QueryFilterPlugin: 現行ユーザーのセキュリティ属性のリストを取得します。 ユーザーがメンバーであるグループ(またはセキュリティ・ロール)のリストを戻すことができます。 たとえば、resp
が職責に対するGRANT
セキュリティ属性で、User1
がログインした場合、QueryFilterPlugin.getSecurityValues("resp")
はUser1
の職責に対応する値の配列を戻します。 これらの値を使用して、User1
とその職責に対して認可されたドキュメントを戻すためのフィルタを構築できます。
ResultFilterPlugin: 問合せ時間認可(QTA)を実装します。 ヒットリストが作成されると、Oracle SESは結果フィルタ・プラグインをコールして、ユーザーが各ドキュメントの参照を認可されているかどうかをチェックします。 ヒットリストにリストされるのは、ユーザーが参照を許可されているドキュメントのみです。 結果フィルタは、唯一のセキュリティ・デバイスとして使用したり、他のセキュリティと組み合せて使用できます。 また、結果フィルタを使用してタイトルまたは表示URLを変更できます。
注意: QTAを実装する方法としてResultFilter をお薦めします(QueryTimeFilter ではなく)。 |
ユーザー定義セキュリティ・モデルを使用すると、Oracle SESでは、管理者が新規のユーザー定義ソースを定義する前に認可ページが表示されます。 UserDefinedSecurityModel
インタフェースによって、AuthorizationManager
インタフェースを実装するクラスの名前、および特定ユーザーに対するセキュリティ・フィルタの構築に使用するセキュリティ属性の名前とタイプ(GRANT
またはDENY
)が戻されます。
問合せ時間認可により、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には、次のインタフェースと例外が含まれています。
表7-6 問合せ時間認可のインタフェースおよび例外
インタフェース/例外 | 説明 |
---|---|
|
このインタフェースは、検索時に検索結果をフィルタしてドキュメント情報にアクセスします。 このインタフェースを実装するオブジェクトがソースに割り当てられている場合は、そのソースに属している検索結果やドキュメントの他の取得は、このフィルタを通過してからエンド・ユーザーに表示されます。 |
|
この例外は、失敗が発生したことを示すために |
|
このインタフェースは、ドキュメント、フォルダまたはソース全体を除外するために |
|
このインタフェースは、ドキュメントを除外するために |
|
このインタフェースは、フォルダの参照を制御するために |
ResultFilterPlugin
インタフェースを実装するクラスは、実行中のOracle SES検索アプリケーションのライフタイム中は存続するように設計する必要があります。 通常は、ResultFilterPlugin
の単一インスタンスにより様々な検索エンド・ユーザーからの複数のコンカレント要求が処理されます。したがって、このクラスのfilterDocuments
、pruneSource
、filterBrowseFolders
および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
で使用されるクラスがみつからない場合、ログ・ファイルにエラー・メッセージが書き込まれ、そのソースからの全ドキュメントは処理中の検索リクエストについて除外されます。