データベーススキーマをバージョン管理したい。

これまでMS SQL Serverなどでデーターベーススキーマのバージョン管理をVisual Studioの「データベースプロジェクト」などを使って行っていました。
Elasticsearchでも同様にデータベーススキーマをバージョン管理したいと考えております。できればバージョン管理システム(Gitなど)と連動して自動でマイグレーション出来ればベストと考えております。
データベースマイグレーションツールとしては、liquibaseFlywayなどが有名ですが、どちらもElasticsearchには対応していないようです。

Elasticsearchはスキーマレスでスキーマ集約型であり、Mappingは動的に変えるのは難しいということは分かっておりますが、それでもある程度indexやmappingのバージョン管理は必要かと思っています。

なにか良いツール、運用方法などありましたらば、御助言いただければ幸いです。

こんにちわ。ほんの1例ですが参考までに。

Mappingについては、Index Templateで管理するようにし、Index Templateにはバージョンを持つようにします。
基本的には、このファイル(json)をGitなりで管理して、使うようにしています。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html#versioning-templates

バージョンを埋め込んでおくと、どのバージョンのテンプレートが現在有効なのか? というのが分かりやすくなります。

あとは、テンプレートでdynamicをどうするかを考えます。
データ登録時に、Templateに未登録のフィールドがあったらどうするか?ということです。
ユーザに好き勝手にフィールドを増やされたくない! 完全にスキーマを固定してしまいたい!
ということなら、dynamic: strict というようなパターンが考えられるかと思います。

https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html

ご参考になれば幸いです。

1 Like

tsgkdtさん、コメントありがとうございます。
なるほど、Index Templateをバージョン管理するのですね。検討してみます。

あとは、dynamicについては失念していました。elasticsearchならそこも考えないといけないですね。勉強します。

他にツール等使っている人などはいらっしゃいませんか?
Elasticsearch Beyonder , Elasticsearch Migration, generator-jhipster-elasticsearch-reindexer などが関連していそうなのを見つけましたが、buildできなかったり使い方が分からなかったりで挫折しています。