これまでに、PythonからElasticsearchのデータを検索・取得する方法を紹介してきました。
ElasticsearchはJSON形式のデータベースみたいなものです。したがって、一般にデータベースで可能なCRUD操作と呼ばれるものは一通り可能です。
今回は、PythonからElasticsearchのCRUD操作を行う方法を紹介します。
C:Create インデックスを作成する
まずはインデックスを作成します。
インデックスの作成は、以下のようにします。
from elasticsearch import Elasticsearch
#elasticsearchに接続
es = Elasticsearch("http://localhost:9200")
es.indices.create(index="create_test")
これを実行すると、”create_test”という空のインデックスが作成されます
この時点では、mappingも定義されていません。
mappingを定義してインデックス作成
mappingを指定してインデックスを作成することもできます。
mappingはデータベースでいうところのカラム(列)のようなもので、辞書型で指定します。
mapping = {
"mappings": {
"properties": {
"name": {"type": "text"},
"birthday": {"type": "date"},
"address": {"type": "text"},
"email": {"type": "text"}
}
}
}
es.indices.create(index="create_test2", body=mapping)
これを実行すると、mappingが登録されたインデックスが作成されます。
レコードの登録(Insert)
レコードの登録はcreate()で行います。それぞれのフィールドは、辞書型で指定します。
登録時には、レコードを一意に特定できるidを指定します。
doc = {
"name": "John",
"address": "CA",
"email": "JohnCA@gmail.com"
}
es.create(index="creater", body=doc, id=1)
レコードの登録は、既存のインデックにも、新規のインデックにも可能です。新規のインデックスに登録する場合、インデックスの作成も行われます。
R:Read レコードの参照
Pythonからクエリによる参照ができます。
レコードの参照については、以下の記事を参照してください。
U:Update レコードの更新
レコードの更新は、update()を用いて行います。
変更したいフィールドだけ指定すれば、レコードのその部分だけが更新されます。
change_doc = {
"doc": {
"address": "TX"}}
es.update(index="creater", body=change_doc, id=1)
“address”が”CA”から”TX”に更新されました。
D:Delete レコード・インデックスの削除
レコードの削除
ドキュメントの削除には、delete()を用います。
ここでは、削除対象のインデックスとidを指定します。先ほど更新したレコードを対象に削除を実行してみます。
es.delete(index="creater", id=1)
削除処理が実行され、レコードがなくなりました。
インデックスの削除
次は、インデック自体を削除します。
インデックを削除するときは、indicesのdelete()を用います。
es.indices.delete(index="creater")
インデックスが削除されたかどうか、プログラムで確認してみます。
print(es.indices.exists(index="crater"))
#Output
False
printで表示したプログラムは、指定のインデックスが存在するかを返すものです。存在する場合はTrueが返ります。
結果はFalseになっているので、インデックスが削除されていることがわかります。
まとめ
PythonからElasticsearchのCRUD操作を行う方法を紹介しました。
このように、Pythonからだと簡単に、比較的自由にElasticsearchを操作することができます。まだまだ使い切れていない機能もあると思うので、理解し次第まとめいければと思います。
ではでは👋