Elasticsearch-あなたのクラスタを探索する2
36558 ワード
1.データの変更
Elasticsearchはほぼリアルタイムでデータ操作と検索機能を提供します。デフォルトでは、索引/更新/削除データから検索結果に表示される時間まで、一秒の遅延(リフレッシュ間隔)があります。これはSQLなど他のプラットフォームとの重要な違いです。
索引と置換ドキュメント
先に確認します
下記のコードを実行します。
以下の例は、どのようにして明示的IDがない場合にインデックスドキュメントを表示しますか?ここはPOST要求です。
ドキュメントを索引と置換できるほか、ドキュメントの更新もできます。Elasticsearchは実際に内部で更新されていませんので、ご注意ください。更新するたびに、Elasticsearchは古い文書を削除し、更新された新しい文書を適用したインデックスを作成します。
更新例:
3.文書の削除
索引、個々のドキュメントの更新、削除ができるほか、Elasticsearchは_を使用しても提供されています。bulk APIは、上述の任意の動作を一括して実行する機能である。この機能は非常に重要であり、非常に効果的なメカニズムを提供しているので、できるだけ速く複数の動作を実行し、できるだけ少なくネットワークを往復することができます。
次の例では、2つの索引を作成します。
Elasticsearchはほぼリアルタイムでデータ操作と検索機能を提供します。デフォルトでは、索引/更新/削除データから検索結果に表示される時間まで、一秒の遅延(リフレッシュ間隔)があります。これはSQLなど他のプラットフォームとの重要な違いです。
索引と置換ドキュメント
先に確認します
GET /customer/_doc/1?pretty
結果は以下の通りです{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "John Doe"
}
}
下記のコードを再実行します。PUT /customer/_doc/1?pretty
{
"name": "John Doe"
}
結果:{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 2, -- 2
"result" : "updated", -- , , created
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1, -- 1
"_primary_term" : 1
}
最初に作成したものと比較します。{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created", --
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
もしdocumentのidが同じなら、戻ってきたデータは前のデータに置き換えられます。下記のコードを実行します。
PUT /customer/_doc/2?pretty
{
"name": "Jane Doe"
}
注意:ここではインデックスIDが2の新しいdocumentを作成します。結果は以下の通りです{
"_index" : "customer",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"result" : "created", --
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
インデックスの場合、ID部分は任意です。指定されていない場合、ElasticsearchはランダムIDを生成し、それを使ってドキュメントを索引します。Elasticsearchで生成された実際のID(または、前の例で明示的に指定されたコンテンツ)は、インデックスAPI呼び出しの一部として返されます。以下の例は、どのようにして明示的IDがない場合にインデックスドキュメントを表示しますか?ここはPOST要求です。
POST /customer/_doc?pretty
{
"name": "Jane snow post"
}
結果は以下の通りです{
"_index" : "customer",
"_type" : "_doc",
"_id" : "HH8_UGgB4DiB3AKG7sYS", -- id
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
先ほど作成した文書を照会します。GET /customer/_doc/HH8_UGgB4DiB3AKG7sYS?pretty
結果は以下の通りです{
"_index" : "customer",
"_type" : "_doc",
"_id" : "HH8_UGgB4DiB3AKG7sYS",
"_version" : 1,
"found" : true,
"_source" : {
"name" : "Jane snow post"
}
}
2.文書documentを更新するドキュメントを索引と置換できるほか、ドキュメントの更新もできます。Elasticsearchは実際に内部で更新されていませんので、ご注意ください。更新するたびに、Elasticsearchは古い文書を削除し、更新された新しい文書を適用したインデックスを作成します。
更新例:
POST /customer/_doc/1/_update?pretty
{
"doc": { "name": "Jane Doe" }
}
応答:{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
クエリー:GET /customer/_doc/1?pretty
応答:{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"found" : true,
"_source" : {
"name" : "Jane Doe"
}
}
新しい内容を更新して追加します。POST /customer/_doc/1/_update?pretty
{
"doc": { "name": "Jane Doe", "age": 20 }
}
クエリの結果:{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 4,
"found" : true,
"_source" : {
"name" : "Jane Doe",
"age" : 20
}
}
スクリプトで更新:POST /customer/_doc/1/_update?pretty
{
"script" : "ctx._source.age += 5"
}
再度の検索結果は以下の通りです。{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 5,
"found" : true,
"_source" : {
"name" : "Jane Doe",
"age" : 25
}
}
上記の例では、ctx._.sourceとは、現在更新されるソースドキュメントのことです。3.文書の削除
DELETE /customer/_doc/2?pretty
4.バッチ処理索引、個々のドキュメントの更新、削除ができるほか、Elasticsearchは_を使用しても提供されています。bulk APIは、上述の任意の動作を一括して実行する機能である。この機能は非常に重要であり、非常に効果的なメカニズムを提供しているので、できるだけ速く複数の動作を実行し、できるだけ少なくネットワークを往復することができます。
次の例では、2つの索引を作成します。
curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }'
結果は以下の通りです{
"took" : 1810,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 6,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 6,
"_primary_term" : 1,
"status" : 200
}
},
{
"index" : {
"_index" : "customer",
"_type" : "_doc",
"_id" : "2",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1,
"status" : 200
}
}
]
}
以下の例では、第1の文書(IDは1)を更新し、第2の文書(IDは2)を一括操作で削除します。curl -X POST "localhost:9200/customer/_doc/_bulk?pretty" -H 'Content-Type: application/json' -d'
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'
結果:{
"took" : 1867,
"errors" : false,
"items" : [
{
"update" : {
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 7,
"_primary_term" : 1,
"status" : 200
}
},
{
"delete" : {
"_index" : "customer",
"_type" : "_doc",
"_id" : "2",
"_version" : 3,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1,
"status" : 200
}
}
]
}
Bulk APIは、一つの操作が失敗しない。単一操作が何らかの理由で失敗した場合、その後の残りの動作を処理し続けます。一括APIが戻ると、特定の動作が失敗したかどうかを確認するために、各動作に状態を提供します。