33 Lucene検索エンジンの構成
トピック:
WebCenter Sitesの検索機能の概要
WebCenter Sitesをインストールすると、WebCenter Sitesデータベースの検索機能とLuceneが使用可能になります。LuceneエンジンはWebCenter Sitesのインストール時に設定され、コンテンツ・コントリビュータ、Webサイト訪問者およびサードパーティのアプリケーションがアセットを検索できます。
この章には、Lucene検索エンジンの使用方法、追加のアセットを検索可能にする方法、検索エンジンを一時停止または無効にする方法に関する情報が含まれています。
トピック:
検索のための索引付け機能
「コントリビュータ」検索は、WebCenter Sitesデータベースではなく、Lucene検索索引に対して実行されます。検索索引は索引付けと呼ばれる自動プロセスによって作成され、検索時にアセット・データを収集して、すぐに取得できる書式で格納します。
検索結果は、検索の実行時に索引内で使用可能なデータのみに基づいて返されます。索引内に含まれるアセットが多くなるほど、構築と検索にかかる時間が長くなります。
索引付けするアセットのタイプは、検索の構成フォームで選択します。選択したアセットが索引付けされ、検索できるようになります。索引付けから除外したアセット・タイプは、索引付けされず、検索できません。
索引が構築されると、Lucene検索エンジンが30秒ごとに、索引付けに選択されたアセット・タイプに対する変更をチェックします。変更(新しい検索アイテムの作成、既存のエントリの編集、エントリの削除など)が行われた場合、Luceneによって索引が更新されます。デフォルトで、索引データは<cs_shared_dir>/lucene
ディレクトリ(<cs_shared_dir>
はSites共有ファイル・システム・ディレクトリ)に格納されます。
WebCenter Sitesの検索機能の使用
WebCenter Sitesには、グローバル検索、アセット・タイプ検索、さらに最も詳細な検索機能である「アセット・タイプ索引の属性の構成」といった検索機能があります。この検索オプションは、索引付け対応のアセット・タイプの検索可能な属性を指定できることから、アセット・タイプ索引オプションのサブセットになります。
システム上のすべての検索を有効にすることができます。検索は、索引付けされたユーザー定義の属性の格納方法によって区別されます。
グローバル検索では、システム定義の属性を個別に索引付けし、ユーザーが固有の属性によって検索できるようにします。アセットのユーザー定義の属性値は、1つの表のセルにまとめて格納されます。属性名は省略されます。グローバル検索を構成すると、ユーザーはアセット・タイプごとにすべてのユーザー定義の属性を検索するように制限されることになります。
たとえば、記事のアセットがあるとします。Jane Doeという文字列で検索できるかもしれませんが、固有のユーザー定義の属性1つだけに検索を絞ることはできません。すべてのユーザー定義の属性データは1つのセルにまとめて格納されており、そのセルでは属性同士は区別されないからです。
アセット・タイプ検索は、各属性値を属性名ごとに独自の個別セルで索引付けします。アセット・タイプ検索は、パブリック・サイト検索APIで使用され、Webサイト上の検索機能を有効にします。『Oracle WebCenter Sitesでの開発』のパブリック・サイト検索の使用に関する項を参照してください。
アセット・タイプ検索では、グローバル検索にはない固有性のレベルで検索結果を得ることができるのです。アセット・タイプ検索は、グローバル検索よりも短時間で検索結果を戻すことができます。アセット・タイプ検索では、関連する属性のみに検索を限定することで、不必要な索引データで検索を実行する必要がなくなります。
アセット・タイプ検索の属性の構成を使用すると、アセット・タイプ検索によって有効になっているアセット・タイプに対して指定した属性のみに、検索を制限することができます。
次の図と表には、Luceneベースの各検索の相違点と、それらの粒度のレベルが示されています。各表は、同じ記事タイプのアセットの索引を表していますが、それぞれの検索機能のタイプが異なっています。これらすべての表では、システム定義の属性データのみが同じ方法で格納されています。
ノート:
次の表は、グローバル検索、アセット・タイプ検索、属性固有の検索の粒度を示すものです。索引付けされたデータが検索エンジンによって格納される方法を示すものではありません。
検索では、データの索引付け方法以外に、次の表にまとめたような様々な機能が有効になります。
表33-1 検索機能
グローバル索引 | アセット・タイプ索引 |
---|---|
選択されているすべてのアセット・タイプを通じて検索できます。 |
アセット・タイプごとに検索できます(複数のアセット・タイプを有効にできます)。 |
選択されているすべてのアセット・タイプに対して1つの索引を作成します。 |
アセット・タイプごとに1つの索引を作成します。 |
システム定義属性による検索をサポートします。 |
システム定義属性とカスタム属性による検索をサポートします。 |
(アセット・タイプ索引の属性の構成を使用して)システム定義属性をフィルタできます。 |
(アセット・タイプ索引の属性の構成を使用して)システム定義属性とカスタム定義属性をフィルタできます。 |
ライブ・サイト上のパブリック検索をサポートします。 |
ライブ・サイト上のパブリック検索をサポートします。 |
Sites CECS統合のための要件、スコープおよびスプリント計画の体験の検索APIに関する項を参照してください。
検索索引の設定
Luceneを設定する主なステップは、次のとおりです。
次のトピックの情報を使用して、Luceneエンジンを設定します。
Lucene検索エンジンの有効化
この項では、Luceneエンジンを有効化する方法について説明します。
Luceneエンジンを起動するには::
- 「一般的な管理」ツリーで、「管理」ノード、「検索」ノードの順に展開し、「検索エンジン索引の開始/停止」をダブルクリックします。
- 「検索エンジンの起動」をクリックします。
Luceneで、選択したデータの索引付けを開始できるようになります。データの索引付けにかかる時間は、索引付けされるアセットの数と、使用しているシステムの速度によって異なります。
Lucene検索エンジンは、一度起動したら、無効化されるまで継続して実行されます。索引付けの実行中は、選択したアセット・タイプに対する変更が検出され、索引が更新されます。索引の実行中、アセット・タイプのステータスは「有効」と表示されます。検索機能を削除する場合は、索引付けを停止するだけでなく、索引データを削除する必要もあります。索引データの削除を参照してください。
検索索引へのアセット・タイプの追加
この項では、グローバル検索索引とアセット・タイプ索引にアセット・タイプを追加する方法について説明します。各初期索引が作成されると、Luceneは5秒ごとに変更を確認します。デフォルトで、索引データは<cs_shared_dir>/lucene
ディレクトリ(<cs_shared_dir>
はWebCenter Sites共有ファイル・システム・ディレクトリ)に格納されます。データは、追加された後、索引付けが全面的に停止されるか、選択したアセット・タイプに対して一時停止されるまで、維持されます。Luceneが索引付けするまで、選択したタイプのアセットが検索機能によって戻されることはありません。
検索索引に新しいアセット・タイプを追加するには::
-
Luceneエンジンを有効化します。
-
「一般的な管理」ツリーで、「管理」ノード、「検索」ノードの順に展開し、「検索エンジン索引の開始/停止」をダブルクリックします。
-
「検索エンジンの起動」をクリックします。
-
-
グローバル検索索引にアセット・タイプを追加します。
-
「グローバル検索の構成」をダブルクリックします。
-
「索引」リストで、「追加」を選択します。WebCenter Sitesに、現在索引付けされていないアセット・タイプのリストが表示されます。
-
「アセット・タイプ」のリストで、索引付けするアセット・タイプを選択します。
-
「OK」をクリックします。
-
確認ポップアップ・ダイアログで、「OK」をクリックします。アセット・タイプのステータスが「有効」に変わり、選択したアセット・タイプに対して索引付けが有効になります。このタイプの最初のアセットが作成されるとすぐに、そのアセット・タイプに対して索引が作成されます。
-
-
アセット・タイプ検索索引にアセット・タイプを追加します。
-
「アセット・タイプ検索の構成」をダブルクリックします。
-
「索引」リストで、「追加」を選択します。
WebCenter Sitesに、現在索引付けされていないアセット・タイプのリストが表示されます。
-
リストで、索引付けするアセット・タイプを選択します。
-
「OK」をクリックします。
確認のポップアップ・ダイアログが開いたら、「OK」をクリックします。
アセット・タイプのステータスが「有効」に変わり、選択したアセット・タイプに対して索引付けが有効になります。このタイプの最初のアセットが作成されるとすぐに、そのアセット・タイプに対して索引が作成されます。
-
-
必要に応じて、バイナリ・ファイルの索引付けを有効にします(「バイナリ索引作成の開始」をクリックします)。バイナリ・ファイルの索引付けの詳細は、「バイナリ・ファイルの索引付け」を参照してください。
アセット・タイプ索引に対する属性の構成
特定のアセット・タイプの固有の属性に対する索引付けを構成できます。選択されたアセット・タイプの固有の属性が選択できるようにするには、まずそのアセット・タイプに対して索引付けを有効にする必要があります。Luceneを有効にして、ライブ・サイト上で検索を実行したら、索引付けされた属性データが検索条件と一致したアセットが返されます。
選択されたアセット・タイプの属性を構成するには::
バイナリ・ファイルの索引付け
バイナリ・ファイルとは、WordやPDFドキュメントなど、テキスト以外のタイプのファイルのことです。アセットがバイナリ・ファイルを参照しない場合や、参照先のファイルに索引付けのできないコンテンツ(画像やビデオ)が含まれている場合は、このオプションを無効のままにしておくことができます。
この項の内容は次のとおりです。
バイナリ・ファイルの索引付けの有効化
索引付けのキューに追加した1つ以上のアセット・タイプで、WebCenter Sitesファイル・システム内に格納されたバイナリ・ファイルを参照するように設定する場合、これらのバイナリ・ファイルを参照するアセットを索引付けするときに、Luceneによってバイナリ・ファイルのコンテンツをテキストに変換するように構成できます。デフォルトでは、Luceneは、索引付けされたアセットが参照するすべてのバイナリ・ファイルを無視するように設定されています。
バイナリ・ファイルの索引付けを有効化するには::
-
Luceneエンジンが有効でない場合は、これを有効にします。
-
「一般的な管理」ツリーで、「管理」ノード、「検索」の順に展開し、「検索エンジン索引の開始/停止」をダブルクリックします。
-
「検索エンジンの起動」をクリックします。
ボタン名が「検索エンジンの停止」に変わります。
-
-
「一般的な管理」ツリーで、「管理」ノードを開き、「検索」を開きます。
-
次のいずれかを実行します。
-
グローバル検索に対してバイナリ・ファイルの索引付けを有効化するには、「グローバル検索の構成」をダブルクリックします。
-
アセット・タイプ検索に対してバイナリ・ファイルの索引付けを有効化するには、「アセット・タイプ検索の構成」をダブルクリックします。
-
-
「バイナリ索引作成の開始」をクリックします。
索引付けされたアセットが参照するすべてのバイナリ・ファイルが、Luceneによってテキストに変換されます。
バイナリ・ファイルの索引付けの無効化
索引付けされたアセットが参照するバイナリ・ファイルのコンテンツを、Luceneによって変換する必要がなくなったと判断したら、この機能を無効化してパフォーマンスを向上させることができます。
バイナリ・ファイルの索引付けを無効化するには::
-
Luceneエンジンが有効でない場合は、これを有効にします。
-
「一般的な管理」ツリーで、「管理」ノード、「検索」の順に展開し、「検索エンジン索引の開始/停止」をダブルクリックします。
-
「検索エンジンの起動」をクリックします。
ボタン名が「検索エンジンの停止」に変わります。
-
-
「一般的な管理」ツリーで、「管理」ノードを開き、「検索」を開きます。
-
次のいずれかを実行します。
-
グローバル検索に対してバイナリ・ファイルの索引付けを無効化するには、「グローバル検索の構成」をダブルクリックします。
-
アセット・タイプ検索に対してバイナリ・ファイルの索引付けを無効化するには、「アセット・タイプ検索の構成」をダブルクリックします。
-
-
「バイナリ索引作成の終了」をクリックします。
Luceneは、索引付けされたアセットが参照するすべてのバイナリ・ファイルを無視するようになります。
Lucene検索エンジンの無効化
パフォーマンスを向上させる場合は、Luceneエンジンを停止することができます。このエンジンを停止すると、アセットを追加または削除したり、索引付けを一時停止することができません。アセットの索引を再作成することもできません。
索引付けを停止するには:
検索索引の維持
Luceneの設定後は、アセットに対する一括操作、索引の再作成、索引データの削除、または検索エンジンの固有の問合せのためのコード記述を行うために、索引付けの一時停止などのタスクを実行する必要が生じる場合があります。
この項の内容は次のとおりです。
索引付けの一時停止と再開
索引付けの一時停止と停止は、類似した機能です。索引付けを一時停止する場合、選択したアセット・タイプの索引付けを一時停止できます。検索索引を停止すると、すべてのアセットの索引付けが停止されます。
多数のアセットを追加および削除する場合は、追加または削除するアセット・タイプの索引付けを一時停止することで、プロセスの速度を上げることができます。これらの変更内容を検索索引に反映させるには、索引の再作成機能を使用して、追加または削除したすべてのアセット・タイプの索引付けを行う必要があります。
グローバルおよびアセット・タイプの索引付けの一時停止
索引付けが有効になっている場合、WebCenter Sitesデータベースに追加または更新されたすべてのアセットは、保存後に索引付けされます。多数のアセットを保存する場合、そのアセット・タイプの索引付けを一時停止すると、処理速度が上がります。アセットがデータベースに追加されたら、索引付けを再開し、すべてのアセット・タイプの索引を再作成して、すべての新しい(および既存の)アセットの索引付けを一度に行います。
一時停止しても、検索では既存の索引に対する結果が引き続き返されます。ただし、索引付けの一時停止後に行われたデータベースへの変更は索引付けされません。このため、索引付けの一時停止後のデータベースへの変更は、検索結果に反映されなくなります。
索引付けを一時停止するには:
-
Luceneエンジンが有効でない場合は、これを有効にします。
-
「一般的な管理」ツリーで、「管理」ノード、「検索」の順に展開し、「検索エンジン索引の開始/停止」をダブルクリックします。
-
「検索エンジンの起動」をクリックします。
ボタン名が「検索エンジンの停止」に変わります。
-
-
「一般的な管理」ツリーで、「管理」ノードを開き、「検索」を開きます。
-
次のいずれかを実行します。
-
グローバル検索に対して索引付けを一時停止するには、「グローバル検索の構成」をダブルクリックします。
-
アセット・タイプ検索に対して索引付けを一時停止するには、「アセット・タイプ検索の構成」をダブルクリックします。
-
-
「索引」リストで、「一時停止」を選択します。
WebCenter Sitesに、索引付けを一時停止できるアセット・タイプのリストが表示されます。
-
「アセット・タイプ」のリストで、索引付けを一時停止するアセット・タイプを選択します。
ノート:
リストで「一時停止」を選択したときにアセット・タイプが表示されない場合は、そこで処理を中止します。すべてのアセット・タイプに対して索引付けが一時停止されているか、索引付けのためのアセット・タイプが選択されていないからです。
-
操作の選択肢が表示されるリストの横にある「OK」ボタンをクリックします。
-
確認のポップアップ・ダイアログが開いたら、「OK」をクリックします。
Lucene検索エンジンによって、選択されたタイプのアセットに対する索引付けが一時停止され、索引データが保存されます。アセット・タイプのステータスが「一時停止」に変わります。
索引の再作成
アセットの索引の再作成にかかる時間は、索引付けされるアセットの数と使用しているシステム構成によって異なります。選択したタイプのアセットに対して更新された検索結果が返されるのは、Lucene検索エンジンがこれらを索引付けしてからです。
アセットの索引を再作成するには:
-
Luceneエンジンが有効でない場合は、これを有効にします。
-
「一般的な管理」ツリーで、「管理」ノード、「検索」ノードの順に展開し、「検索エンジン索引の開始/停止」をダブルクリックします。
-
「検索エンジンの起動」をクリックします。
-
-
「一般的な管理」ツリーで、「管理」ノードを開き、「検索」ノードを開きます。
-
次のいずれかを実行します。
-
グローバル検索に対して索引を再作成するには、「グローバル検索の構成」をダブルクリックします。
-
アセット・タイプ検索に対して索引を再作成するには、「アセット・タイプ検索の構成」をダブルクリックします。
-
-
「索引」リストで、「索引の再作成」を選択します。
WebCenter Sitesには、現在、索引用に選択されているアセット・タイプが表示されます。
ノート:
リストで「索引の再作成」を選択したときにアセット・タイプが表示されない場合は、そこで処理を中止します。索引付けのキューにアセット・タイプが存在しないか、キューの中のすべてのアセット・タイプに対する索引付けが一時停止になっているからです。
-
リストから、索引データを構築(または再構築)するアセット・タイプを選択します。
-
「OK」をクリックします。
-
確認のポップアップ・ダイアログが開いたら、「OK」をクリックします。
索引付けが開始されます。
選択されたアセット・タイプのステータスが「有効」に変わります。
選択したタイプのアセットに対して更新された検索結果が返されるのは、Lucene検索エンジンがこれらを索引付けしてからです。
索引データの削除
特定のタイプのアセットに対して検索を実行する必要がなくなった場合、不要なデータを索引から削除すれば、検索結果がさらにすばやく返ってくるようになります。
また、索引付けを停止した後に多数のアセットを削除した場合も、索引を削除する必要が生じることがあります。このような場合、該当する索引データを削除してから残りのアセットの索引を再作成した方が、通常の索引付けプロセスよりも速いことがあります。
索引データを削除する場合、WebCenter Sitesはまず選択したアセット・タイプのアセットの索引付けを一時停止し、続いてそれらのアセットの索引データを削除します。索引からデータを削除すると、選択したタイプのアセットの索引データが使用できなくなります。検索結果では、選択されたタイプのアセットによるデータが返されなくなります。
索引からデータを削除するには::
検索索引の問合せコードの記述
次のコードは、Lucene検索エンジンの索引を問い合せる方法を示すサンプル・コードです。このコードは、ユーザーが特定のサイトと特定のアセット・タイプに対する検索を実行する必要があり、サイトはcurrentSite、タイプはassetTypeという変数で渡されるという前提に基づいています。グローバル索引に対する問合せを記述するにはコードを使用します。Lucene検索エンジンからは、すべてのアセットか、指定したサイトに属するタイプについて指定されたmaxResults (合計がmaxResultsよりも大きい場合)が返されます。
import COM.FutureTense.CS.Factory; import COM.FutureTense.Interfaces.ICS; import com.fatwire.cs.core.search.data.ResultRow; import com.fatwire.cs.core.search.engine.*; import com.fatwire.cs.core.search.query.Operation; import com.fatwire.cs.core.search.query.QueryExpression; import com.fatwire.cs.core.search.source.IndexSourceConfig; import com.fatwire.cs.core.search.source.IndexSourceMetadata; import com.fatwire.search.engine.SearchEngineConfigImpl; import com.fatwire.search.query.QueryExpressionImpl; import com.fatwire.search.source.IndexSourceConfigImpl; import com.fatwire.search.source.SearchIndexFields; import java.util.Collections; public class SearchTest { public static void main(String[] args) { SearchTest searchTest = new SearchTest(); String assetType = "Content_C"; int maxResults = 100; try { searchTest.testSelect(assetType, maxResults); } catch (Exception e) { // } } public void testSelect(String assetType, int maxResults) throws Exception { ICS ics = Factory.newCS(); IndexSourceConfig srcConfig = new IndexSourceConfigImpl(ics); SearchEngineConfig engConfig = new SearchEngineConfigImpl(ics); IndexSourceMetadata sourceMd = srcConfig.getConfiguration("Global"); String engineName = sourceMd.getSearchEngineName(); SearchEngine eng = engConfig.getEngine(engineName); String currentSite = (String) sourceMd.getProperty(SearchIndexFields.Global.SITEID); QueryExpression siteExpr = new QueryExpressionImpl(SearchIndexFields.Global.SITEID, Operation.CONTAINS, currentSite); siteExpr = siteExpr.or(SearchIndexFields.Global.SITEID, Operation.EQUALS, "0"); QueryExpression typeQ = new QueryExpressionImpl(SearchIndexFields.Global.ASSET_TYPE, Operation.EQUALS, assetType); QueryExpression qe = typeQ.and(siteExpr); qe.setMaxResults(maxResults); SearchResult<ResultRow> res = eng.search(Collections.singletonList("Global"), qe); } }