検索とインデックス作成について
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
ゲストブックの検索とインデックス作成を有効にする
手順1/6
デフォルトでは、Liferay DXPは、人気のあるLucene検索ライブラリに支えられた検索エンジンであるElasticsearchを使用して、検索およびインデックス機能を実装します。 データベースを検索することもできますが、それにはリソースを占有するテーブルのマージが必要です。 代わりに、Elasticsearchのような検索エンジンは、検索可能なエンティティを ドキュメント変換します。 Elasticsearchでは、ドキュメントはJSONオブジェクトに変換された検索可能なデータベースエンティティです。 ゲストブックエントリのインデックス作成を実装すると、Liferay DXPはエントリごとにドキュメントを作成します。 インデックスコードは、各ゲストブックエントリドキュメントに追加するゲストブックエントリフィールドを指定し、すべてのゲストブックエントリドキュメントをインデックスに追加します。 検索は、検索クエリに一致するドキュメントへのポインターを含む ヒット オブジェクトを返します。 インデックスを介した検索エンジンを使用したエンティティの検索は、データベース内のエンティティの検索よりも高速です。 Elasticsearchは、関連性スコアリングやファジー検索クエリなどの追加機能を提供します。
検索エンジンに加えて、Liferay DXPには独自の検索インフラストラクチャがあります。 Liferay DXPは、既存のElasticsearch APIに次の機能を追加します。
- 索引付けされたドキュメントは、@製品が必要とするフィールドを含む@(例えば、
entryClassName
、entryClassPK
、assetTagNames
、assetCategories
、企業ID
、のgroupId
、ステージング状態)。 - 適切なフィルターを検索要求に適用することにより、返される検索結果の範囲が適切であることを保証します。
- アクセス許可のチェックとヒットサマリーを提供して、検索ポートレットに表示します。
ここに示した検索およびインデックス作成コードがカスタムモデルをシームレスに検索可能にする方法を理解するには、検索およびインデックス作成サイクルの各部分に影響を与える方法を知る必要があります。
インデックス作成:モデルエンティティはデータベースにデータフィールドを格納します。 たとえば、Guestbooksは name フィールドを保存します。 サイクルのインデックス作成ステップでは、後で検索中に使用される検索エンジンに送信されるモデルのフィールドを定義することにより、モデルエンティティを検索可能に準備します。
検索エンジンドキュメントでモデルエンティティフィールドのインデックスを作成する方法に影響を与えるには、
ModelDocumentContributor
クラスは、モデルエンティティの検索エンジンドキュメントでインデックスを作成するデータベースフィールドを指定します。 このクラスの Contributor
メソッドは、エンティティのサービスレイヤーの add
および update
メソッドが呼び出されるたびに呼び出されます。
ModelIndexerWriterContributor
クラスは、モデルエンティティの再インデックス付けとバッチ再インデックス付けの動作を構成します。 このクラスのメソッドは、コントロールパネル→設定→検索にある検索管理アプリケーションからインデックスの再作成がトリガーされたときに呼び出されます。
検索: ほとんどの検索は、ユーザーが検索バーにキーワードを入力することから始まります。 入力されたキーワードは、バックエンドの検索インフラストラクチャによって処理に変換されている クエリ 検索エンジンが理解できる、と各検索文書のフィールドにマッチさせるため。
モデルエンティティドキュメントの検索方法を制御するには、
KeywordQueryContributor
クラスは、進行中の検索クエリに句を提供します。 これは検索時に呼び出され、インデックスを作成したすべてのフィールドも検索対象になるようにします。 たとえば、サイトロケールが追加されたフィールド(たとえば、title_en_us
)にインデックスを付ける場合、ドキュメントの検索時に同じロケールを検索クエリに含める必要があります。 検索クエリに別のロケール( title_es_ES
)が含まれる場合、またはプレーンフィールド(title
)を検索する場合、不正確な結果が返されます。
ModelPreFilterContributor
、検索結果が検索エンジンから返される前にフィルターされる方法を制御します。 たとえば、ワークフローステータスをクエリに追加すると、ゴミ箱内のエンティティが検索結果に返されなくなります。 ゲストブックアプリケーションの場合、ワークフロー対応ゲストブックのセクションに到達するまで、 ModelPrefilterContributor
は必要ありません。
返される結果: 検索リクエスト中にモデルエンティティのインデックス付き検索ドキュメントが取得されると、モデルエンティティの概要に変換されます。
モデルエンティティドキュメントの結果概要に影響を与えるには、
ModelSummaryContributor
クラスは、各検索ドキュメント用に作成された サマリー
オブジェクトを取得するため、特定のフィールドを追加するか、表示されるコンテンツの長さを設定することにより、オブジェクトを操作できます。
ModelVisibilityContributor
クラスは、検索コンテキストで他のアセットタイプにアタッチできるモデルエンティティ(たとえば、ファイルエントリをWikiページにアタッチできる)の可視性を制御します。 ゲストブックとゲストブックエントリは他のアセットに添付されないため、モデルの可視性の貢献者は必要ありません。
上記のクラスが検索フレームワークによって検出されることを確認するために、1つの重要なステップを実行する必要があります。
登録
Liferayの検索フレームワークにモデルエンティティを登録するには、
SearchRegistrar
秒は、モデルエンティティのについての特定のものを定義するために、検索フレームワークのレジストリを使用して ModelSearchDefinition
オプションの検索サービスは、あなたのエンティティのために登録されているフィールドは、検索エンジンからの文書を取得するために、デフォルトで使用され、そして:。 登録は、コンポーネントがアクティブ化されるとすぐに発生します(ポータルの起動中)。
いくつかのゲストブックにインデックスを付けましょう。