WebCenter Sitesには、検索索引の管理用に新しいフレームワークがあります。このフレームワークは、編集インタフェースとライブ・サイトの両方における検索の基盤を構成します。ライブ・サイトとは訪問者側のことです。そのため、パブリック・サイト検索という名前が付いています。
この章では、検索フレームワークを紹介し、パブリック・サイト検索を作成する際のAPIの使用方法について説明します。
この章には次の項が含まれます。
注意: 主に検索APIの使用方法に関心がある場合は、この項を省略できます。 |
図43-1は、検索エンジンの統合フレームワークが、WebCenter Sitesの他の部分とどのように連携するかを表しています。
検索フレームワークは、検索API、特別なアセット・イベント・リスナー、キューのポーリング・システムで構成されています。このフレームワークは、イベント管理フレームワークおよびキュー管理フレームワークと共同で使用されます。このドキュメントでは、主に検索フレームワークについて説明します。
アセット・フレームワークは、アセットへの変更や追加を検出し、イベントを送信します。
登録されているリスナーは、永続キューの実装を使用して、変更をキューに入れます。任意のイベントは、1つまたは多数の永続キューに入れることができます。各キューは、検索索引用データのソースと見なすことができます。
アセット・イベントがキューに入れられると、バックグラウンド・プロセスがキューの内容を空にして検索APIにルーティングします。
検索APIは、適切な(構成可能な)検索エンジン・ベンダーの実装を選択し、索引付けプロセスを開始します。
WebCenter Sitesでは、Global
索引とAssetType
索引という2つのタイプの索引が作成されます。Global
索引は、すべてのデータ(Global
索引に対して有効化されたすべてのアセット・タイプ)の索引です。複数のアセット・タイプでフレーズや式を検索する場合(Googleのような検索インタフェースの作成を試みるなど)、Global
索引はより適切です。
Global
索引には、索引のすべてのフィールドのデータが含まれますが、パラメータ検索に適した形式ではデータは格納されません。AssetType
索引には、特定のアセット・タイプの索引付けされた情報が、パラメータで検索可能な方法で格納されています。WebCenter Sites Adminインタフェースは、アセット・タイプ検索の構成をサポートしています(索引付け可能なアセット・タイプの属性ベース検索を含む)。検索構成オプションの詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。
この項の内容は、次のとおりです。
Global
索引は、グローバル検索のUIを作成するためにContributorインタフェースで使用されます。索引のインスタンスは配信サーバーにも存在します。配信サーバーの索引はパブリック・サイト検索の作成に使用できます。
検索が構成された後に、ライブ・サイトにパブリッシュされたアセットのみを検索できる点に注意してください。データは、パブリッシュ時に索引付けされます。検索が構成される前にライブ・サイト上に存在していたすべてのアセットは、(アセットがライブ・サイトで再度索引付けされるまで)Global
索引には反映されません。
検索索引機能はおおむねデータベース表に類似しています。Global
索引を構成するフィールドは次のとおりです。
注意: フィールド名では、大文字と小文字が区別されます。 |
表43-1 Global索引のフィールド
フィールド名 | 説明 |
---|---|
|
このフィールドには、索引が付けられたアセットのデータがすべて含まれます。これは、全文検索で検索対象とするフィールドです。
|
|
このフィールドには、アセットIDが含まれます。 |
|
このフィールドには、アセット・タイプ(Content_C/Product_P)が含まれます。 |
|
このフィールドには、ロケール文字列(たとえば、 |
|
このフィールドには、アセットの名前が含まれます。 |
|
アセットに関連付けられた説明。 |
|
サブタイプの名前(フレックス定義名)。 |
|
サブタイプのID(フレックス定義ID)。 |
|
索引付けの時点で検出された最終更新日。 |
|
このアセットが使用できるすべてのサイトのID。 |
|
アセット表の開始日フィールド。 |
|
アセット表の終了日フィールド。 |
アセット・タイプ索引は、Adminインタフェースから「管理」タブ→「検索」→「アセット・タイプ検索の構成」を選択して有効化されると作成されます。アセット・タイプが有効化されると、/shared/lucene/<アセット・タイプ名>
の下に索引が作成されます。この索引には、索引のフィールドとして指定されたタイプの属性がすべて含まれます。たとえば、Content_C
の索引には次のフィールドが含まれます。
注意: フィールド名では、大文字と小文字が区別されます。 |
表43-2 アセット・タイプ索引のフィールド
フィールド名 | 説明 |
---|---|
|
このフィールドには、索引が付けられたアセットのデータがすべて含まれます。これは、全文検索で検索対象とするフィールドです。
索引自体にはこのフィールドのデータは格納されませんが、全文検索は可能です。 |
|
これにはアセットIDが含まれます |
|
これにはアセット・タイプ(Content_C/Product_P)が含まれます |
|
ロケール文字列(例、en_US)が含まれます |
|
アセットの名前 |
|
アセットに関連付けられた説明 |
|
サブタイプの名前(フレックス定義名) |
|
サブタイプのID(フレックス定義ID) |
|
索引付けの時点で検出された最終更新日。 |
|
このアセットが使用できるすべてのサイトのID |
|
アセット表の開始日フィールド |
|
アセット表の終了日フィールド |
|
ディメンションのID |
|
ディメンション親のID |
|
このアセットを作成したユーザー名 |
|
アセットが作成された日付 |
|
このアセットが属するサイト名のリスト |
|
関連アイテムのアセットID(フレックスのみ) |
|
未使用 |
|
静的パブリッシュで使用されるファイル名 |
|
フレックス定義のID(フレックスのみ) |
|
このアセットのグローバルに一意のID |
|
静的パブリッシュで使用されるパス |
|
フレックス・アセットに割り当てられたテンプレート・アセットのオブジェクトID。 |
|
ルールセットのXML文書 |
|
アセットに関連付けられたステータス |
|
サブタイプ名 |
|
サブタイプのID(フレックスのみ) |
|
テンプレート名 |
|
このアセットを最終更新したユーザー名 |
|
最終更新日 |
|
未使用 |
|
未使用 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
|
フレックス属性 |
どのフィールドが索引で使用できるかを視覚化するには、次に示すアドレスから入手できるツールLukeを使用します。
http://www.getopt.org/luke/
このツールを起動すると、ツールの参照機能を使用して、索引(例: ../shared/lucene/Content_C
)を含むフォルダを検索するだけで索引をロードできます。
この項の内容は、次のとおりです。
SearchEngine
インタフェースは、検索エンジンの実装の重要な機能である索引付けと検索を定義します。SearchEngineの詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。
検索データのソースはSearchEngine
に提供されます。SearchEngine
が、索引付けリクエストに応じて検索索引を作成するのは、まだ作成されていない場合やIndexSource
のアクセッサに基づいてコンテンツを更新する場合です。
index()
は、任意のIndexSource
インスタンスから操作します。検索エンジンの実装詳細に応じて、IndexSource
から取得する新規データ、修正データ、削除データを操作します(ほとんどの検索エンジンでは、修正されるすべてのものは最初に削除し、再度索引を付ける必要があります)。
index()
は、IndexSource
の任意のインスタンスで索引ライフサイクル・メソッド(startIndexing()
とendIndexing()
)も起動します。
search()
は、1つまたは多数の索引(IndexSources
)に対してQueryExpression
で動作します。1つの結果セットが得られ、関連性(または、指定されている場合や複数の索引で使用可能な場合はSortOrder
)を基準にソートされます。
必要に応じて、構成検索インタフェース(IndexSourceConfig
)が、IndexSource
のプロパティを検索できるSearchEngine
インスタンスに提供されます。
QueryConverter
インタフェースがSearchEngine
に提供されます。このインタフェースはQueryExpression
をネイティブ・フォームに変換します(特定の検索エンジンで認識できます)。これにより、検索エンジンが外部で使用する問合せ言語を制御できます。
SearchResult
は、検索エンジンから返される結果を抽象化したものです。SearchResult
は、IndexRow
のサブクラスであるResultRow
のイテレータで、関連性情報が含まれています。getRelavence()
メソッドは倍精度実数を返します。値が大きいほど、特定の問合せに対するこのResultRow
の関連性は高くなります。
QueryExpression
インタフェースは、検索条件を定義するための汎用インタフェースです。すべての検索エンジンが、問合せを作成するためのネイティブ・フォーマットをサポートしています。ネイティブ・フォームにはワイルドカードの定義、関連性のヒントなどが含まれます。これらは、検索エンジンごとに固有となる傾向があります。
検索エンジンは基本の問合せ構成も提供し、プログラム的に作成できます(フィールド一致に関するAND & OR
)。制限はありますが、これらは一般化されたプログラム可能なインタフェースという観点で考えることができます。
QueryExpression
は、次に示す、検索エンジンの問合せの4種類の特性をカプセル化します。
ネイティブ・テキスト検索フォーマット: ほとんどの検索エンジンは、検索用の非常に高度なネイティブ・フォーマット(ワイルド・カードや特別なヒントなどを含む)をサポートします。これは、getStringFormat()
を通じて使用できます。
論理積と論理和: and()
メソッドとor()
メソッドを使用する条件のANDとOR。
ページ区切り: getStartIndex()
メソッドとgetMaxResults()
メソッドを使用。
ソート: getSortOrder()
を使用。
検索索引付けが有効化されていることを確認します。
SystemEvents
表で、SearchIndexEvent
が有効である(対応フィールド=1)ことを確認します。これはバックグラウンドで常に実行されるように構成されます(*:*:* */*/*
)。実際には、約30秒ごとに実行されます。
アセット・リスナーが登録されていることを確認します。
アセットは、アセット・イベントを使用して検索フレームワークで処理するためにキューに入れられます。アセット・イベントは、AssetListener_reg
表に登録されています。次のエントリがこの表に存在していることを確認します(存在していない場合は追加します)。
表43-3 AssetListener_reg表
ID | リスナー | ブロッキング |
---|---|---|
1153937286234 |
|
はい |
IndexSourceMetaDataConfig
: IndexSource
用の構成情報を格納する表。これは索引自体の構造と性質を説明します。これには、デフォルトでGlobal
用の行が必要です。アセット・タイプ索引用に有効化されたどのアセット・タイプも、この表に行を追加します。
SearchEngineMetaDataConfig
: 検索エンジンの構成を格納します。この表には、デフォルトではLucene用の行が必要です。
これらはインストーラで正しく構成され、Adminインタフェースで管理されます。
デフォルトはこれで十分です。構成の正確な定義と意味は、このチュートリアルの後ろの箇所で、ある程度詳しく説明します(第43.4項「詳細構成」を参照)。
次の各項では、特定の状況で必要になる詳細構成の側面を説明します。ただし、ほとんどの場合、デフォルトで十分です。
この項の内容は、次のとおりです。
注意: これらのパラメータの一部は、索引が実行時に行う方法で重大な変更を引き起こす可能性があります。Luceneのドキュメントを参照し、検証を信頼して、サイトの最適な設定を決定します。デフォルトを変更する特別な理由がない場合は、デフォルトのままにしておくことを強くお薦めします。 |
Lucene検索エンジンでは、索引の作成方法と実行方法を決定する特定の一連のパラメータで索引を作成できます。Luceneのデフォルトのパラメータは合理的ですが、WebCenter Sitesには、それらを変更する方法が管理者用に用意されています。
IndexSourceMetaDataConfig
表では、システムで検索する索引ごとに1行が含まれます。各行には、コンテンツがLuceneパラメータの構成に使用される、properties
という名前のフィールドがあります。次に示すように、パラメータ値のペアはセミコロン(;)で区切られます。
param1=
value1;
param2=
value2
表43-4は、WebCenter Sitesでサポートされているパラメータのリストです。
表43-4 WebCenter Sitesでサポートされているパラメータ
パラメータ | 型 | 説明 |
---|---|---|
|
整数 |
セグメント索引がマージされる頻度を決定します。 値が小さければ、索引付け中に使用されるRAMは少なく、最適化されていない索引の検索は速くなりますが、索引付けのスピードは遅くなります。 値が大きければ、索引付け中に使用されるRAMは多く、最適化されていない索引の検索は遅くなりますが、索引付けは速くなります。そのため、より大きい値(> 10)がバッチ索引作成に適しており、より小さい値(< 10)は対話型で維持される索引に適しています。 これは |
|
整数 |
これまでにマージされたドキュメントの最大数を決定します。小さい値(たとえば、10000より小さい)が対話形式の索引付けに最適なのは、これが索引付けの一時停止の長さを数秒に制限するためです。大きい値はバッチ索引付けと高速検索に最適です。 デフォルトは最大整数値(231-1)。 |
|
整数 |
バッファされたインメモリー・ドキュメントのマージ中や新規のセグメントが作成される前に必要とされるドキュメントの最小数を決定します。 デフォルトは |
|
整数 |
optimize()コール間の時間間隔(秒単位)を決定します。デフォルト値は30秒です。これは、ほとんどのシステムでの推奨値です。大幅にデータを変更する場合は、このパラメータを300から600秒までの範囲の値に設定します。 |
|
Long型 |
コミット・ロックまで待機する最大時間を設定します(ミリ秒単位)。 デフォルトは |
|
整数 |
ドキュメントの1つのフィールドに索引付けされる用語の最大数。これは索引付けに必要なメモリーの容量を制限します。これにより、非常に大きなファイルのコレクションの索引付けプロセスがメモリー不足によってクラッシュする事態を防げます。 これは大きなドキュメントを効果的に切り捨て、ドキュメントにさらに付けられる索引用語から削除することに注意してください。ソース・ドキュメントが大きい場合は、見込まれるサイズを格納できるようにこの値を大きく設定します。それを整数の最大値(231-1)に設定する場合、制限があるのはメモリーのみであるため、OutOfMemoryErrorを想定しておく必要があります。 デフォルトでは、10000より多い用語はフィールドに索引付けされません。 |
|
整数 |
索引付けされた用語間の間隔を設定します。大きい値ではIndexReaderで使用されるメモリーが少なくなりますが、用語へのランダムアクセスは遅くなります。小さい値ではIndexReaderで使用されるメモリーが多くなるため、用語へのランダムアクセスが速くなります。 このパラメータは、問合せ用語を含むドキュメントの数に関係なく、問合せ用語ごとに必要な計算量を決定します。特に、用語を特定して、その頻度と位置の情報を処理する前に、スキャンする必要のあるその他の用語の最大数となります。ユーザー入力の問合せ用語を指定したサイズの大きい索引では、問合せ処理時間の大半が、用語参照ではなく、頻度データと位置データの処理によって占められる可能性があります。サイズの小さい索引の場合、または一般的でない問合せ用語が多数生成される場合(ワイルドカード問合せなど)は、処理時間の大半が用語参照によって占められます。特に、IndexReaderではnumUniqueTerms/interval(一意の用語数/時間間隔)用語がメモリーに読み込まれ、平均すると、ランダムな用語アクセスごとにinterval/2terms(時間間隔/2つの用語)をスキャンする必要があります。 デフォルト値は |
|
String ( |
複合ファイルの使用をオンにするための設定。オンの場合、セグメントの作成が終了すると、各セグメントの複数のファイルが1つのファイルにマージされます。 |
|
Long型 |
書込みロックまで待機する最大時間を設定します。 デフォルト値は |
Luceneでは、アナライザがテキストから索引用語を抽出するためのポリシーを表します。アナライザは、索引付け時や、中止語句の削除や空白の削除などの様々なタスクの検索時に使用されます。
異なるアナライザが、様々なロケールを処理するためにLuceneリポジトリに存在します。多くの場合、アナライザはシノニムの注入やアクセント付き文字の正常な処理に使用されます。また、Luceneの標準アナライザのいずれかをベースに使用して、独自のアナライザを構築することもできます。
WebCenter SitesのLuceneの実装は、英語用の汎用目的アナライザであるStandadAnalyzer
を使用します。ただし、WebCenter Sitesはプラグイン・インタフェースのAnalyzerFactory
を通じてカスタム・アナライザをサポートします。構成されたAnalyzerFactory
は、索引付けまたは検索のプロセスで必要な場合にアナライザの検索に使用されます。AnalyzerFactory
は、次の場合にアナライザを検索します。
索引全体の作成時
問合せの解析時
個々の行の索引付け時
カスタムAnalyzerFactory
をプラグインするにはAnalyzerFactory
インタフェースを実装して登録する必要があります。登録は、SearchEngineMetaDataConfig
表で行を変更して実行します。「名前」フィールドがLucene
に設定されている行のproperties
フィールドに、次のものを追加します。
AnalyzerFactory=<fully qualified class name of your custom AnalyzerFactory>