English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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":["完全自動化"], "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オブジェクトの基本マッピングを作成します。この機能を無効にするには、elasticsearch.ymlファイルに存在する以下のパラメータの値をfalseに変更します。

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
}

バージョン管理はリアルタイムのプロセスであり、リアルタイム検索操作に影響されません。

最も重要なバージョン管理のタイプが二種類あります。-

内部バージョン管理

内部バージョン管理はデフォルトのバージョンで、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" : "PVghWGoB"7LiDTeV6LSGu",
   "_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
      ],
       2200,
      "tags" : [
         "Senior Secondary",
         "beautiful campus"
      ],
      "rating" : "3.3"
   }
}
  • この操作はリアルタイムで、インデックスのリフレッシュ率に影響されません。

  • バージョンを指定すると、Elasticsearchはそのドキュメントのバージョンのみを取得します。

  • リクエストで_allを指定すると、Elasticsearchは各種タイプのドキュメント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" : {
       2200,
      "name" : "Central School"
   }
}

getリクエストに_source部分を追加して、結果のソース部分を取得することもできます。

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
      ],
       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リクエストを送信して更新を確認できます。