検索ブループリントの結果の並べ替え
検索ブループリントに ソート設定 を追加して、検索結果の順序を制御します。
-
グローバルメニュー() を開き、 [アプリケーション] タブをクリックし、 [ブループリント] を選択します。
-
ブループリントを作成するか、既存のブループリントを開きます。
-
[Configuration] タブをクリックし、[Sort Configuration]テキストエリアにJSONを入力します。
-
検索ページでソートを設定するために、Sort widget と検索ブループリントの両方を使用することは避けてください。 Liferayは一貫した動作を保証できません。
-
以下の例は簡単なものです。 堅牢なソート構成は、あらゆるシナリオを考慮する必要があります。 例えば、検索結果ドキュメントにソートフィールドが含まれていない場合、
missing
パラメーターを使用してソートの動作を設定することができます。詳しくは、 Elasticsearch’s sorting documentation をご覧ください。
例1:タイトル順に並べ替える
ソート設定とは、昇順(asc
)または降順(desc
)で並べ替えるフィールドを定義する sorts
配列を持つJSONオブジェクトです。
{
"sorts": [
{
"localized_title_${context.language_id}_sortable": "asc"
}
]
}
-
特に
title
のようなローカライズされたテキストフィールドでは、類似した名前のフィールドバリエーションが検索ドキュメントに含まれることがあります。localized_title_en_US_sortable
など、フィールドのローカライズされ、ソート可能なキーワードのバリエーションを使用します。 各エンティティのドキュメントを確認し、使用可能なフィールドを探します。 例えば、title_sortable
は共通のフィールドですが、同じエンティティにlocalized_title_en_US_sortable
も含まれることがあります。 -
言語IDを直接入力する代わりに、
${context.language_id}
変数を使用して、4文字の言語コード (例:en_US
) を現在の言語で自動入力することができます。 -
文書のフィールドを見るには、ブループリントのツールバーの_Preview_をクリックし、検索を実行し、その結果のフィールドを展開します。
例2:ストラクチャー項目による並べ替え
Webコンテンツストラクチャーフィールドは、検索エンジンのドキュメントにネストされたフィールドとしてインデックスされます。
ドキュメントを表示すると、入れ子になったプロパティは ddmFieldArray
の下に表示されます。
"ddmFieldArray" : [
{
"ddmFieldName" : "ddm__keyword__30805__department_en_US",
"ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
"ddmFieldValueKeyword_en_US" : "true",
"ddmFieldValueKeyword_en_US_String_sortable" : "true"
}
]
ネストされたフィールドを含むドキュメントを表示するには、
-
ドキュメント
_source
の取得を有効にするには、ブループリントの [設定] タブを開き、このJSONを[詳細設定]ボックスに入力します。{ "source": { "fetchSource": true } }
-
ツールバーの プレビュー をクリックし、ネストしたフィールドを持つ結果を検索し、そのフィールドを展開します。
ネストされたフィールドの場合、ソート構成のフィールド宣言はより複雑になります。
{
"sorts": [
{
"ddmFieldArray.ddmFieldValueKeyword_${context.language_id}_String_sortable": {
"nested": {
"nested_path": "ddmFieldArray",
"nested_filter": {
"term": {
"ddmFieldArray.ddmFieldName": {
"value": "ddm__keyword__30805__department_${context.language_id}"
}
}
}
},
"order": "asc"
}
}
]
}
例3:オブジェクトフィールドによる並べ替え
オブジェクトエントリーフィールドは、検索エンジンドキュメントにネストされたフィールドとしてインデックスされます。
ドキュメントを表示する際、オブジェクトのネストされたプロパティは nestedFieldArray
の下に表示されます。
"nestedFieldArray" : [
{
"fieldName": "total",
"valueFieldName": "value_integer",
"value_integer": "8"
}
]
ネストされたフィールドを含むドキュメントを表示するには、
-
ドキュメント
_source
の取得を有効にするには、ブループリントの [設定] タブを開き、このJSONを[詳細設定]ボックスに入力します。{ "source": { "fetchSource": true } }
-
ツールバーの プレビュー をクリックし、ネストしたフィールドを持つ結果を検索し、そのフィールドを展開します。
この例では、オブジェクトの整数フィールドで並べ替えます。
{
"sorts": [
{
"nestedFieldArray.value_integer": {
"nested": {
"nested_path": "nestedFieldArray",
"nested_filter": {
"term": {
"nestedFieldArray.fieldName": "total"
}
}
},
"order": "desc"
}
}
]
}