問題
- 2 つの ddm-date フィールドを持つカスタム Web コンテンツ構造があります。 カスタム フィルター ウィジェットを使用して、これら 2 つのフィールド間の日付の範囲を検索およびフィルター処理したいと考えています。
Environment
- Liferay DXP 7.3
解決策
重要な注意: 「カスタム フィルター」 ウィジェットを使用する代わりに、 「ブループリントの検索」 機能を利用することも可能です。これにより、Elasticsearch クエリを Liferay 検索機能に直接適用できます。詳細については、次を参照してください。
ElasticSearch を使用して、次のようなネストされたクエリを作成する必要があります。
{
"query": {
"nested": {
"path": "ddmFieldArray",
"query": {
"bool": {
"must": [{
"range": {
"ddmFieldArray.ddmFieldValueKeyword_en_US_String_sortable": {
"gte": "2021-07-01",
"lt": "2021-12-28"
}
}
}]
}
},
"score_mode": "avg"
}
}
}
Liferay Custom Filter Widget を使用して、以下の構造を作成する必要があります。
1 つの親フィルターと 2 つの子フィルター。
例ごと:
最初の日付フィールド:
フィルタリングするフィールドの名前: ddm__keyword__38106__date1_en_US
日付範囲 [2021-07-01 ~ 2021-12-28] 両方の日付を含む
-
最初のカスタム フィルター ウィジェット: (親)
- フィルタ フィールド: ddmFieldArray
- フィルター値: (空)
- フィルタ クエリ タイプ: ネスト
- 発生: フィルタ
- クエリ名: nested_query
- 親クエリ名: (空)
-
秒のカスタム フィルター: (最初の子)
- フィルタ フィールド: ddmFieldArray.ddmFieldName
- フィルター値: ddm__keyword__38106__date1_en_US
- フィルタ クエリ タイプ: 一致
- 発生: フィルタ
- クエリ名: (空)
- 親クエリ名: nested_query
-
3 番目のカスタム フィルター: (2 番目の子)
- フィルター フィールド: ddmFieldArray.ddmFieldValueKeyword_en_US_String_sortable
- フィルタ値: [2021-07-01 2021-12-28]
- フィルタ クエリ タイプ: 範囲
- 発生: フィルタ
- クエリ名: (空)
- 親クエリ名: nested_query
2 番目の日付フィールド:
フィルタリングするフィールドの名前: ddm__keyword__38106__date2_en_US
日付範囲 [2021-07-01 ~ 2021-12-28] 両方の日付を含む
-
最初のカスタム フィルター ウィジェット: (親)
- フィルタ フィールド: ddmFieldArray
- フィルター値: (空)
- フィルタ クエリ タイプ: ネスト
- 発生: フィルタ
- クエリ名: nested_query_2
- 親クエリ名: (空)
-
秒のカスタム フィルター: (最初の子)
- フィルタ フィールド: ddmFieldArray.ddmFieldName
- フィルター値: ddm__keyword__38106__date2_en_US
- フィルタ クエリ タイプ: 一致
- 発生: フィルタ
- クエリ名: (空)
- 親クエリ名: nested_query_2
-
-
3 番目のカスタム フィルター: (2 番目の子)
- フィルター フィールド: ddmFieldArray.ddmFieldValueKeyword_en_US_String_sortable
- フィルタ値: [2021-07-01 2021-12-28]
- フィルタ クエリ タイプ: 範囲
- 発生: フィルタ
- クエリ名: (空)
- 親クエリ名: nested_query_2
-
3 番目のカスタム フィルター: (2 番目の子)