ためには、正確な値文字列、データの種類を知るために、各ドメインelasticsearchの必要性とみなさ数値、文字列またはテキストフィールドとして、時間ドメイン時間デジタル領域と見なされます。この情報は、マップに含まれています。
データ入出力は、各文書がインデックスであり、説明タイプ。各タイプには、独自の持っているマップ、またはスキーマ定義を。マッピングは、フィールドタイプ、各フィールドのデータ型を定義する方法、およびこれらElasticsearchドメイン。マッピングタイプは、関連のconfigureメタデータに使用されています。
私たちはしますマッピングを入力し、詳細な地図を議論します。このセクションでは、我々はあなたのエントリの内容をするだけの十分な議論します。
シンプルなコアドメインの種類
Elasticsearchは、次のような単純なドメインの種類をサポートしています。
- 文字列:
string
- 整数:
byte
、short
、integer
、long
- フロート:
float
、double
- ブール:
boolean
- 日付:
date
ときあなたは、インデックス、新しいドメインを含むドキュメント-の前に現れたことがない- Elasticsearchが使用する動的なマッピングを、JSONの基本的なデータ・タイプで、次のルールを使用し、ドメインの種類を推測してみました:
JSONタイプ
ドメインタイプ
ブール:true
またはfalse
boolean
整数: 123
long
フロート: 123.45
double
文字列、効力発生日: 2014-09-15
date
文字列: foo bar
string
あなたが(引用符であれば、この手段"123"
数値インデックス)、ためにマップされますstring
代わりに入力long
。このフィールドがマップされている場合は、long
、その後、Elasticsearchは変換されない場合は、例外がスローされ、長期に文字列にしようとします。
地図を見ます
/_mapping
私たちはインデックスの一つ以上にマップのElasticsearch 1つ以上の種類を見ることができます。で章の冒頭、私たちはインデックスを作っているgb
タイプにtweet
マッピングします:
GET /ギガバイト/ _mapping /つぶやき
私たちの索引付けされたドキュメント、ドメイン(と呼ばれるElasticsearch 属性)動的に生成されたマップを。
{ "GB":{ "マッピング":{ "つぶやき":{ "プロパティ":{ "日付":{ "タイプ": "日付"、 "フォーマット": "strict_date_optional_time || epoch_millis" }、 "名前": { "タイプ": "文字列" }、 "ツイート":{ "タイプ": "文字列" }、 "USER_ID":{ "タイプ": "長いです" } } } } } }
エラーマッピングは、例えば、age
ドメインはにマップstring
の代わりに入力しinteger
、クエリの結果にリードが不可解に表示されます。
チェックしてください!むしろ、あなたのマップが正しいと仮定するとより。
カスタムドメインマッピング
基本的なフィールドのデータ型が、多くの場合、十分に良いてきていますが、多くの場合、別のドメイン、特に文字列フィールドからのマッピングを定義する必要がありました。カスタムマップを使って次の操作を実行することができます:
- テキスト文字列フィールドと文字列フィールドの正確な値との差異
- 特定の言語パーサー
- 部分一致に対応するために最適化フィールド
- カスタムデータ形式を指定します。
- もっとあります
最も重要な属性のドメインですtype
。ないためにstring
、ドメイン、あなたは一般的にのみ設定する必要がありますtype
:
{ "NUMBER_OF_CLICKS":{ "タイプ": "整数" } }
デフォルトでは、string
Typeフィールドは、フルテキストが含まれていると考えられています。つまり、前のインデックスにそれらの値は、この分野でのクエリアナライザの前に、検索の対象となり、パーサ経由となります。
string
ドメインマッピングの二つの最も重要な属性index
とanalyzer
。
指数
index
どのようにインデックスの文字列を制御するプロパティ。これは、以下の値の3なることがあります。
-
analyzed
- まず、文字列、および、インデックス、それ。言い換えれば、フルテキストは、このフィールドにインデックスを付けます。
-
not_analyzed
- インデックスこのフィールドには、検索することができますが、インデックスが正確な値になるように。私たちは、それを分析していません。
-
no
- このフィールドは、インデックスが作成されていません。このドメインは検索されません。
string
ドメインindex
デフォルトで属性analyzed
。私たちは正確な値にこのフィールドをマップする場合、我々はそれを設定する必要がありますnot_analyzed
:
{ "タグ":{ "タイプ": "string"は、 "インデックス": "not_analyzed" } }
その他の単純型(例えばlong
、double
、date
など)も受け入れるindex
パラメータを、しかし意味のある値のみno
とnot_analyzed
彼らは分析されませんので、。
アナライザ
以下のためanalyzed
の文字列フィールド、analyzer
検索とインデックスのプロパティで使用されている指定アナライザ。デフォルトでは、Elasticsearchは使用standard
パーサをしますが、例えば、それを置き換える組み込みパーサを指定することができwhitespace
、simple
そしてenglish
:
{ "ツイート":{ "タイプ": "string"は、 "分析": "英語" } }
でカスタムパーサー、私たちは、カスタム・パーサーを定義し、使用する方法を示します。
更新されたマップ
あなたが最初のインデックスを作成するときには、マッピングのタイプを指定することができます。また、使用することができます/_mapping
マッピングを増やす(更新が存在するマップまたはタイプ)新しいタイプを。
あなたがすることができますが増加し、既存のマップを、あなたがすることはできません変更ドメインマッピングが存在します。マッピングは、ドメインがすでに存在する場合、そのデータは、インデックスのドメインであったかもしれません。あなたが意図このフィールドのマッピングを変更する場合は、インデックスデータが間違っている可能性があり、それは通常の検索はできません。
私たちは、新しいドメインを追加するには、マップを更新することができますが、ドメインから存在していないanalyzed
変更がnot_analyzed
。
マッピングを指定する2つの方法を説明するために、我々は最初の削除gd
インデックスを:
DELETE /ギガバイト
次に指定し、新しいインデックスを作成してtweet
使用してドメインenglish
・アナライザを:
PUT /ギガバイト { "マッピング":{ "つぶやき":{ "プロパティ":{ "つぶやき":{ "タイプ": "文字列"、 "分析": "英語" }、 "日付":{ "タイプ": "日付" }、 "名前":{ "タイプ": "文字列" }、 "USER_ID":{ "タイプ": "長いです" } } } } }
で指定されたメッセージ本文mappings
インデックスが作成されます。
その後、私たちはすることを決定しtweet
、新しい名前を追加するマップtag
でnot_analyzed
、テキストフィールドを使用します_mapping
:
PUT / GB / _mapping /つぶやき { "プロパティ":{ "タグ":{ "タイプ": "string"は、 "インデックス": "not_analyzed" } } }
私たちはどのような場合には、我々はそれらを変更することはできませんので、再度、既存のすべてのフィールドをリストする必要はありません。新しいドメインは、既存のマップに組み込まれています。
テストの地図
あなたは使用することができanalyze
、マッピングAPIのテスト文字列フィールドを。次の二つの出力要求を比較します。
GET /ギガバイト/ _analyze { "フィールド": "つぶやき"、 "テキスト": "黒猫" } GET /ギガバイト/ _analyze { "フィールド": "タグ"、 "テキスト": "黒猫" }
私たちは、テキスト分析の内側にメッセージ本体を転送します。
tweet
2入力フィールドを生成しblack
、そしてcat
、tag
ドメインは、別のエントリを生成しますBlack-cats
。言い換えれば、私たちのマッピングが正常に動作します。