Elasticsearch-document-apis
Elasticsearch-ドキュメントAPI
Elasticsearchは、単一ドキュメントAPIと複数ドキュメントAPIを提供します。API呼び出しは、それぞれ単一ドキュメントと複数ドキュメントを対象としています。
インデックスAPI
特定のマッピングでそれぞれのインデックスにリクエストが行われたときに、インデックスにJSONドキュメントを追加または更新するのに役立ちます。 たとえば、次のリクエストはJSONオブジェクトを追加し、学校と学校マッピングの下にインデックスを付けます-
PUT schools/_doc/5
{
name":"City School", "description":"ICSE", "street":"West End",
"city":"Meerut",
"state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
"fees":3500,
"tags":["fully computerized"], "rating":"4.5"
}
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
自動インデックス作成
JSONオブジェクトを特定のインデックスに追加するリクエストが行われ、そのインデックスが存在しない場合、このAPIはそのインデックスとその特定のJSONオブジェクトの基になるマッピングを自動的に作成します。 この機能を無効にするには、次のパラメーターの値をfalseに変更します。これはelasticsearch.ymlファイルにあります。
action.auto_create_index:false
index.mapper.dynamic:false
また、次のパラメータの値を変更することにより、特定のパターンを持つインデックス名のみが許可されているインデックスの自動作成を制限することができます-
action.auto_create_index:+acc*,-bank*
注-ここで+は許可されていることを示し、-は許可されていないことを示します。
バージョニング
Elasticsearchはバージョン管理機能も提供します。 バージョンクエリパラメータを使用して、特定のドキュメントのバージョンを指定できます。
PUT schools/_doc/5?version=7&version_type=external
{
"name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
"city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
"fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
バージョニングはリアルタイムのプロセスであり、リアルタイムの検索操作の影響を受けません。
バージョン管理には2つの最も重要なタイプがあります-
内部バージョン管理
内部バージョニングは、1から始まり、更新ごとに増分されるデフォルトのバージョンで、削除が含まれます。
外部バージョン管理
ドキュメントのバージョン管理がサードパーティのバージョン管理システムなどの外部システムに保存されている場合に使用されます。 この機能を有効にするには、version_typeをexternalに設定する必要があります。 ここで、Elasticsearchは外部システムによって指定されたバージョン番号を保存し、自動的にインクリメントしません。
操作タイプ
操作タイプは、作成操作を強制するために使用されます。 これにより、既存のドキュメントの上書きを回避できます。
PUT chapter/_doc/1?op_type=create
{
"Text":"this is chapter one"
}
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
自動ID生成
IDがインデックス操作で指定されていない場合、ElasticsearchはそのドキュメントのIDを自動的に生成します。
POST chapter/_doc/
{
"user" : "tpoint",
"post_date" : "2018-12-25T14:12:12",
"message" : "Elasticsearch Tutorial"
}
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "PVghWGoB7LiDTeV6LSGu",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
APIを取得
APIは、特定のドキュメントに対してgetリクエストを実行することにより、タイプJSONオブジェクトを抽出するのに役立ちます。
pre class="prettyprint notranslate" > GET schools/_doc/5
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
- この操作はリアルタイムであり、Indexのリフレッシュレートの影響を受けません。
- バージョンを指定することもできます。Elasticsearchはそのバージョンのドキュメントのみを取得します。
- Elasticsearchが検索できるように、リクエストで_allを指定することもできます すべてのタイプのそのドキュメントIDに対して、最初に一致したドキュメントを返します。
- また、特定のドキュメントの結果に必要なフィールドを指定することもできます。
GET schools/_doc/5?_source_includes=name,fees
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"fees" : 2200,
"name" : "Central School"
}
}
getリクエストに_sourceパーツを追加するだけで、結果のソースパーツを取得することもできます。
GET schools/_doc/5?_source
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
refreshパラメーターをtrueに設定することにより、get操作を実行する前にシャードを更新することもできます。
APIを削除
ElasticsearchにHTTP DELETEリクエストを送信することにより、特定のインデックス、マッピング、またはドキュメントを削除できます。
DELETE schools/_doc/4
上記のコードを実行すると、次の結果が得られます-
{
"found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
"_shards":{"total":2, "successful":1, "failed":0}
}
ドキュメントのバージョンを指定して、その特定のバージョンを削除できます。 ルーティングパラメータを指定して、特定のユーザーからドキュメントを削除できます。ドキュメントがその特定のユーザーに属していない場合、操作は失敗します。 この操作では、GET APIと同じように、リフレッシュオプションとタイムアウトオプションを指定できます。
更新API
この操作を実行するためにスクリプトが使用され、バージョニングが使用されて、取得および再インデックス中に更新が発生していないことを確認します。 たとえば、あなたはスクリプトを使用して学校の費用を更新することができます-
POST schools/_update/4
{
"script" : {
"source": "ctx._source.name = params.sname",
"lang": "painless",
"params" : {
"sname" : "City Wise School"
}
}
}
上記のコードを実行すると、次の結果が得られます-
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "4",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
更新されたドキュメントにgetリクエストを送信して、更新を確認できます。