PythonでElasticsearchのailiasの作成と確認と削除を実施してみます。
python 3.6で実施してみました。
indexの作成はこちらの記事になります。
・Python で Elasticsearch の settings と mappings を作成
https://colabmix.co.jp/tech-blog/python-elasticsearch-create-settings-mappings/
PythonでElasticsearchのエイリアス(alias)の作成
以下では「my-index」という名前で検索を行うためにprefixでのindexの名前を作成しそちらのエイリアスを設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
from elasticsearch import Elasticsearch from datetime import datetime # コネクション作成 elastic_con = Elasticsearch(host='localhost', verify_certs=True) # エイリアスの名前は「my-index」とする alias_name = "my-index" # 今回作成するindexの名前を設定 index_prefix = "my-index-" timestamp = datetime.now().strftime('%s') new_index = prefix + timestamp # エイリアスが存在するかの確認 elastic_con.indices.exists_alias(alias_name) # エイリアスの作成 elastic_con.indices.put_alias(index=new_index, name=alias_name) # エイリアスの削除 elastic_con.indices.delete_alias(index=new_index, name=alias_name) # エイリアスの変更 elastic_con.indices.update_aliases({ "actions": [ { "add": { "index": "my-index2", "alias": "my-index" }}, { "remove": { "index": "my-index1", "alias": "my-index" }}, { "add": { "index": "my-index3", "alias": "my-index" }} ] }) |
上記ではindex名をタイムスタンプで設定していますが、以下のように新しくindexを作成した時に古いindexを削除して付け替えることもできます。
こちらではエイリアスだけでなく、古いindexの削除も行なっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# エイリアス名が存在する時は付け替え if elastic_con.indices.exists_alias(alias_name): my_indices = elastic_con.indices.get_alias(index_prefix + "*") for my_index in my_indices: try: if list(my_indices[my_index]["aliases"].keys())[0]: old_index = my_index except: pass # 新しいエイリアスを設定し、古いエイリアスとindexの削除 elastic_con.indices.put_alias(index=new_index, name=alias_name) elastic_con.indices.delete_alias(index=old_index, name=alias_name) elastic_con.indices.delete(index=old_index) # エイリアス名が存在しない時はエイリアスの作成のみ else: elastic_con.indices.put_alias(index=new_index, name=alias_name) |
上記ではindexは一つの前提ですが、forループ内で削除を行うか、リストで取得すれば複数の削除なども実施できます。
実際の運用の場面では、エイリアスを利用しての運用が便利になりますので、自動更新の際などに利用ができます。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。