Esノート---新規esインデックス
5617 ワード
Esのインデックスに対する操作はrestful apiで行われています.パラメータはjsonの山で、1年前に調べながら書いたことがあります.今回は移行しました.esは6.0バージョンになりました.ずいぶん変わりました.メモを書いて記録してください.
esインデックスを作成するのは簡単で、putリクエストです.
settings mappingsとaliasesを含むインデックスを新規作成します.settingsはスライスなどのパラメータを設定し、mappingsはインデックスの各typeをどのように処理するかを設定し、aliasesは以前使ったことがなく、あまり使えないように見えますが、こちらは記録しません.
settings
こちらには設定できるパラメータがたくさんありますが、公式には修正はお勧めしません.よくあるのは直す必要があるのは2人だけだ. number_of_shardsインデックスごとのプライマリスライス数は、デフォルト値は5です.この構成はインデックス作成後に変更できません. number_of_replicasの各プライマリスライスのコピー数は、デフォルト値は1です.この構成は、アクティブなインデックス・ライブラリの場合、いつでも変更できます.
インデックスにsettings値を設定する
settings値の変更
mappings
各ドキュメントにはtypeがあり、各typeには独自のmappingがあります.mappingはtypeのfield、各fieldのデータ型、およびesがこれらのfieldをどのように処理するかを定義します.
1つのmappingsでは複数のtypeが推奨されず、es 6以降のバージョンでは複数のtypeが許可されない可能性が高いことに注意してください.
公式の計画では、es 7-es 9は徐々にtypeを削除します.
各indexには1つのtypeしかないことをお勧めします.1つのindexの各typeのフィールドは完全に独立していないため、1つのindexの複数のtypeはいくつかの浪費をもたらします.
経由可能/mappingは、es内の1つ以上のインデックスの1つ以上のmappingを表示します.
データ型(field)文字列string text keyword
数字 long integer short byte double float half_float scaled_float
ブール型boolean 日付date range integer_range float_range long_range double_range date_range
array object
私が使わないタイプはたくさんあります.
新しいfieldを含むドキュメントをインデックスすると、esはダイナミックマッピングを使用し、JSONの基本データ型からfieldタイプを推測しようとします.
一般的には、デフォルトのマッピングで十分です.Esは123のようにinteger、123.123のようにdoubleに自動的にマッピングしますが、多くの場合、カスタムマッピング、特にstringタイプが必要です.
カスタムマッピングでは、次のことができます.全文文字列と正確な文字列(nameフィールドなど) 特定言語アナライザ を使用 ...
1つのfieldの最も主要な属性はtypeであり、ほとんどのfieldではtypeを設定するだけでよいのが一般的です.
range
書式設定
検索形式
この部分は比較的簡単で細かく展開されていない.
string
stringタイプについては、以前はstringのみでしたが、現在はkeywordとtextの2種類に分かれています.
text
textはまずアナライザを経てインデックスされ、descのようなフィールドはtextを使用する必要があります.次の重要なフィールドがあります.
analyzer
アナライザは、このstringをどのように処理するかを指定することができます.例えば、htmlのタグをすべて削除してから、単語を分けて、無駄な停止を削除して、残りのtokenをインデックスしたいと思っています.デフォルトのstandardアナライザを使用するか、別の内蔵アナライザを指定できます.プラグインにインストールされているikなどの3番目のアナライザを使用するか、アナライザをカスタマイズすることもできます.
アナライザは使いやすい
そのうちik_smartはすでにインストールされているサードパーティのアナライザです.
index
検索可能に設定するかどうか、boolean
norm
採点時にいくつかの標準化処理を行うかどうか、追加のリソースが必要だと理解しています.
fields
このフィールドは面白いです.まず例を見てみましょう
filenameのフィールドで、こちらはtypeがtextで、分詞検索ができます.しかし、正確なマッチングが必要な場合があります.filenameを使用することができます.raw.挿入時にfilenameを入力するだけで、esに保存されているのは2部、filenameとfilenameです.raw.
keyword
textとは異なり、keywordはアナライザを通過せず、検索時に正確に一致します.
index fields
この2つのパラメータはtextと同じです
ignore_above
一定の長さを超える文字列を削除
マッピング操作
新規マッピング
新しいindex、descフィールドはik分詞インデックス、birthはログ、nameフィールドの正確なインデックス、user_idはlong型に設定されています.
マッピングの更新
tagフィールドを追加します.
esインデックスを作成するのは簡単で、putリクエストです.
PUT /my_index
{
"settings": { ... any settings ... },
"mappings": {
"type_one": { ... any mappings ... },
},
"aliases" : {...}
}
settings mappingsとaliasesを含むインデックスを新規作成します.settingsはスライスなどのパラメータを設定し、mappingsはインデックスの各typeをどのように処理するかを設定し、aliasesは以前使ったことがなく、あまり使えないように見えますが、こちらは記録しません.
settings
こちらには設定できるパラメータがたくさんありますが、公式には修正はお勧めしません.よくあるのは直す必要があるのは2人だけだ.
PUT /my_temp_index
{
"settings": {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
インデックスにsettings値を設定する
PUT /my_temp_index/_settings
{
"number_of_replicas": 1
}
settings値の変更
mappings
各ドキュメントにはtypeがあり、各typeには独自のmappingがあります.mappingはtypeのfield、各fieldのデータ型、およびesがこれらのfieldをどのように処理するかを定義します.
1つのmappingsでは複数のtypeが推奨されず、es 6以降のバージョンでは複数のtypeが許可されない可能性が高いことに注意してください.
公式の計画では、es 7-es 9は徐々にtypeを削除します.
各indexには1つのtypeしかないことをお勧めします.1つのindexの各typeのフィールドは完全に独立していないため、1つのindexの複数のtypeはいくつかの浪費をもたらします.
経由可能/mappingは、es内の1つ以上のインデックスの1つ以上のmappingを表示します.
データ型(field)
私が使わないタイプはたくさんあります.
新しいfieldを含むドキュメントをインデックスすると、esはダイナミックマッピングを使用し、JSONの基本データ型からfieldタイプを推測しようとします.
一般的には、デフォルトのマッピングで十分です.Esは123のようにinteger、123.123のようにdoubleに自動的にマッピングしますが、多くの場合、カスタムマッピング、特にstringタイプが必要です.
カスタムマッピングでは、次のことができます.
1つのfieldの最も主要な属性はtypeであり、ほとんどのfieldではtypeを設定するだけでよいのが一般的です.
{
"number_of_clicks": {
"type": "integer"
}
}
range
PUT range_index
{
"mappings": {
"my_type": {
"properties": {
"expected_attendees": {
"type": "integer_range"
},
"time_frame": {
"type": "date_range",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
書式設定
PUT range_index/my_type/1
{
"expected_attendees" : {
"gte" : 10,
"lte" : 20
},
"time_frame" : {
"gte" : "2015-10-31 12:00:00",
"lte" : "2015-11-01"
}
}
検索形式
POST range_index/_search
{
"query" : {
"range" : {
"time_frame" : {
"gte" : "2015-10-31",
"lte" : "2015-11-01",
"relation" : "within"
}
}
}
}
この部分は比較的簡単で細かく展開されていない.
string
stringタイプについては、以前はstringのみでしたが、現在はkeywordとtextの2種類に分かれています.
text
textはまずアナライザを経てインデックスされ、descのようなフィールドはtextを使用する必要があります.次の重要なフィールドがあります.
analyzer
アナライザは、このstringをどのように処理するかを指定することができます.例えば、htmlのタグをすべて削除してから、単語を分けて、無駄な停止を削除して、残りのtokenをインデックスしたいと思っています.デフォルトのstandardアナライザを使用するか、別の内蔵アナライザを指定できます.プラグインにインストールされているikなどの3番目のアナライザを使用するか、アナライザをカスタマイズすることもできます.
アナライザは使いやすい
{
"desc": {
"type": "string",
"analyzer": "ik_smart"
}
}
そのうちik_smartはすでにインストールされているサードパーティのアナライザです.
index
検索可能に設定するかどうか、boolean
norm
採点時にいくつかの標準化処理を行うかどうか、追加のリソースが必要だと理解しています.
fields
このフィールドは面白いです.まず例を見てみましょう
"filename":{
"type":"text",
"norms":false,
"fields":{
"raw":{
"type":"keyword",
"ignore_above":256
}
}
},
filenameのフィールドで、こちらはtypeがtextで、分詞検索ができます.しかし、正確なマッチングが必要な場合があります.filenameを使用することができます.raw.挿入時にfilenameを入力するだけで、esに保存されているのは2部、filenameとfilenameです.raw.
keyword
textとは異なり、keywordはアナライザを通過せず、検索時に正確に一致します.
index fields
この2つのパラメータはtextと同じです
ignore_above
一定の長さを超える文字列を削除
マッピング操作
新規マッピング
PUT /index_name
{
"mappings": {
"person" : {
"properties" : {
"desc" : {
"type" : "string",
"analyzer": "ik_smart"
},
"birth" : {
"type" : "date"
},
"name" : {
"type" : "string",
"index" : "not_analyzed"
},
"user_id" : {
"type" : "long"
}
}
}
}
}
新しいindex、descフィールドはik分詞インデックス、birthはログ、nameフィールドの正確なインデックス、user_idはlong型に設定されています.
マッピングの更新
PUT /index_name/_mapping/person
{
"properties" : {
"tag" : {
"type" : "string",
"index": "not_analyzed"
}
}
}
tagフィールドを追加します.