oo

エレメントを作る

検索ブループリントに同梱されている システムエレメントはたくさんある。 どのシステム要素もあなたのニーズを満たさない場合、独自の検索ブループリント要素を作成する多くの方法があります:

カスタムJSON要素の使用

他のブループリントで再利用することを意図していない要素は、ブループリントの作業中に クエリビルダ で追加できます。 これらは起源のブループリントでのみ利用可能で、ブループリント検索の要素セクションには表示されません。

カスタムJSON要素をビルダーに追加し、定型JSONの編集を開始します:

{
   "description_i18n": {
      "en_US": "Editable JSON Text Area"
   },
   "elementDefinition": {
      "category": "custom",
      "configuration": {},
      "icon": "custom-field"
   },
   "title_i18n": {
      "en_US": "Custom JSON Element"
   }
}

JSONエディターに入力すると、オートコンプリートによって利用可能なプロパティが表示されます。 これらをさらに理解するには、 スキーマを理解する を参照してください。

どのような要素でもカスタムJSON要素に書くことができますが、通常、この方法は、クエリ句とおそらく条件を追加する単純な要素に最適です。 多くの場合、これらは uiConfiguration セクションを必要とせず、要素で使用できる定義済みのテンプレート変数を多用しません。 より複雑なケースでは、 Element source editor を使用してください。

例えば、以下のExclude Journal Articles要素は、Custom JSON要素に基づいています。 これは、 exclude.journal_articles というパラメータが trueである場合にのみ、エレメントのクエリーが適用されるように条件を追加するものである。 このクエリは、結果がウェブコンテンツ記事の entryClassName フィールドと一致しないことを確認するために、 must_not term クエリ句を追加します。

{
   "description_i18n": {
      "en_US": "Exclude journal articles from the search."
   },
   "elementDefinition": {
      "category": "hide",
      "configuration": {
         "queryConfiguration": {
            "queryEntries": [
               {
                  "clauses": [
                     {
                        "context": "query",
                        "occur": "filter",
                        "query": {
                           "bool": {
                              "should": [
                                 {
                                    "bool": {
                                       "must_not": [
                                          {
                                             "term": {
                                                "entryClassName": {
                                                "value": "com.liferay.journal.model.JournalArticle"}
                                             }
                                          }
                                       ]
                                    }
                                 },
                                 {
                                    "bool": {
                                       "must": [
                                          {
                                             "term": {
                                                "discussion": false
                                             }
                                          }
                                       ]
                                    }
                                 }
                              ]
                           }
                        }
                     }
                  ],
                  "condition": {
                     "contains": {
                        "parameterName": "exclude.journal_articles",
                        "value": "true"
                     }
                  }
               }
            ]
         }
      },
      "icon": "hidden"
   },
   "title_i18n": {
      "en_US": "Exclude Journal Articles"
   }
}

この要素は、ブループリントのパラメータ構成を使用して追加できるカスタム変数に依存します。 ブループリントへのカスタム変数の追加については、 Search Blueprints Configuration Reference を参照してください。

要素ソース・エディターの追加

エレメンツをより強固に編集することができます。 Search Blueprint の Elements セクションから、 Add(Add) をクリックします。

要素に名前を付け、 Create をクリックする。 要素ソース・エディターが表示され、エディターの左側のペインに定義済み変数が表示されます。 JSONエディターに入力すると、オートコンプリートによって利用可能なプロパティが表示されます。 利用可能なJSONプロパティをさらに理解するには、 Understanding the Schema を参照。

エレメント・ソース・エディターでエレメントを作成する。

UIコンフィギュレーションのオプションは、エレメントJSONの uiConfiguration プロパティで定義されます。 クエリビルダで要素の設定ウィンドウをプレビューするには、 Preview(キャンセルボタンの隣)リンクをクリックします。

Element Configurationウィンドウをプレビューする。

定義済み変数

エレメント・ソース・エディターのエレメントに定義済み変数を挿入するには、カーソルを希望の位置に置き、左側のサイドバーで変数をクリックします。 カスタムJSON要素では、エディタに変数を直接入力する必要があります。

詳細は 定義済み要素変数リファレンス を参照。

要素スキーマを理解する

warning

要素スキーマ](#understanding-the-element-schema)は変更可能です。 Liferayのバージョン間でスキーマが変更されると、古いエレメントのJSONのインポートに失敗することがあります。

検索ブループリント要素のスキーマは、 sxp-query-element.schema.json ファイルで定義されています。 REST API Explorerにアクセスできるユーザーは、スキーマをより便利に閲覧できる。 Liferay にログインした状態で、次のサイトにアクセスします。

http://localhost:8080/o/api?endpoint=http://localhost:8080/o/search-experiences-rest/v1.0/openapi.json

POST /v1.0/sxp-blueprints エンドポイントエントリーを展開します。 下にスクロールして、 Schema リンク(Example Value リンクの隣)をクリックします。

APIエクスプローラから要素スキーマを探索する。

tip

システム要素の構文を調べて、スキーマ要素を使用して要素がどのように構築されるかをよりよく理解する。

elementDefinition および title_i18nelementDefinition は、 category と、 configurationqueryConfiguration プロパティを含まなければならない:

{
    "elementDefinition": {
        "category": "custom",
        "configuration": {
            "queryConfiguration": {}
        }
    },
    "title_i18n": {
        "en_US": "Custom JSON Element"
    }
}

タイトルフィールドで、要素のタイトルテキストを必要な言語数だけ設定する。

要素の作成 elementDefinition

elementDefinition が、作業の大部分を行う場所である。 そのプロパティには、 categoryconfigurationiconuiConfigurationがある。

category 要素の振る舞いを分類する文字列を提供します。 match, boost, conditional, filter, hide, or customを指定する。

configurationqueryConfiguration を提供し、queryEntries プロパティを通して、投稿するクエリ句を保持する。

icon 要素に使用するアイコンを文字列で指定します。 Lexicon Icon Library で利用可能な任意の画像を使用することができます(例: サムズアップ)。

uiConfiguration UIに表示するコンフィギュレーション要素を設定し、設定した値をカスタムエレメントに渡します。

たとえば、 entryClassName フィールドのタームクエリ一致をブーストするエレメントは、クエリと UI を次のように設定できます:

"configuration": {
   "queryConfiguration": {
      "queryEntries": [
         {
            "clauses": [
               {
                  "query": {
                     "term": {
                        "entryClassName": {
                           "boost": "${configuration.boost}",
                           "value": "${configuration.entry_class_name}"
                        }
                     }
                  }
               }
            ]
         }
      ]
   }
},
"uiConfiguration": {
   "fieldSets": [
      {
         "fields": [
            {
               "defaultValue": 1,
               "label": "Boost",
               "name": "boost",
               "type": "number",
               "typeOptions": {
                  "min": 0
               }
            }
         ]
      }
   }

Element コンフィギュレーションの定義

configuration プロパティは、 queryConfigurationqueryEntriesのネストされたプロパティを保持する。

queryEntries JSONに飛び込むと、プロパティ clauses, conditions, enabled, postFilterClauses, and rescoresを含むことができる。

  • 上のスニペットは、 (要素の配列) を使用して、ブループリント主導の検索にクエリ節を追加する Element を示しています。 クエリに加えて、 additiveboostcontentdisabledfieldnameoccurparenttype、または value properties を追加できる。
  • 条件 は、ブーリアン・チェックを提供する。 trueの場合、指定された節は検索クエリに含まれ、falseの場合、それらは除外される。
  • エレメントを無効にするには、 enabled (デフォルトではtrue)をfalseに設定します。
  • postFilterClauses を追加する( 要素の配列として)。 additive, boost, content, disabled, field, name, occur, parent, query, type, or value properties.
  • rescores を追加して、クエリの結果の関連性スコアを再計算する。 query, queryWeight, rescoreQueryWeight, scoreMode, and windowSizeを指定する。 詳細は Elasticsearch ドキュメント を参照してください。

uiConfiguration プロパティは、ネストされたプロパティ fieldSetfieldを保持する。

UIコンフィギュレーションの各フィールドに追加できるコンフィギュレーション・プロパティがいくつかあります:

  • defaultValue を使って、フィールドの初期値を入力する。
  • helpText と入力すると、ブループリント UI にフィールドのヘルプ テキストが表示されます。
  • 人間が読める ラベルを入力する。
  • クエリ句にフィールド値を渡すときなど、エレメント内の他の場所でフィールドを参照するために使用できる を入力します: ${configuration.name}
  • フィールドの タイプ を設定する。 <code>date , fieldMapping , fieldMappingList (利用可能なフィールドのリスト、ロケールとフィールドブースト付き), itemSelector , json , keywords , multiselect , number , select , slider , and text から選択します。 </code> ``
  • typeOptions プロパティを使用して、各タイプのフィールドで利用可能なオプションを設定します。 例えば、セレクト・フィールドに表示される オプション を設定する。
    • boost フィールドごとに数値ブースト値を設定する。
    • フォーマット は、 受け入れ可能な日付フォーマット を決定する(例えば、 yyyyMMddHHmmss)。
    • nullable null 値を渡せるかどうかを設定します。
    • options セレクト・フィールドのオプションを設定します。
    • required コンフィギュレーションが値を持たなければならないかどうかを設定します。
    • step 数値またはスライダー・フィールドの数値の増減を設定します。
    • unit 数値フィールドの測定単位を設定する。
    • unitSuffix は、単位を持つ数値フィールドに表示する単位表記を設定します(例えば、 unitkmの場合、 unitSuffixkm または kilometersと設定できます)。

関連トピック

Capability: