インデックス付きフィールドの探索
検索ドキュメントのフィールドを調べたり、検索エンジンのフィールドマッピングを検査する方法を知っていれば、一部の検索機能を設定できます。
利用可能なインデックスフィールドは、Liferayのバージョン間で予告なく変更される場合があります。
| 機能 | 関連する構成 | ユースケース | どこを探すべきか |
|---|---|---|---|
| カスタムファセット | 集約フィールド | キーワード と数値フィールド (例: integer、 double、または long ) を検索します。 | ドキュメントソース フィールドマッピング |
| カスタムフィルター | フィルターフィールド フィルタークエリタイプ | 指定されたクエリに適したフィールドタイプを見つける 結果スコアを確認してブーストを調整する | ドキュメントソース フィールドマッピング 検索インサイト応答文字列 |
| 検索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__*"
}
},
フィールドマッピングは、各フィールドがインデックス作成時および検索時にどのように処理されるか、そのデータ型や、フィールドのデータをさまざまな方法で使用するために利用可能なサブフィールドなど、より詳細なレベルの情報を提供します。 例えば、マッピングを利用することで、テキストフィールドのサブフィールドとしてインデックス付けされているキーワードフィールドを検出できます。 このキーワードサブフィールドは、カスタムファセットで使用される可能性があります。

検索エンジンのフィールドマッピングは、そのフィールドをどのようにインデックス化し、検索するかに関する情報を提供します。 例えば、ソートウィジェットで キーワード フィールドが必要であることがわかっている場合は、キーワードフィールドのマッピングを調べることができます。
使用可能なフィールドのリスト全体を参照するには、[コントロールパネル]→[構成]→[検索]([フィールドマッピング]タブをクリック)からフィールドマッピングを調べます。
ここでは、多数のインデックスを見ることができます。 Liferay のメインコンテンツは、 会社インデックスにインデックス化され、その名前は liferay-[会社 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 の一部の テキスト および icu_collation_keyword フィールドは、 キーワード サブフィールドにマッピングされており、カスタム ファセットで使用できます。
カスタムファセットでサブフィールドを使用するには、ドット表記を使用します(例: fieldName.sub_field_name)。 例としては、 assetTagNames.raw および title_en_US_sortable.keyword_lowercase などがあります。 一部のネストされたフィールドには、サブフィールドが関連付けられている場合もあります。
Liferayでマッピングを表示するとサブフィールドが表示されますが、ドキュメントソースには存在しません。 これは、検索結果の ドキュメントフォームでの結果の表示設定 を使用してこれらのフィールドを見つけることができないことを意味します。
カスタムフィールドの操作(Expando)
カスタムフィールド を作成し、 検索可能 という設定を有効にすると、カスタムフィールドはバックアセット(Blogs Entriesなど)と一緒にインデックス化されます。 再インデックス処理後、既存のエントリにも適用されます。 例えば、カスタム フィールド UI で Enabled というフィールドをキーワードとしてインデックス化した場合、フィールド自体は expando__keyword__custom_fields__Enabledのような名前のテキスト フィールドですが、別の raw キーワード フィールドを作成するためのネストされたフィールド マッピングが含まれています。
カスタムファセットで生のキーワードフィールドを使用するには、 集計フィールド のカスタムフィールド名に .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]。
例えば、上記のネストされた配列の lastAccessed date フィールドでソートするには、 nestedFieldArray.lastAccessed.value_date と入力します。
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) を入力します。
ブループリント内のネストされたフィールド
Search Blueprints クエリ要素内のネストされたフィールドを操作する場合、上記で説明したドット表記は使用できません。 代わりに、 ネストされたクエリ を使用してください。
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}"
}
}
}
}
}
}
Search Blueprints アグリゲーションでネストされたフィールドを操作するには、 ネストされたアグリゲーション タイプを使用します。 詳細については、 ブループリント検索構成リファレンス を参照してください。
DDMフィールドのレガシーインデックス
お使いのバージョンによっては、Elasticsearch または OpenSearch において、DDM フィールドのネストされたフィールドの保存がデフォルト設定で有効になっている場合があります:
| Liferayのバージョン | ネストされたフィールドはデフォルトで有効になっています |
|---|---|
| 7.4および四半期ごとのリリース | ✔ |
| 7.3 全アップデート | ✔ |
| DXP 7.2 SP3/FP8+ | ✘ |
動作を変更するには、システム設定 → 動的データマッピングインデクサーで レガシー動的データマッピングインデックスフィールドを有効にする 設定を使用します。