インデックス付きフィールドの探索
検索ドキュメントのフィールドを調べる方法や検索エンジンのフィールド マッピングを調べる方法がわかっている場合は、一部の検索機能を構成できます。
利用可能なインデックス フィールドは、Liferay のバージョン間で予告なく変更される場合があります。
| 機能 | 関連する構成 | ユースケース | どこを見るべきか |
|---|---|---|---|
| カスタムファセット | 集約フィールド | キーワード と数値フィールドの検索 (例: 整数、 倍精度浮動小数点数、 長整数) | ドキュメントソース フィールドマッピング |
| カスタムフィルター | フィルターフィールド フィルタークエリタイプ | 特定のクエリに適切なフィールドタイプを見つける 結果スコアを確認してブースティングを調整する | ドキュメントソース フィールドマッピング 検索インサイトのレスポンス文字列 |
| 検索API | 検索リクエスト本文 | ファセット構成でフィールドを設定する | ドキュメントソース フィールドマッピング |
| ブループリントの検索 | 集計と並べ替えの構成や、 正確な用語一致で非表示 や 複数フィールドのテキスト一致などの要素を含むさまざまな場所。 | 特定のクエリに適切なフィールドタイプを見つける 結果スコアを確認してブースティングを調整する | ブループリントのプレビュー フィールドのマッピング |
| 並べ替えウィジェット | インデックス付きフィールド名 | 並べ替え可能なフィールドを見つける 並べ替え可能なバリアントフィールドまたはサブフィールドを見つける | ドキュメントソース フィールドマッピング |
ドキュメントソースの検査
インデックス付き検索ドキュメント ソースを調べると、コンテンツ フィールドとアプリケーション フィールドがどのようにインデックス付けされ、各フィールドにマッピングがどのように適用されたかを正確に確認できます。 たとえば、ネストされたオブジェクト フィールドのマッピングがインデックスにどのように格納されるかを確認できます。 ただし、ドキュメント ソースではデータのタイプを表示できず、マップされたサブフィールドは含まれません。
ドキュメント形式で検索結果を表示する
検索エンジンから返されたドキュメント ソースを検査できます。 検索結果ウィジェットには、返された結果をドキュメント形式で表示する構成 結果をドキュメント形式で表示 があります。 詳細については、「 検索エンジンドキュメントの検査 」を参照してください。
返されたドキュメントのフィールドを検査することは、特定のタイプのインデックス付きフィールド名と値を見つけるのに役立ちます。 たとえば、オブジェクトの日付フィールドがどのようにインデックス化されるかを理解したい場合があります。

ドキュメント ソースの表示には制限があります。
-
フィールドタイプを知ることはできません。
-
ドキュメント ソースにサブフィールドが存在しません。
詳細については、 フィールド マッピングを表示する必要があります。
ブループリントの検索結果のプレビュー
ブループリント編集画面のサイドバーから、ドキュメント形式で結果をプレビューできます。 詳細については、「 プレビュー サイドバーを使用したブループリントのテスト 」を参照してください。

ここでは、これらの機能にアクセスできます。
-
検索リクエスト文字列全体を表示するには、 [生のリクエストを表示] をクリックします。 [Raw Request]モーダルから、リクエストをクリップボードにコピーするか、JSONファイルとしてダウンロードすることができます。 これは、検索ページの Search Insights ウィジェットに表示されるリクエストと同じです。
-
[生の応答を表示]をクリックすると、検索応答文字列全体を表示します。 ここで、応答をクリップボードにコピーしたり、JSON ファイルとしてダウンロードしたりできます。 これは、検索ページの Search Insights ウィジェットに表示される文字列と同じです。
-
各結果のスコアは結果タイトルの左側に表示されます。 スコアをクリックするとスコアの説明が表示されます。
一部の要素 は、手動で提供または上書きできる検索コンテキスト属性を読み取ります。 歯車アイコン (
) をクリックして、ブループリント プレビュー検索に検索コンテキスト属性を追加し、属性のキーと値のペアを入力して、 完了をクリックします。
検索インサイトでドキュメントソースを表示する
検索インサイト ウィジェットをページに配置して、各検索結果のドキュメント ソースを検査できます。 ドキュメント ソースは応答文字列で返されます。

詳細については、 検索インサイト を参照してください。
フィールドマッピングの検査
コンテンツおよびアプリケーション フィールドを保存し、インデックスを作成できます。 フィールド マッピングは、明示的マッピングか動的マッピングかを問わず、各フィールドの詳細を決定します。 ブログエントリのようなネイティブタイプには既知のフィールド名があり、明示的なマッピング、つまり プロパティを使用します。
"localized_title_en_US" : {
"search_analyzer" : "liferay_analyzer_en",
"analyzer" : "english",
"term_vector" : "with_positions_offsets",
"type" : "text"
},
カスタム タイプでは、オブジェクト、Web コンテンツ構造、カスタム フィールド (Expando フレームワーク) などの独自のフィールドを定義できます。 これらの型は、 dynamic_templatesというマッピングセクションで動的マッピングを使用します。
{
"template_expando_keyword" : {
"mapping" : {
"analyzer" : "keyword_lowercase",
"fields" : {
"raw" : {
"type" : "keyword"
}
},
"type" : "text"
},
"match_mapping_type" : "string",
"match" : "expando__keyword__*"
}
},
フィールド マッピングは、フィールドのデータ型や、フィールドのデータをさまざまな方法で使用するために使用できるサブフィールドなど、インデックス作成時および検索時に各フィールドがどのように処理されるかについての低レベルのビューを提供します。 たとえば、マッピングを使用して、テキスト フィールドのサブフィールドとしてインデックス付けされたキーワード フィールドを検出できます。 このキーワード サブフィールドは、カスタム ファセットで使用される可能性があります。

検索エンジンのフィールド マッピングは、フィールドをどのようにインデックスし、検索するかに関する情報を提供します。 たとえば、Sort ウィジェットに キーワード フィールドが必要であることがわかっている場合は、キーワード フィールドのマッピングを検査できます。
使用可能なフィールドのリスト全体を参照するには、 コントロール パネル → 構成 → 検索 ( フィールド マッピング タブをクリックします) からフィールド マッピングを調べます。 ここでは多数のインデックスを確認できます。 Liferay のメインコンテンツは、 会社インデックスにインデックス化されており、 liferay-[company id] という名前が付けられています (例: liferay-10819726314237)。
フィールドを見つけたら、そのタイプとサブフィールドがあるかどうかをメモします。 一部のフィールドは、全文検索を可能にするために テキスト フィールドとして、または並べ替えを可能にするために icu_collation フィールドとしてマップされますが、集計 (つまり、ファセット) で使用するためにタイプ キーワード のサブフィールドも提供されます。
または、検索エンジンの API を使用してマッピングを参照します。
- Get Mapping APIを使用して Elasticsearch のフィールド マッピングにアクセスします。
- OpenSearchのフィールドマッピングには、 マッピングAPIを使ってアクセスします。
- Solr のフィールドマッピングにアクセスするには、 List Fields APIを使用します。
以下は、Elasticsearchの例からの出力の一部です。
"ddmStructureKey": {
"store": true,
"type": "keyword"
},
"ddmTemplateKey": {
"store": true,
"type": "keyword"
},
"defaultLanguageId": {
"store": true,
"type": "keyword"
},
"description": {
"store": true,
"term_vector": "with_positions_offsets",
"type": "text"
},
"discussion": {
"store": true,
"type": "keyword"
},
一部のフィールドは マルチフィールドとしてインデックス付けされ、メインフィールドにサブフィールドのマッピングが追加されます。 Liferay の一部の text および icu_collation_keyword フィールドは、 keyword サブフィールドにマッピングされており、カスタム ファセットで使用できます。
カスタム ファセットでサブフィールドを使用するには、ドット表記を使用します (例: fieldName.sub_field_name)。 例としては、 assetTagNames.raw や title_en_US_sortable.keyword_lowercaseなどがあります。 いくつかの ネストされたフィールド もサブフィールドにマップされます。
Liferay でマッピングを表示するとサブフィールドが表示されますが、ドキュメント ソースには存在しません。 つまり、検索結果の ドキュメント フォームに結果を表示する設定 を使用しても、これらのフィールドを見つけることはできません。
カスタムフィールドの操作(Expando)
検索可能設定を有効にして カスタム フィールド を作成すると、カスタム フィールドはバッキング アセット (ブログ エントリなど) を使用してインデックス化されます。 再インデックス後は、既存のエントリにも適用されます。 たとえば、カスタム フィールド UI で Enabled というフィールドをキーワードとしてインデックス付けする場合、フィールド自体はテキスト フィールドで、 expando__keyword__custom_fields__Enabledのような名前が付けられますが、別の 生の キーワード フィールドを作成するためのネストされたフィールド マッピングが含まれます。
カスタムファセットで生のキーワードフィールドを使用するには、 .raw を 集計フィールドのカスタムフィールド名に追加します。
expando__keyword__custom_fields__Enabled.raw
フィールド マッピングをローカルにコピーした場合は、ファイル内で expando__keyword__custom_fields__Enabled を検索すると、そのマッピングを確認できます。
{
"liferay-[companyId]" : {
"mappings" : {
"expando__keyword__custom_fields__Enabled" : {
"full_name" : "expando__keyword__custom_fields__Enabled",
"mapping" : {
"expando__keyword__custom_fields__Enabled" : {
"type" : "text",
"store" : true,
"fields" : {
"raw" : {
"type" : "keyword"
}
},
"analyzer" : "keyword_lowercase"
}
}
}
}
}
}
すべての生のフィールドを表示するには、マッピングで rawを検索します。
カスタム フィールドを 検索可能 に設定すると、エンティティが変更されたとき、または再インデックスがトリガーされたときに、フィールドの値がインデックス化されます。 java.lang.String フィールドのみを検索可能にすることができます。
ネストされたフィールドの操作
オブジェクト定義フィールド、 Web コンテンツ構造フィールド、 ドキュメント タイプ フィールド、および フォーム フィールド は、ネストされたフィールドとしてインデックス付けされます。
検索ブループリントでこれらのネストされたフィールドをクエリできます。 これらを使用して、検索ページで結果を並べ替えたり、これらのフィールドにカスタム フィルターやファセットを作成したりします。
検索ウィジェットのネストされたフィールド
カスタム ファセット、カスタム フィルター、および並べ替えウィジェットでは、ドット表記を使用してネストされたフィールドを参照できます。 次の要素をピリオドで区切って入力します。
-
親フィールド
-
フィールド名を保持するフィールドの名前
-
値を保持するフィールドの名前
この例では、オブジェクト フィールドを参照します。
nestedFieldArray.lastAccessed.value_date
この例では、Web コンテンツ構造フィールドを参照します。
ddmFieldArray.ddm__keyword__40806__Textb5mx_en_US.ddmFieldValueKeyword_en_US_String_sortable.keyword_lowercase
オブジェクトフィールド
7.4 U72+/GA72+
インデックス内の既存のドキュメント内の オブジェクト定義 フィールドを検索するには、検索結果ウィジェットの [結果をドキュメント形式で表示] 設定を使用します。
ドキュメントには、ネストされたコンテンツを持つ nestedFieldArray フィールドがあります。
"nestedFieldArray" : [
{
"fieldName" : "lastAcessed",
"valueFieldName" : "value_date",
"value_date" : "20230502000000"
},
{
"fieldName" : "immunityType",
"valueFieldName" : "value_keyword",
"value_keyword" : "diplomatic"
},
{
"fieldName" : "randomNumber",
"valueFieldName" : "value_integer",
"value_integer" : "19"
}
],
検索ウィジェットでオブジェクト フィールドを使用するには、親フィールド (例: nestedFieldArray)、フィールド名を保持するフィールドの名前 (例: fieldName)、および値を保持するフィールドの名前 (例: value_date) を指定します。 次のパターンを使用します: nestedFieldArray.[fieldName].[valueFieldName]。
たとえば、 nestedFieldArray.lastAccessed.value_dateと入力すると、上記のネストされた配列の lastAccessed 日付フィールドで並べ替えることができます。
Webコンテンツ構造フィールド、ドキュメントタイプフィールド、フォームフィールドの使用
ドキュメント タイプ、Web コンテンツ構造、フォームのフィールドは、バックエンド フレームワークが共有されているため、同じ方法でインデックス付けされます。 インデックス内の既存のドキュメント内の ネストされた Web コンテンツ構造 (DDM) フィールド を検索するには、検索結果ウィジェットの [結果をドキュメント形式で表示] 設定を使用します。
ドキュメントには、ネストされたコンテンツを持つ ddmFieldArray フィールドがあります。
"ddmFieldArray" : [
{
"ddmFieldName" : "ddm__keyword__40806__Textb5mx_en_US",
"ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
"ddmFieldValueKeyword_en_US_String_sortable" : "some text has been entered",
"ddmFieldValueKeyword_en_US" : "some text has been entered"
},
{
"ddmFieldName" : "ddm__keyword__40806__Selectjdw0_en_US",
"ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
"ddmFieldValueKeyword_en_US_String_sortable" : "option 3",
"ddmFieldValueKeyword_en_US" : "value 3"
},
{
"ddmFieldName" : "ddm__keyword__40806__Boolean15cg_en_US",
"ddmValueFieldName" : "ddmFieldValueKeyword_en_US",
"ddmFieldValueKeyword_en_US" : "true",
"ddmFieldValueKeyword_en_US_String_sortable" : "true"
}
],
検索ウィジェットでこれらのフィールドのいずれかを使用するには、ウィジェットの集計フィールドに ddmFieldName 値 (例: ddm__keyword__40806__Testb5mx_en_US) を入力します。
ブループリントのネストされたフィールド
検索ブループリント クエリ要素内のネストされたフィールドを操作する場合、上記のドット表記は使用できません。 代わりに、 ネストされたクエリを使用します。
以下は、Web コンテンツ フィールドを検索する 任意の Elasticsearch クエリを貼り付ける 要素の Elasticsearch クエリ構文です。
{
"nested": {
"path": "ddmFieldArray",
"query": {
"bool": {
"filter": {
"term": {
"ddmFieldArray.ddmFieldName": "ddm__keyword__33542__Text74647933_en_US"
}
},
"must": {
"match": {
"ddmFieldArray.ddmFieldValueKeyword_en_US": "${keywords}"
}
}
}
}
}
}
検索ブループリント集計内のネストされたフィールドを操作するには、 ネストされた集計 タイプを使用します。 詳細については、 検索ブループリント構成リファレンス を参照してください。
DDM フィールドのレガシーインデックス
バージョンによっては、Elasticsearch または OpenSearch では、 DDM フィールドのネストされたフィールド ストレージ がデフォルトで有効になっている場合があります。
| Liferayのバージョン | ネストされたフィールドはデフォルトで有効になっています |
|---|---|
| 7.4および四半期リリース | ✔ |
| 7.3 すべてのアップデート | ✔ |
| DXP 7.2 SP3/FP8+ | ✘ |
動作を変更するには、システム設定 → ダイナミック データ マッピング インデクサーの レガシー ダイナミック データ マッピング インデックス フィールドを有効にする 設定を使用します。