【Python】Elasticsearchを操作する -CRUD操作

これまでに、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”という空のインデックスが作成されます

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を操作することができます。まだまだ使い切れていない機能もあると思うので、理解し次第まとめいければと思います。

ではでは👋