golangのElasticsearchライブラリについて調べてみた

はじめに

多くのアプリケーションには検索機能が実装されておりますが、検索のライブラリといえばElasticsearchがファーストチョイスに挙げられると思います。

今回はgolangにおけるElasticsearchライブラリについて調べてみました。

主要なElasticsearchライブラリの紹介

elastic/go-elasticsearch

Elastic社公式のライブラリ。2019年末に公開とわりと新しめです。Elasticsearch 7.x以降に特化して開発されているということで、サポートバージョンも最近のものです。純正のライブラリということで今後も頻繁にメンテナンスされていくでしょう。

olivere/elastic

こちらはドイツのミュンヘンにお住まいのOlivereさんという方が、2012年より開発に携わられており、 Elasticsearch v1.0からv7系まで幅広くサポートしているのが特徴です。歴史があるので当然ドキュメントも豊富ですし、コミュニティによるメンテナンスが活発であるとのこと。非公式のサードパーティ製にも関わらずStar数も7.3kと多く、信頼が厚いライブラリと言っていいでしょう。

ライブラリ選択のポイント

プロジェクトでElasticsearchを導入する際、どちらのライブラリを選ぶべきか迷うところですが、個人的には以下のようなポイントかなあと思っています。。

  • バージョン互換性 elastic/go-elasticsearchはElasticsearch 7.x以降に特化しているため、それより前のバージョンを使用している場合はolivere/elasticを選ぶ必要があります。逆に、7.x以降を使用している場合は、公式のelastic/go-elasticsearchを選ぶことで、最新のAPIとの互換性が保証されます。
  • 公式サポートと他のElastic Stack製品との連携 Elastic社の製品を複数使用する場合、公式のelastic/go-elasticsearchを選ぶことで、他の製品(Kibana、Beats等)との連携が容易になります。また、公式サポートを受けられるのも大きなメリットです。
  • コードベースの複雑さと学習コスト olivere/elasticは柔軟性が高い反面、コードベースが複雑になりがち。elastic/go-elasticsearchはシンプルなコードベースを持ち、学習コストが比較的低めとのこと。チームのスキルセットや開発リソースもよります。

olivere/elasticの現状と今後

Olivereさんが2021年の4月に以下のIssueでメンテナンスモードに入ると宣言しました。

https://github.com/olivere/elastic/issues/1533

ざっくりポイントをまとめると

  • 新機能の追加は行わない
  • バグ修正は必要に応じて行う
  • PRのレビューとマージは継続する
  • Elasticsearch 8.xへの対応は予定していない

とのこと。

主な理由としては、Elastic社とAmazon社の間での論争や、Elastic社の公式クライアントである elastic/go-elasticsearch の発展などが挙げられています。

Olivereさんは長年にわたってolivere/elasticを開発・メンテナンスしてきましたが、個人的な事情もあり、今後は主にメンテナンスに注力することを決めたようです。

また、Elastic社の公式クライアントの発展により、Go開発者にとってより良い選択肢が提供されつつあることも影響していると思われます。

olivere/elasticは多くのプロジェクトで使われており、今後もバグ修正やPRのマージが行われる予定ですが、新機能の追加や最新バージョンへの対応は限定的になると考えられます。新規プロジェクトではelastic/go-elasticsearchの利用が推奨されそうです。

まとめ

というわけで、2つのライブラリを見てきましたがをelastic/go-elasticsearch選択するケースがこれからも増えていきそうです。

今後はelastic/go-elasticsearchについて深掘りしていきたい所存であります。

ただし、プロジェクトの要件によってはolivere/elasticが適している場合もあるので、適切に判断しましょうという結論でしたー

参考リンク

github.com

github.com

shunyaueta.com

techblog.zozo.com