検索ブループリントの理解
検索ブループリントを使用すると、カスタムコードをデプロイすることなく、検索ページのエクスペリエンスをユーザーのニーズに合わせてカスタマイズできます。 設計図があれば
- 文脈を考慮した検索ページを作成します。 例えば、Webコンテンツの記事を検索ユーザーとの近接性でブーストします。
- どのフィールドを検索するかを明示的に宣言します。 例えば、
userNameフィールドを宣言しないようにすることが可能です。 - 特定のカテゴリーを持つアセットを一定期間ブーストします。 例えば、Liferay Commerceの製品をカテゴリー別に宣伝する季節のキャンペーンを作成します。
- カスタムフィルターウィジェット が満たすあらゆるユースケースは、ブループリントで対応できます。 例えば、検索されたキーワードにマッチする特定のフィールドをブーストします。
検索対象や検索方法を制御する必要がある場合、検索ブループリントは必要な機能です。
Liferayのデフォルトの検索エクスペリエンスの設定方法は、時間の経過とともに進化してきました。 最新のLiferay DXPリリースでは、すぐに検索結果(類義語セットと 結果ランキング)を調整したり、カスタムファセットを追加したり、カスタムフィルタを使用して複雑な検索カスタマイズを行うことができます。 しかし、これらの構成には限界があり、検索機能の強いサイトの多くは、検索インフラストラクチャのバックエンドコードのカスタマイズを必要とします。 これには、JavaベースのモジュールをLiferayのOSGiランタイムにデプロイする必要があります。
このコード中心の機能セットを基盤とするのではなく、ブループリントは異なるアプローチを採用しています。これは、カスタムコードを導入することなく、検索ページのクエリをほぼ完全に制御する必要があるユーザー向けです。 ブループリントは、ほとんどすべてのユースケースを満たすことができるUIベースの設定エクスペリエンスを提供します(機能の初期のイテレーションでなくても、機能セットがさらに強固になった後続バージョンで)。
ブループリントとは
検索ブループリントは、Liferayが検索リクエストをどのように処理するかを定義する要素とコア構成を使用して構築します。
ブループリント: 検索ブループリントは、Liferay の検索動作の設計プランです。 ほとんどのユーザーにとって、検索エクスペリエンスは 検索バー から始まります。 検索語が入力されると、Liferayの検索インフラストラクチャによって複雑なクエリが構築され、検索エンジンに送信されます。 検索インサイト ウィジェットを使用すると、Liferayの完全なクエリを確認できます。 このクエリはLiferayの検索ページのデフォルトのブループリントと考えることができ、何がどのように検索されるかを制御します。
要素: これらは、設計図を作成するために組み合わせる構成要素です。 各要素は、特定の検索動作を定義するJSONフラグメントによって支えられています。 既成の要素を使用することも、要素エディタを使用して独自の要素を作成することもできます。 これらの要素は検索リクエストにロジックを追加することで機能するため、ブループリントのコア設定との相互作用を考慮する必要があります。
ブループリントがクエリ句を組み合わせる方法
ブループリントは、最終的な検索リクエストにカスタム条項を挿入する追加レイヤーとして機能します。 結果として得られるクエリは、カスタム要素とブループリントのコア構成の組み合わせであり、以下の3つの要素によって決定されます。
-
適用範囲:特定のサイト、アセットライブラリ、またはスペースに基づいて結果を絞り込む場合に使用します。
-
検索可能なタイプ:これを使用して、選択したアセットタイプ(例:基本的なウェブコンテンツ、ブログ、ドキュメント)によって提供されるロジックを管理します。
-
フレームワーク貢献者: これらの詳細設定を使用して、特定の汎用クエリ貢献者またはアセット固有のクエリ貢献者を切り替えることができます。
クエリ要素は、権限フィルターや公開フィルターなどのデフォルトのシステムクエリ句と競合する可能性があります。 最終的な検索リクエストが期待どおりであることを確認するために、必ずプレビューツールを使用して設定をテストしてください。
設計図を作成するには、まず想定しているユースケースから始めましょう。 デフォルトの検索エクスペリエンスをどのように変更したいかを決定し、提供されている要素を確認して、それらを使用してカスタマイズを開始できるかどうかを検討してください。 設計図ができたら、次はそれを作成する番です。
詳細については、 ブループリントの作成と管理 を参照してください。
ブループリントのUIでできること
ブループリントを使用して検索ソリューションを作成するには、要素を組み合わせてブループリントを作成し、それをページに適用します。 そのために用意されている機能は以下の通りです。
| 機能 | ブループリントで利用できる? |
|---|---|
| クエリビルダーを使用して、視覚的にブループリントを構築する | ✔ |
| Liferay UIでJSONを使用してブループリントを構成する | ✔ |
| ブループリントの作成を簡素化するために、デフォルトの要素を活用する | ✔ |
| Elasticsearch クエリ をカスタム要素として使用する | ✔ |
| Elasticsearchのクエリからカスタム要素を作成する | ✔ |
| ブループリントのカスタムJSON要素の作成 | ✔ |
| JSONを直接編集して詳細なブループリントの設定を作成する | ✔ |
| ブループリント適用時に、どのLiferayエンティティを検索可能にするかを選択する | ✔ |
| Liferayのインデクサフレームワークからの句と個々のクエリ句のコントリビューターを含めるかどうかを選択する | ✔ |
| JSONを使用して、詳細設定(集計、ソート、ハイライトなど)を行うことができる | ✔ |
| 設計図の範囲を特定のサイト、アセットライブラリ、またはスペースに限定する | ✔ |
検索ブループリントUIの機能に加え、検索ウィジェットも強化され、検索ページにブループリントを適用できるようになりました。
検索リクエストの理解
ブループリントとは、LiferayからElasticsearchへの検索リクエストの内容を制御する方法です。 したがって、(必ずしも必要ではありませんが)ユーザーの検索エクスペリエンスの仕組みを理解することと、Liferayのデフォルトの検索クエリの主要コンポーネントについて高度な理解を組み合わせることは役立ちます。
検索リクエスト: LiferayはElasticsearchに検索リクエストを送ります。これにはクエリボディとElasticsearchが返すレスポンスを指示するための追加パラメータを含めることができます。
クエリ: クエリボディは、一致するコンテンツがインデックスにあるかどうかを判断する方法を検索に指示します。 例えば、 title フィールドを含むインデックス付きコンテンツを検索する場合、どのようなクエリを使用すればよいのでしょうか。 また、 title のフィールドにマッチする場合は、スコアをブーストすべきでしょうか。
句: 句は、メインの bool クエリの自己完結部分です。 ほとんどの場合、ネストされたクエリの1つは、 句が呼び出しされたときに参照されるものです。
メインのLiferayクエリはbool親クエリで、多数の子クエリをラップします。 主に2つのoccurs句から構成されます。must and filter. ブループリントは、両方の句に影響を与えることができます。 filter句にはフィルタータイプの要素が、クエリタイプの要素には must boolean句の下に句が追加されています。
Liferayの検索機能はすべて最終的にJSONのElasticsearchのクエリに変換されます。 ここでは、検索バーウィジェットに"test"という単語を入力して生成されたクエリのほんの一部をご紹介します。
{
"from": 0,
"size": 20,
"query": {
"bool": {
"must": [
{
"bool": {
"must": [
{
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"comments": {
"query": "test"
}
}
}
],
"should": [
{
"match_phrase": {
"comments": {
"query": "test",
"slop": 50
}
}
},
{
"match_phrase": {
"comments": {
"query": "test",
"boost": 2
}
もう少し掘り下げると、次のbooleanクエリは、一致する結果のスコアにコントリビュートする句がある場合、コンテンツフィールドの検索語"test"に対してmatchクエリを満たす必要があることを命令しています。 さらに、コンテンツフィールドの マッチフレーズクエリ が一致した場合、結果のスコアは 2 の値でブーストされます。
{
"bool": {
"must": [
{
"match": {
"content": {
"query": "test"
}
}
}
],
"should": [
{
"match_phrase": {
"content": {
"query": "test",
"slop": 50
}
}
},
{
"match_phrase": {
"content": {
"query": "test",
"boost": 2
}
}
}
]
}
}
これらは、要素で追加するタイプの句です。
検索リクエストの部分は、ブループリントUIとその設定オプションにマッピングすることができます。
