ESのAPIシリーズ -- ダイナミックテンプレート(ダイナミックテンプレート)の使い方(例あり)

オリジナルサイト:ESのAPIシリーズ -- ダイナミックテンプレート(ダイナミックテンプレート)の使い方(例あり)

序章

例証する

        この記事では、エラスティックサーチの動的テンプレート(動的テンプレート)の使い方を(例を交えて)紹介しています。

公式サイトURL

https://www.elastic.co/guide/en/elasticsearch/reference/8.0/dynamic-templates.html

動的テンプレートの役割

機能概要

        動的テンプレートは、特定のインデックスに対して設定されます。つまり、特定のインデックスを作成するときに指定されます。

使用シーン

フィールド タイプを自動的に識別する ES の機能に従って、いくつかの特別なフィールドの名前を特定のタイプに設定します。例えば:

  • 文字列型のすべてのフィールドをキーワードに設定
  • is で始まる文字列はすべてブール型に設定されます

マッチマッピングタイプ

概要

        _mapping が設定されていない場合、ES はドキュメント フィールドのタイプに応じて動的マッピングを実行します。このように、ES データ型は JSON データ型に対して動的に定義されます。

JSON データ型

ES データ型

ヌル

フィールドを追加しない

真/偽

ブール値

ダブル

浮く

長さ

長さ

物体

物体

配列

配列内の最初の null 以外の値の型に応じて

日付検出を渡す文字列

日にち

数値検出を渡す文字列

フロートまたはロング

上記の 2 つのテストに合格しなかった文字列

.keyword サブフィールドを含むテキスト タイプ

PUT /es-learn-doc-person/_create/1
{
    "name":"zhang san",
    "age":29
}

動的マッピングでのマッピング:

{
  "es-learn-doc-person" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "long"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

        このドキュメントでは、age は自動的に long にマップされますが、整数型は現在のデータのストレージを完全に満たしています。このようなシナリオを想定すると、会社のデータの整数値部分については、ほとんどの整数がストレージ要件を満たすことができ、ダイナミック テンプレートを使用して動的にマッピングできます。方法は次のとおりです。

PUT es-learn-000002
{
  "mappings": {
    "dynamic_templates": [
      {
        "integers": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "integer"
          }
        }
      }
    ]
  }
}

インデックス es-learn-000002 で使用される動的テンプレートには、同じユーザー情報を挿入します。 

PUT es-learn-000002/_doc/1
{
    "name":"zhang san",
    "age":29
}

対応するマッピングを表示する

一致と不一致

概要

        match と unmatch は、フィールド名を一致させることです。

        ネストされたオブジェクトの場合、一致および不一致は、フィールド名の最後のレベルでのみ機能します。

  • 一致: フィールド名はルールに一致します
  • unmatch : フィールド名がルールに一致しません
  • match_pattern: マッチングに使用されるパターン。regex に設定すると、一致および不一致で正規表現がサポートされます。例えば:
    "match_pattern": "regex",
    "match": "^profit_\d+$"

必要

  • 文字列型のすべてのフィールドをキーワードに設定
  • is で始まる文字列はすべてブール型に設定されます

方法

PUT my_index
{
    "mappings": {
        "dynamic_templates": [{
                "strings_as_boolean": {
                    "match_mapping_type": "string",
                    "match": "is*",
                    "mapping": {
                        "type": "boolean"
                    }
                }
            }, {
                "strings_as_keywords": {
                    "match_mapping_type": "string",
                    "mapping": {
                        "type": "keyword"
                    }
                }
            }
        ]
    }
}

path_match と path_unmatch

概要

        match と unmatch は、最後のレベルのフィールド名でのみ機能します. 多層埋め込みオブジェクトの場合、path_match と path_unmatch を使用できます. (ES はオブジェクトの格納をサポートしています)。例: some_object.*.some_field。

値がオブジェクト タイプの場合、name で始まり middle で終わらない場合は、それを full_name フィールドにコピーします。

マッピングを設定:

PUT my_index
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name": {
          "path_match":   "name.*",
          "path_unmatch": "*.middle",
          "mapping": {
            "type":       "text",
            "copy_to":    "full_name"
          }
        }
      }
    ]
  }
}

データを挿入する

PUT my_index/_doc/1
{
  "name": {
    "first":  "John",
    "middle": "Winston",
    "last":   "Lennon"
  }
}

データを見る

GET my_index/_search?q=full_name:John

インデックス テンプレートと動的テンプレートの組み合わせ

ここでは試していませんが、インデックス テンプレートと動的テンプレートを同時に使用できると思います。次に例を示します。

PUT  _index_template/event_log_template
{
    "index_patterns": ["event_log_*"],
    "template": {
        "settings": {
            "number_of_shards": 5,
            "number_of_shards": 1
        },
        "mappings": {
            "dynamic_templates": [{
                    "dynamicFields": {
                        "match_mapping_type": "string",
                        "path_match": "dynamicFields.*_sku_attr",
                        "mapping": {
                            "type": "keyword"
                        }
                    }
                }
            ],
            "properties": {
                "id": {
                    "type": "keyword"
                },
                "category_first_id": {
                    "type": "keyword"
                },
                "category_first": {
                    "type": "keyword"
                }
            }
        }
    }

}

おすすめ

転載: blog.csdn.net/feiying0canglang/article/details/127924926