プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Sitesでの開発
12c (12.2.1.2.0)
E82734-02
目次へ移動
目次

前
次

80 パブリック・サイト検索の使用

WebCenter Sitesには、検索索引の管理用に新しいフレームワークがあります。このフレームワークは、編集インタフェースとライブ・サイトの両方における検索の基盤を構成します。ライブ・サイトとは訪問者側のことです。そのため、パブリック・サイト検索という名前が付いています。

トピック:

80.1 検索フレームワークについて

検索フレームワークは、検索API、特別なアセット・イベント・リスナー、キューのポーリング・システムで構成されています。このフレームワークは、イベント管理フレームワークおよびキュー管理フレームワークと共同で使用されます。このトピックでは、主に検索フレームワークについて説明します。

注意:

主に検索APIの使用方法に関心がある場合は、このトピックを省略できます。

図80-1は、検索エンジンの統合フレームワークが、WebCenter Sitesの他の部分とどのように連携するかを表しています。

図80-1 検索エンジンの統合

図80-1の説明が続きます
「図80-1 検索エンジンの統合」の説明
  1. アセット・フレームワークは、アセットへの変更や追加を検出し、イベントを送信します。

  2. 登録されているリスナーは、永続キューの実装を使用して、変更をキューに入れます。任意のイベントは、1つまたは多数の永続キューに入れることができます。各キューは、検索索引用データのソースと見なすことができます。

  3. アセット・イベントがキューに入れられると、バックグラウンド・プロセスがキューの内容を空にして検索APIにルーティングします。

  4. 検索APIは、適切な(構成可能な)検索エンジン・ベンダーの実装を選択し、索引付けプロセスを開始します。

80.2 索引タイプ

WebCenter Sitesでは、Global索引とAssetType索引という2つのタイプの索引が作成されます。Global索引は、すべてのデータ(Global索引に対して有効化されたすべてのアセット・タイプ)の索引です。複数のアセット・タイプでフレーズや式を検索する場合(Googleのような検索インタフェースの作成を試みるなど)、Global索引はより適切です。

Global索引には、索引のすべてのフィールドのデータが含まれますが、パラメータ検索に適した形式ではデータは格納されません。AssetType索引には、特定のアセット・タイプの索引付けされた情報が、パラメータで検索可能な方法で格納されています。Adminインタフェースは、アセット・タイプ検索の構成をサポートしています(索引付け可能なアセット・タイプの属性ベース検索を含む)。検索構成オプションの詳細は、『Oracle Fusion Middleware Oracle WebCenter Sitesの管理』の検索索引へのアセット・タイプの追加に関する項を参照してください。

この項には次のトピックが含まれます:

80.2.1 Global索引

Global索引は、グローバル検索のUIを作成するためにOracle WebCenter Sites: Contributorインタフェースで使用されます。索引のインスタンスは配信サーバーにも存在します。配信サーバーの索引はパブリック・サイト検索の作成に使用できます。

検索が構成された後に、ライブ・サイトにパブリッシュされたアセットのみを検索できます。データは、パブリッシュ時に索引付けされます。検索が構成される前にライブ・サイト上に存在していたすべてのアセットは、(アセットがライブ・サイトで再度索引付けされるまで)Global索引には反映されません。

検索索引機能はおおむねデータベース表に類似しています。

表80-1では、Global索引のフィールドについて説明します。

注意:

フィールド名では、大文字と小文字が区別されます。

表80-1 Global索引のフィールド

フィールド名 説明

defaultSearchField

これには、索引が付けられたアセットのデータがすべて含まれます。これは、全文検索で検索対象とするフィールドです。

これには、アセットのすべての属性の索引データが含まれます(バイナリ・フィールド・データも含む)。すべての属性のデータがこの単一フィールドにマージされ、索引が付けられます。索引自体にはこのフィールドのデータは格納されませんが、全文検索は可能です。

注意: 検索文字列は、大文字ではなく、小文字のみで入力する必要があります。

id

これにはアセットIDが含まれます。

AssetType

これにはアセット・タイプ(Content_C/Product_P)が含まれます。

locale

これには、ロケール文字列(たとえば、en_US)が含まれます。

name

これには、アセットの名前が含まれます。

description

アセットに関連付けられた説明。

subtype

サブタイプの名前(フレックス定義名)。

subtypeid

サブタイプのID (フレックス定義ID)。

updateddate

索引付けの時点で検出された最終更新日。

siteid

このアセットが使用できるすべてのサイトのID。

startdate

アセット表の開始日フィールド。

enddate

アセット表の終了日フィールド。

80.2.2 アセット・タイプ索引

アセット・タイプ索引は、Adminインタフェースから「管理」タブ「検索」「アセット・タイプ検索の構成」を選択して有効化されると作成されます。アセット・タイプが有効化されると、/shared/lucene/<アセット・タイプ名>の下に索引が作成されます。この索引には、索引のフィールドとして指定されたタイプの属性がすべて含まれます。

表80-2では、Content_C索引のフィールドについて説明します。

注意:

フィールド名では、大文字と小文字が区別されます。

表80-2 アセット・タイプ索引のフィールド

フィールド名 説明

DefaultSearchField

これには、索引が付けられたアセットのデータがすべて含まれます。これは、全文検索で検索対象とするフィールドです。

これには、アセットのすべての属性の索引データが含まれます(バイナリ・フィールド・データも含む)。すべての属性のデータがこの単一フィールドにマージされ、索引が付けられます。

索引自体にはこのフィールドのデータは格納されませんが、全文検索は可能です。

注意: 検索文字列は、大文字ではなく、小文字のみで入力する必要があります。

id

これにはアセットIDが含まれます

AssetType

これにはアセット・タイプ(Content_C/Product_P)が含まれます

locale

ロケール文字列(例、en_US)が含まれます

name

アセットの名前

description

アセットに関連付けられた説明

subtype

サブタイプの名前(フレックス定義名)

subtypeid

サブタイプのID (フレックス定義ID)

updateddate

索引付けの時点で検出された最終更新日。

siteid

このアセットが使用できるすべてのサイトのID

startdate

アセット表の開始日フィールド

enddate

アセット表の終了日フィールド

Dimension

ディメンションのID

Dimension-parent

ディメンション親のID

createdby

このアセットを作成したユーザー名

createddate

アセットが作成された日付

Publist

このアセットが属するサイト名のリスト

Relationships

関連アイテムのアセットID(フレックスのみ)

externaldoctype

未使用

filename

静的パブリッシュで使用されるファイル名

flextemplateid

フレックス定義のID(フレックスのみ)

fw_uid

このアセットのグローバルに一意のID

path

静的パブリッシュで使用されるパス

renderid

フレックス・アセットに割り当てられたテンプレート・アセットのオブジェクトID。

ruleset

ルールセットのXML文書

status

アセットに関連付けられたステータス

subtype

サブタイプ名

subtypeid

サブタイプのID (フレックスのみ)

template

テンプレート名

updatedby

このアセットを最終更新したユーザー名

updateddate

最終更新日

urlexternaldoc

未使用

urlexternaldocxml

未使用

FSIIAbstract

フレックス属性

FSIIBody

フレックス属性

FSIIByline

フレックス属性

FSIIDescriptionAttr

フレックス属性

FSIIHeadline

フレックス属性

FSIINameAttr

フレックス属性

FSIIPostDate

フレックス属性

FSIISubheadline

フレックス属性

FSIITemplateAttr

フレックス属性

どのフィールドが索引で使用できるかを視覚化するには、次に示すアドレスから入手できるツールLukeを使用します。

http://www.getopt.org/luke/

このツールを起動すると、ツールの参照機能を使用して、索引(例: ../shared/lucene/Content_C)を含むフォルダを検索するだけで索引をロードできます。

80.3 検索APIについて

検索APIを使用するとき、SearchEngineインタフェースおよびQueryExpressionインタフェースを操作します。

トピック:

80.3.1 SearchEngine

SearchEngineインタフェースは、検索エンジンの実装の重要な機能である索引付けと検索を定義します。使用可能なSearchEngineの詳細は、『Oracle Fusion Middleware Oracle 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の関連性は高くなります。

80.3.2 QueryExpression

QueryExpressionインタフェースは、検索条件を定義するための汎用インタフェースです。すべての検索エンジンが、問合せを作成するためのネイティブ・フォーマットをサポートしています。ネイティブ・フォームにはワイルドカードの定義、関連性のヒントなどが含まれます。これらは、検索エンジンごとに固有となる傾向があります。

検索エンジンは基本の問合せ構成も提供し、プログラム的に作成できます(フィールド一致に関するAND & OR)。制限はありますが、これらは一般化されたプログラム可能なインタフェースという観点で考えることができます。

QueryExpressionは、次に示す、検索エンジンの問合せの4種類の特性をカプセル化します。

  • ネイティブ・テキスト検索フォーマット: ほとんどの検索エンジンは、検索用の非常に高度なネイティブ・フォーマット(ワイルド・カードや特別なヒントなどを含む)をサポートします。これは、getStringFormat()を通じて使用できます。

  • 論理積と論理和: and()メソッドとor()メソッドを使用する条件のANDとOR。

  • ページ区切り: getStartIndex()メソッドとgetMaxResults()メソッドを使用。

  • ソート: getSortOrder()を使用。

80.3.3 問合せ式の構成

  1. 検索索引付けが有効化されていることを確認します。

    SystemEvents表で、SearchIndexEventが有効である(enabled field =1)ことを確認します。これはバックグラウンドで常に実行されるように構成されます(*:*:* */*/*)。実際には、約30秒ごとに実行されます。

  2. アセット・リスナーが登録されていることを確認します。

    アセットは、アセット・イベントを使用して検索フレームワークで処理するためにキューに入れられます。アセット・イベントは、AssetListener_reg表に登録されています。エントリが表80-3に存在していることを確認します。存在していない場合は追加します。

表80-3 AssetListener_reg表

ID リスナー ブロッキング

1153937286234

com.openmarket.basic.event.SearchAssetIdEventListener

はい

IndexSourceMetaDataConfig: IndexSource用の構成情報を格納する表。これは索引自体の構造と性質を説明します。これには、デフォルトでGlobal用の行が必要です。アセット・タイプ索引用に有効化されたどのアセット・タイプも、この表に行を追加します。

SearchEngineMetaDataConfig: 検索エンジンの構成を格納します。この表には、デフォルトではLucene用の行が必要です。

これらはインストーラで正しく構成され、Adminインタフェースで管理されます。

デフォルトはこれで十分です。構成の正確な定義と意味の詳細は、「詳細構成」を参照してください。

80.4 詳細構成

ほとんどの場合はデフォルトのままで十分ですが、一部のユースケースでは、LuceneパラメータおよびAnalyzerFactoryを構成する必要があります。

トピック:

80.4.1 Luceneパラメータの構成

注意:

一部のパラメータは、索引が実行時に行う方法で重大な変更を引き起こす可能性があります。Luceneのドキュメントを参照し、検証を信頼して、サイトの最適な設定を決定します。デフォルトを変更する特別な理由がない場合は、デフォルトのままにしておくことを強くお薦めします。

Lucene検索エンジンでは、索引の作成方法と実行方法を決定する特定の一連のパラメータで索引を作成できます。Luceneのデフォルトのパラメータは合理的ですが、WebCenter Sitesには、それらを変更する方法が管理者用に用意されています。

SearchEngineMetaDataConfig表では、索引ごとに1行が含まれます。各行には、コンテンツがLuceneパラメータの構成に使用される、propertiesという名前のフィールドがあります。次に示すように、パラメータ値のペアはセミコロン(;)で区切られます。

param1=value1;param2=value2

表80-4では、WebCenter Sitesでサポートされているパラメータについて説明します。

表80-4 WebCenter Sitesでサポートされているパラメータ

パラメータ 説明

mergeFactor

Integer

セグメント索引がマージされる頻度を決定します。

値が小さければ、索引付け中に使用されるRAMは少なく、最適化されていない索引の検索は速くなりますが、索引付けのスピードは遅くなります。

値が大きければ、索引付け中に使用されるRAMは多く、最適化されていない索引の検索は遅くなりますが、索引付けは速くなります。そのため、より大きい値(> 10)がバッチ索引作成に適しており、より小さい値(< 10)は対話型で維持される索引に適しています。

これは2より小さくしないでください。デフォルト値は10です。

maxMergeDocs

Integer

これまでにマージされたドキュメントの最大数を決定します。小さい値(たとえば、10000より小さい)が対話形式の索引付けに最適なのは、これが索引付けの一時停止の長さを数秒に制限するためです。大きい値はバッチ索引付けと高速検索に最適です。

デフォルトは最大整数値(231-1)。

maxBufferedDocs

Integer

バッファされたインメモリー・ドキュメントのマージ中や新規のセグメントが作成される前に必要とされるドキュメントの最小数を決定します。

デフォルトは10

optimizeInterval

Integer

optimize()コール間の時間間隔(秒単位)を決定します。デフォルト値は30秒です。これは、ほとんどのシステムでの推奨値です。大幅にデータを変更する場合は、このパラメータを300から600秒までの範囲の値に設定します。

commitLockTimeout

Long

コミット・ロックまで待機する最大時間を設定します(ミリ秒単位)。

デフォルトは10000

maxFieldLength

Integer

ドキュメントの1つのフィールドに索引付けされる用語の最大数。これは索引付けに必要なメモリーの容量を制限します。これにより、非常に大きなファイルのコレクションの索引付けプロセスがメモリー不足によってクラッシュする事態を防げます。

これは大きなドキュメントを効果的に切り捨て、ドキュメントにさらに付けられる索引用語から削除することに注意してください。大きいソース・ドキュメントをサポートするには、見込まれるサイズを格納できるようにこの値を大きく設定します。それを整数の最大値(231-1)に設定する場合、制限があるのはメモリーのみであるため、OutOfMemoryErrorを想定しておく必要があります。

デフォルトでは、10000より多い用語はフィールドに索引付けされません。

termIndexInterval

Integer

索引付けされた用語間の間隔を設定します。大きい値ではIndexReaderで使用されるメモリーが少なくなりますが、用語へのランダムアクセスは遅くなります。小さい値ではIndexReaderで使用されるメモリーが多くなるため、用語へのランダムアクセスが速くなります。

このパラメータは、問合せ用語を含むドキュメントの数に関係なく、問合せ用語ごとに必要な計算量を決定します。特に、用語を特定して、その頻度と位置の情報を処理する前に、スキャンする必要のあるその他の用語の最大数となります。

ユーザー入力の問合せ用語を指定したサイズの大きい索引では、問合せ処理時間の大半が、用語参照ではなく、頻度データと位置データの処理によって占められる可能性があります。サイズの小さい索引の場合、または一般的でない問合せ用語が多数生成される場合(ワイルドカード問合せなど)は、処理時間の大半が用語参照によって占められます。特に、IndexReaderではnumUniqueTerms/interval(一意の用語数/時間間隔)用語がメモリーに読み込まれ、平均すると、ランダムな用語アクセスごとにinterval/2terms(時間間隔/2つの用語)をスキャンする必要があります。

デフォルト値は128

useCompoundFile

String (yesまたはnoである必要があります)

複合ファイルの使用をオンにするための設定。オンの場合、セグメントの作成が終了すると、各セグメントの複数のファイルが1つのファイルにマージされます。

writeLockTimeout

Long

書込みロックまで待機する最大時間を設定します。

デフォルト値は1000

80.4.2 カスタムAnalyzerFactoryの構成

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>