こんにちは。
副業事業開発部の吉田です。 普段はクラウドリンクスの開発をしています。
今回は副業マッチングプラットフォーム「クラウドリンクス」の検索機能サービスの技術選定についてお話ししていきます。
背景
クラウドリンクスでは検索サービスとしてAlgoliaを採用していました。 Algoliaの問題点として、部分一致検索の機能はあるが、完全一致の検索機能がない点、データ量に応じた従量課金である点があります。 今後、ユーザー数が増加していくことや検索機能を拡張していくには不安がある状態でした。
課題
検索サービスを選定するに当たって、下記の指標を作りました。
検索したい単語が綺麗に探し出せる 基本的に検索機能では、探したい単語(クラウドリンクスならユーザーのスキルや使用言語など)が的確にヒットする必要がある。
コストが安く済むか ここで言うコストとは、導入を行う際の技術的なコストと、料金面の話も入っています。
機能性・拡張性 カテゴリー、ソート、タイプなどの詳細な検索設定を構築することができるか。 外部や内部のライブラリにより幅広いカスタマイズを行えるかどうか。
管理やモニタリングのしやすさ どのワードが一番検索されているかをモニタリングできると、今後の施策を展開する際に役立ちます。 もちろん、裏側でサービスを使用していくに連れて増えていくデータの監視なども入っています。
調査
上記の観点を4つの項目に分け、Algoliaに変わる検索サービスの機能的な特徴を洗い出しました。 Algoliaでできていたことは当然移行後のサービスでもできて欲しいため、Algoliaを評価の基準としています。
Algolia | Elastic Search | Amazon OpenSearch | Amazon CloudSearch | |
---|---|---|---|---|
導入 | ・サービス登録から全て使用可能 | ・サーバー上で構築する必要がある ・プラットフォームにkibanaを設定すると操作しやすい ・Dockerコンテナイメージよりローカルで起動検証可能 |
・サーバー上で構築する必要がある ・OpenSearch用のプラットフォームがある ・Dockerコンテナイメージよりローカルで起動検証可能 |
・フルマネージド、すでにパッケージとして使用可能になっている ・AWS上ですぐ試せる。 ・サーバレスプランならAlgoliaのようにすぐ使用可能(金額は高い) |
実装 | ・JSONでindexを設定可能 | ・JSONでindexを設定可能 ・さまざまなライブラリが使用可能 |
・JSONでindexを設定可能 ・さまざまなライブラリが使用可能 |
・JSONでindexを設定可能 ・基本的な検索機能を使用可能 |
カスタマイズ | ・検索機能は細かくいじれない ・ファセットのカスタマイズはできる。 ・indexサイズに制限がある(100KB) |
・詳細な検索設定を構築可能 ・ライブラリにより幅広いカスタマイズを行える ・indexサイズ制限なし |
・詳細な検索設定を構築可能 ・ライブラリにより幅広いカスタマイズを行える ・indexサイズ制限なし |
・細かめな検索設定が可能(カテゴリー、ソート、タイプなど) |
管理 | ・プラットフォームが用意されているので、感覚的に使用することができる | ・感覚的に操作可能。 ・全て英語ではあるが、日本語の設定もできる |
・kibanaにて管理 | ・AWSのデザインで操作可能 |
※kibana…検索と可視化の機能を提供してくれるOSSのフロントエンドアプリ https://www.elastic.co/jp/kibana/
金額
Algoliaでは金額も問題に上がっていたため、最低限のプランで1ヶ月運用した結果を乗せています。
Algolia | ElasticSearch | Amazon OpenSearch | Amazon CloudSearch | |
---|---|---|---|---|
合計金額/月 | 80 USD | 67.104 USD(AWS) 88.416 USD(GoogleCloud) |
96.11 USD | 96.11 USD? |
基本料金は確かにAlgoliaのほうが安いのですが、従量課金制なのでデータ件数の増量に比例して月々の値段が上がります。 サーバー運用を直接行なうElasticSearchやOpenSearchのほうが、データに対するコストを削減することができると考えました。
結論
Algolia 部分一致の検索機能しかないため、完全一致などの機能がなく、料金が高い。
ElasticSearch カスタマイズができる分導入コストが高く、AWSと袖を分けているので、今後どのような展開を行うかがわからない。
Amazon CloudSearch フルマネージドで手を加える箇所が少なく、導入コストが低いが、その分料金がかかる。
Amazon OpenSearch 柔軟なカスタマイズ性に加えてAWSによる連携もできるため、今後のサービス拡充に耐えられる可能性がある。
今回の調査結果を下記のような表にしました。
Algolia | Elastic Search | Amazon OpenSearch | Amazon CloudSearch | |
---|---|---|---|---|
管理 | ◎ | ○ | ○ | ◎ |
導入 | ○ | △ | △ | ○ |
実装 | △ | ○ | ○ | ○ |
カスタマイズ | △ | ◎ | ◎ | ○ |
金額 | △ | ○ | ○ | △ |
上記の結果から、カスタマイズ性に優れ、料金面もAlgoliaよりも安く、クラウドリンクスが動作しているAWSとの親和性もあるので、一旦は「 OpenSearch 」に移行することに決定しました。
まとめ
検索サービスの特性上、データの件数が必要な機能、発生するコストへ影響してくるため、これが正解だと言い切れないところが辛いところでしたが、普段はあまり意識することのない検索サービスについて学ぶことができ、大変良い勉強になりました。
最後に
この記事を読んでクラウドリンクスに興味を持って頂けた方は、こちらからエンジニアの募集を行なっておりますので、宜しければ是非お願い致します。
参考リンク
AlgoliaからElasticSearchに乗り換えた話 https://note.com/penmarkjp/n/n4d69756b5b2d#e7596c56-5776-4582-8465-63abf5ed7077
「いい検索」とはなにか?検索システムのしくみと評価指標を解説 https://logmi.jp/tech/articles/321195
Algolia を利用した全文検索エンジンリプレイスの取り組み https://note.com/tyrwzl/n/nf36b4ec3a284#T94fg
CloudSearchを使ってみた https://qiita.com/kazu_kazu/items/2d2fda3409e166d105a9
FIREBASEの推奨する全文検索 ELASTIC SEARCH / ALGOLIA / TYPESENSEの比較 https://nipo-plus-doc.sndbox.jp/tech/fulltext/index.html
Algolia を利用した全文検索エンジンリプレイスの取り組み https://note.com/tyrwzl/n/nf36b4ec3a284