マッピングのElasticsearch

マッピング(マッピング)

マッピングは、文書を定義するために使用し、それが含まれているフィールドは、プロセスを保存し、インデックスする方法です。例えば、マッピングを使用して定義することができます。

  • 文字列フィールドのフルテキストインデックスフィールドとして見られるべきです。
  • 番号、日付、または地理的位置を含むフィールド。
  • 文書がインデックス化されているかどうかに、すべてのフィールドの値_allフィールド。
  • 日付フォーマットフィールドの値。
  • カスタムルールを動的にインデックスを追加するかどうかを制御する(別添1)

マッピングタイプ(マッピングタイプ)

各インデックスは、マッピングタイプが文書がインデックス化された方法を決定しています。

マッピングの種類は次のとおりです。

メタフィールド

  • メタフィールドには、関連するメタデータドキュメントを処理する方法をカスタマイズするために使用します。要素フィールドが含まれ_index_type_id_source

フィールドまたはプロパティ

  • 関連する属性タイプのマッピングは、フィールドまたは文書のリストが含まれています。

フィールドのデータ型

各フィールドには、データの種類があります。

  • 振る舞うタイプには、テキスト、キーワード、日付、長い、ダブル、ブール、腹腔。
  • サポートタイプのオブジェクトのJSON階層またはネストされました。
  • 特定のタイプgeo_point、geo_shape、完了。

さまざまな方法で異なる目的とインデックス同じフィールドのために、それは非常に一般的です。たとえば、文字列フィールドがに設定することができるテキストのフルテキストインデックスを達成するために、オブジェクト、または設定したキーワードを並べ替えるまたはポリマーするために使用されます。二つ以上が、単語の場合には、文字列フィールドを使用する場合、任意にstandard analyzerenglish analyzerfrench analyzerアリコートトークナイザ。

これは、多目的フィールドです。ほとんどのデータ型は、フィールドでマルチパラメータフィールドをサポートしています。

マッピング設定の増殖を防ぎます

インデックスで定義されてあまりにも多くのフィールドは、状況を復元するためにメモリエラーのうちで困難につながる可能性が爆発を引き起こす可能性のマップです。この問題は、予想以上に共通していてもよいです。たとえば、以下の場合を考え、各新しく追加された文書は、新しいフィールドを導入しました。動的マッピングのこのセットでは、それは非常に一般的です。すべての文書は、新しいフィールドが、最終的なマップのインデックスに追加されますが含まれています。小さなデータセットの場合とは問題ありませんが、あなたは持続的な成長のマッピングを設定している場合は、問題を作成します。以下の設定は、手動または自動で貧しいドキュメントを防ぐために、作成したサージマップにつながった、フィールドマッピングの数を制限することができます:

index.mapping.total_fields.limit

インデックスフィールドの最大数。1000年のデフォルト値。

index.mapping.depth.limit

フィールドの最大深さは、内部オブジェクトの数を測定するために使用されます。すべてのフィールドは、ルートオブジェクトと同じレベルで定義されている場合、例えば、その深さは1です。あなたは、オブジェクトのマッピングを持っている場合は、その深さは2のように、と。20のデフォルト値。

index.mapping.nested_fields.limit

インデックスにネストされた 50のフィールドのデフォルトの最大数。ネストされた各ドキュメントは別個に隠さドキュメントとして索引付けされるように、ネストされた指数が100件のフィールド文書を有し、実際に、101件の文書をインデックス付け。

ダイナミックマッピング(ダイナミックマッピング)

フィールドマッピングの種類と使用の前に定義する必要はありません。おかげ動的マッピングは、新しいフィールド名が自動的に追加され、インデックスされます。両方のトップマッピングタイプに追加することができる新しいフィールドが追加することができますobjectし、nestedフィールド内。

明示的なマッピング(明示的なマッピング)

動的マッピングにもかかわらず、最初に学ぶことは簡単ですが、あなたはElasticsearchを推測するよりも、データについての詳細を知っている場合には、独自の表示マッピングを指定することがより適切です。

既存のフィールドのマッピングを更新します

地元の記録に加えて、フィールドマッピングが既に更新することはできませんが存在しますマッピングは、文書が既にインデックスが無効な存在を意味します変更します。代わりに、新しいインデックスを作成する必要があります正しいマッピング、およびデータあり(インデックスを再作成)の再インデックスをインデックスに。あなたはそのマップを変更せずにフィールドの名前を変更したい場合は、使用することができますエイリアスフィールドの実装を。

例えば

マッピングされたインデックスを作成する場合、以下のように指定することができます。

PUT my_index 
{
  "mappings": {
    "_doc": { 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" },  
        "created":  {
          "type":   "date", 
          "format": "strict_date_optional_time||epoch_millis"
        }
      }
    }
  }
}
curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{
  "mappings": {
    "_doc": { 
      "properties": { 
        "title":    { "type": "text"  }, 
        "name":     { "type": "text"  }, 
        "age":      { "type": "integer" },  
        "created":  {
          "type":   "date", 
          "format": "strict_date_optional_time||epoch_millis"
        }
      }
    }
  }
}
'

付録

附属書1

ダイナミックマップ

使用する特性Elasticsearchが簡単に最も重要な特徴の一つは、あなたがすぐに利用されるようにあなたのデータを取得することができます。インデックスするには、ドキュメントは、あなたは、インデックスを作成するために行くマッピングタイプを定義し、その後、フィールド----インデックス文書、その後、インデックス、マッピングは、フィールドが自動的に作成されますを定義する必要はありません。

PUT data/_doc/1 
{ "count": 5 }
curl -X PUT "localhost:9200/data/_doc/1" -H 'Content-Type: application/json' -d'
{ "count": 5 }
'

注:上記データは、インデックス、マッピングタイプの_DOC、及びフィールドカウントを作成され、データ型が長いです。

自動検出と動的マッピングと呼ばれる新しいフィールドを追加します。ダイナミックマッピング規則は、特定の目的を満たすために、以下の方法でカスタマイズすることができます:

  1. 動的制御フィールドマッピング規則:(動的フィールド検出)
  2. ダイナミックテンプレート:(動的に追加フィールドマッピング用のカスタムルールを設定)

注意:動的に作成されたインデックスのテンプレートのいずれかで、またはディスプレイを作成し、デフォルトのマッピングの設定、新しいインデックスのエイリアスを設定することができます。
からの翻訳:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/6.4/mapping.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/6.4/dynamic-mapping.html

おすすめ

転載: blog.csdn.net/qq_35958788/article/details/92801225