ElasticSearchのマッピングの一般的な操作
5604 ワード
このケースでは、私の前の文章『ElasticSearchのインストール及び基本操作API』を読むことをお勧めします.
Mapping(マッピング)は、リレーショナル・データベース内のテーブルの構造定義に似ています.JSON形式でElasticSearchにデータを格納した後、検索エンジンでJSONフィールドに対応するタイプをマッピングします.この場合、mappingでコンテンツのタイプを定義する必要があります.
フィールドタイプ
JSONデータ型はElasticSearch定義のタイプにマッピングされ、よく使われる簡単なタイプは以下のとおりです.
JSONタイプ
ElasticSearchタイプ
テキストの種類
Text/Keyword
整数タイプ
long/integer
浮動小数点の種類
float/double
時間タイプ
date
ブール値
boolean
はいれつ
Text/Keyword
上で注意したいのは時間タイプで、JSONには時間タイプはありません.ここでは主に時間フォーマットデータのタイプを指します.
マッピングの定義
リレーショナル・データベースでは、データを格納する前にテーブル構造を作成し、フィールドに存在するタイプを指定します.同様にElasticSearchは、データの格納を行う前に、データを格納するMapping構造を定義しておいてもよい.まず簡単なperson Mappingを定義します.
上の図にはMappingの定義があります.ElasticSearch 7の前にmappingsには_typeプロパティ.
ダイナミックマッピング
事前にMappingを定義していない場合、データを追加すると、ElasticSearchは自動的にフィールドに基づいて対応するタイプに換算しますが、換算されたタイプは必ずしも私たちが望んでいるフィールドタイプではありません.やはり、人為的な介入で希望するMappingに変更する必要があります.
マッピングの更新
dynamicを使用してマッピングが更新できるかどうかを制御します.
dynamic-true
dynamicを
データを追加し、定義されていない
追加に成功しました.
Mapping構造の表示:
新しく追加されたフィールド値は、追加中に自動的に追加されます.
dynamic-false
dynamicが
このとき、新規フィールドデータはインデックスできませんが、データは書き込むことができます.
Mappnigも新しいフィールドを追加しません.
dynamic-strict
dynamicが
日付タイプの自動認識
上記では、dynamicがtrueに設定されている場合、新しいフィールドデータ自動認識タイプを追加してMappingを更新し、日付タイプであれば認識を指定できるタイプです.Personのdynamic_を指定date_formats形式:
ここでは、複数の時間フォーマットを指定できます.personに新しいデータを追加します.todayとfirstDateです.
新しいフィールドデータを追加した後のMapping:
時間フォーマットが
マルチフィールド
Mappingではfieldsマルチフィールドアトリビュートを定義して、異なるシーンでの実装を満たすことができます.例えば
データの追加:
クエリー
クエリー
インデックスの制御
フィールドでindexを使用して、現在のフィールドインデックスが検索できるかどうかを指定します.指定したタイプはbooleanタイプ、falseは検索不可、trueは検索可能です.先に削除する前のMapping:
上記のデータを再度追加した後、
フィールドindexがfalseを設定すると、インデックスが設定されていないため、検索はインデックスを取得できません.
NULL処理
ElasticSearchにaddressが空のデータを追加します.
検索keywordが空のデータ:
検索は例外を返し、デフォルトではNUllの検索は許可されません.これはMappingでnull_を指定する必要があります.valueプロパティは、
検索keywordが空のデータ:
複数のフィールドを集約
複数のフィールドを集約してインデックスに配置し、copy_を使用します.to重合を行う.たとえば、マルチフィールドクエリでは、各フィールドをフィルタリングする必要はなく、集約フィールドのみを使用できます.copy_を使用toの場合、集約の名前を指定することによって実現されます.
実際、copy_to配列フォーマットを使用して名前を追加しないと、自動的にデータフォーマットに変換されます.
2つのデータを追加し、検索を検証します.
上から結果を返すと、ソースのフィールドに対応するcopyが追加されていません.toフィールド名なのでcopy_toはフィールドの内容をインデックスにコピーするだけで、含まれるフィールドは変更されません.
まとめ
この文書では、Mappingファイルを作成するための一般的で実用的な操作の紹介を通じて、これらの日常的な使用も基本的に把握できます.Mappingの機能操作を理解することは、ストレージ時の設計にも役立つと信じています.
個人ブログ:https://ytao.top公衆番号【ytao】に注目し、より多くのオリジナルの良い文
Mapping(マッピング)は、リレーショナル・データベース内のテーブルの構造定義に似ています.JSON形式でElasticSearchにデータを格納した後、検索エンジンでJSONフィールドに対応するタイプをマッピングします.この場合、mappingでコンテンツのタイプを定義する必要があります.
フィールドタイプ
JSONデータ型はElasticSearch定義のタイプにマッピングされ、よく使われる簡単なタイプは以下のとおりです.
JSONタイプ
ElasticSearchタイプ
テキストの種類
Text/Keyword
整数タイプ
long/integer
浮動小数点の種類
float/double
時間タイプ
date
ブール値
boolean
はいれつ
Text/Keyword
上で注意したいのは時間タイプで、JSONには時間タイプはありません.ここでは主に時間フォーマットデータのタイプを指します.
マッピングの定義
リレーショナル・データベースでは、データを格納する前にテーブル構造を作成し、フィールドに存在するタイプを指定します.同様にElasticSearchは、データの格納を行う前に、データを格納するMapping構造を定義しておいてもよい.まず簡単なperson Mappingを定義します.
上の図にはMappingの定義があります.ElasticSearch 7の前にmappingsには_typeプロパティ.
ダイナミックマッピング
事前にMappingを定義していない場合、データを追加すると、ElasticSearchは自動的にフィールドに基づいて対応するタイプに換算しますが、換算されたタイプは必ずしも私たちが望んでいるフィールドタイプではありません.やはり、人為的な介入で希望するMappingに変更する必要があります.
マッピングの更新
dynamicを使用してマッピングが更新できるかどうかを制御します.
dynamic-true
dynamicを
true
に設定するのがデフォルトdynamicのデフォルト値で、新規フィールドデータは書き込むことができ、インデックスすることもでき、Mapping構造も更新されます.データを追加し、定義されていない
gender
フィールドを追加します.# person
PUT person/_doc/1
{
"uId": 1,
"name": "ytao",
"age": 18,
"address": " ",
"birthday": "2020-01-15T12:00:00Z",
"money": 108.2,
"isStrong": true,
"gender": " " # Mapping
}
追加に成功しました.
gender
フィールドを検索します.Mapping構造の表示:
新しく追加されたフィールド値は、追加中に自動的に追加されます.
dynamic-false
dynamicが
false
に設定されている場合、新規フィールドデータを書き込むことができ、インデックスされることができず、Mapping構造が更新されます.同様にdynamicをfalseに設定し、データを追加します.他の手順は上記のtrue操作と同じです.Mappingを定義し、データを追加します.検索gender
フィールド:このとき、新規フィールドデータはインデックスできませんが、データは書き込むことができます.
Mappnigも新しいフィールドを追加しません.
dynamic-strict
dynamicが
strict
に設定されている場合、字面上の意味からも分かるように、ダイナミックマッピングには厳格であり、新規フィールドデータは書き込むことができず、インデックスされることができず、Mapping構造は更新されない.定義されたMapping構造に従ってのみデータを追加できます.新しいフィールドデータを追加すると、すぐに例外が放出されます.日付タイプの自動認識
上記では、dynamicがtrueに設定されている場合、新しいフィールドデータ自動認識タイプを追加してMappingを更新し、日付タイプであれば認識を指定できるタイプです.Personのdynamic_を指定date_formats形式:
PUT person/_mapping
{
"dynamic_date_formats": ["yyyy/MM/dd"]
}
ここでは、複数の時間フォーマットを指定できます.personに新しいデータを追加します.todayとfirstDateです.
PUT person/_doc/2
{
"today": "2020-01-15",
"firstDate": "2020/01/15"
}
新しいフィールドデータを追加した後のMapping:
時間フォーマットが
yyyy/MM/dd
の場合は時間フォーマットとして認識できるように指定したので、todayフィールドの値がyyyy-MM-dd
の場合は時間タイプとして認識できずtextタイプと判定します.マルチフィールド
Mappingではfieldsマルチフィールドアトリビュートを定義して、異なるシーンでの実装を満たすことができます.例えば
address
はtext
タイプと定義され、fieldsにはkeyword
タイプが定義されています.ここでは主に2つの異なる使用シーンを区別します.text
は、全文検索のための分詞逆インデックスを確立する.keyword
は、ソートおよび集約のための分詞逆インデックスを確立しません.データの追加:
# person
PUT person/_doc/1
{
"uId": 1,
"name": "ytao",
"age": 18,
"address": " ",
"birthday": "2020-01-15T12:00:00Z",
"money": 108.2,
"isStrong": true
}
クエリー
address
データ.クエリー
address.keyword
データ.keyword
で検索した場合,分詞インデックスは確立されないため,データは取得されなかった.インデックスの制御
フィールドでindexを使用して、現在のフィールドインデックスが検索できるかどうかを指定します.指定したタイプはbooleanタイプ、falseは検索不可、trueは検索可能です.先に削除する前のMapping:
DELETE person
name
プロパティのindex
をfalseに設定するMappingを作成します.上記のデータを再度追加した後、
name
フィールドを検索します.フィールドindexがfalseを設定すると、インデックスが設定されていないため、検索はインデックスを取得できません.
NULL処理
ElasticSearchにaddressが空のデータを追加します.
PUT person/_doc/2
{
"uId": 2,
"name": "Jack",
"age": 22,
"address": null,
"birthday": "2020-01-15T12:00:00Z",
"money": 68.7,
"isStrong": true
}
検索keywordが空のデータ:
検索は例外を返し、デフォルトではNUllの検索は許可されません.これはMappingでnull_を指定する必要があります.valueプロパティは、
text
タイプで宣言できません.検索keywordが空のデータ:
"null_value": "NULL"
を設定すると、NULL値は検索を処理できます.複数のフィールドを集約
複数のフィールドを集約してインデックスに配置し、copy_を使用します.to重合を行う.たとえば、マルチフィールドクエリでは、各フィールドをフィルタリングする必要はなく、集約フィールドのみを使用できます.copy_を使用toの場合、集約の名前を指定することによって実現されます.
実際、copy_to配列フォーマットを使用して名前を追加しないと、自動的にデータフォーマットに変換されます.
2つのデータを追加し、検索を検証します.
# person
PUT person/_doc/1
{
"uId": 1,
"name": "ytao",
"age": 18,
"address": " ",
"birthday": "2020-01-15T12:00:00Z",
"money": 108.2,
"isStrong": true
}
PUT person/_doc/2
{
"uId": 2,
"name": " ",
"age": 22,
"address": null,
"birthday": "2020-01-15T12:00:00Z",
"money": 68.7,
"isStrong": true
}
full_name
の値をクエリーすると、nameとaddressに関連する値のオブジェクトが返されます.上から結果を返すと、ソースのフィールドに対応するcopyが追加されていません.toフィールド名なのでcopy_toはフィールドの内容をインデックスにコピーするだけで、含まれるフィールドは変更されません.
まとめ
この文書では、Mappingファイルを作成するための一般的で実用的な操作の紹介を通じて、これらの日常的な使用も基本的に把握できます.Mappingの機能操作を理解することは、ストレージ時の設計にも役立つと信じています.
個人ブログ:https://ytao.top公衆番号【ytao】に注目し、より多くのオリジナルの良い文