Amazon Web Services ブログ
Amazon ES を使った Compass での住宅検索のシンプル化と最新化
Amazon Elasticsearch Service (Amazon ES) は、AWS での Elasticsearch の大規模なデプロイメント、セキュア化、および運用を容易にする完全マネージド型サービスです。幅広い人気があるこのサービスは、さまざまなお客様が異なる検索ユースケースのためにアプリケーションに統合しておられます。
Compass は、その顧客に質の高い不動産物件検索と保存済み検索機能を提供するために、Amazon ES を含めた AWS のサービスを使ってその検索ソリューションを再設計しました。
この記事では、Compass の検索ソリューションがどのように進化したか、異なるアーキテクチャでどのような課題とメリットを見出したか、そして Amazon ES がどのように長期的かつスケーラブルなソリューションを提供しているかを見て行きます。また、Amazon Managed Streaming for Apache Kafka (Amazon MSK) が物件リスティングデータのイベント駆動型リアルタイムストリーミング機能の作成にどのように役立ったかについても説明します。このソリューションは、同様のユースケースに適用できます。
Amazon ES の概要
ログ分析、アプリケーションモニタリング、インタラクティブな検索、およびその他多くの機能のデプロイメント、運用、およびスケーリングを容易にする Amazon ES は、Elasticsearch の使い勝手のよい API とリアルタイム機能と共に、現実世界のアプリケーションが必要とする可用性、スケーラビリティ、およびセキュリティを提供する完全マネージド型サービスです。Amazon Kinesis、AWS Lambda、Amazon CloudWatch などの AWS のその他サービス、および Logstash や Kibana といったサードパーティーツールとのビルトイン統合も提供しているので、raw データを実用的なインサイトに素早く変化させることができます。
Amazon ES には以下のメリットもあります。
- 完全マネージド型 – 本番対応のクラスターを数分で起動し、パッチ適用、バージョニング、バックアップは必要なくなります。
- 全データへのアクセス – データの取得、保持、関連付け、および分析のすべてを 1 ヵ所で行います。
- スケーラブル – 数回クリックする、または単一の API コールを使ってクラスターのサイズを変更します。
- セキュア – VPC にデプロイし、セキュリティグループと AWS Identity and Access Management (IAM) ポリシーを使ってアクセスを制限します。
- 高可用性 – アベイラビリティーゾーン全体にレプリケートすると共に、モニタリングと自動化された自己修復も備えています。
- 緊密な統合 – シームレスなデータ統合、セキュリティ、監査、およびオーケストレーション。
Amazon MSK の概要
Amazon MSK は、Apache Kafka を使ってストリーミングデータを処理するアプリケーションの構築と実行を容易にする完全マネージド型サービスです。Apache Kafka は、リアルタイムストリーミングデータのパイプラインとアプリケーションを構築するためのオープンソースプラットフォームです。Amazon MSK では、ネイティブの Apache Kafka API を使ってデータレイクにデータを投入し、データベース内外に変更をストリーミングして、機械学習と分析アプリケーションを動作させることができます。
Compass の概要
Urban Compass, Inc.(Compass) は、グローバルな不動産テクノロジー企業として業務を行っており、不動産資産の購入、賃借および販売をサポートするオンラインプラットフォームを提供しています。
Compass によると、「Compass は業界初の最新不動産プラットフォームで、業界最高の人材とテクノロジーを組み合わせることによって、インテリジェントかつシームレスな検索および販売エクスペリエンスを実現します。24 を超える市場で運営される Compass の年初来の販売高は 200 億 ドルを上回り、世界中の人のために住まいを見つけるというビジョンを持つ 2,300 人の社員と 15,000 以上の不動産業者を抱えています。」
Compass が検索を使って顧客を支援する方法
検索は Compass の主要機能のひとつで、ウェブサイトの訪問者と不動産業者がプラットフォーム内で物件を見つけることを可能にします。Compass プラットフォームには、以下の検索コンポーネントがあります。
- 検索サービス – 何千もの属性にまたがる超地域密着型の不動産物件データの検索を機能させるために、広範囲で Amazon ES を使用します。この検索コンポーネントは、Apache Spark で処理され、Amazon Aurora PostgreSQL に保存されたデータを Amazon MSK 経由で取得します。
- 不動産業者および消費者検索 – 検索サービス上に構築されたフロントエンドで、不動産業者、消費者、および Compass 検索サービス間におけるインターフェイスとして機能します。React で構築されており、不動産物件データをシームレスに検索し、超地域密着型フィルターにアクセスすることを可能にします。
- 保存済み検索 – 消費者として検索を実行して保存すると、保存済み検索のインデックスが検索パラメータで更新されます。新しいリスティングがシステムに投入されると (listings Elasticsearch インデックスでインデックスされます)、Compass 検索が Elasticsearch のパーコレート機能を使って新しいリスティングに一致する保存済み検索を特定し、新しい物件リスティングをユーザーに通知します。
消費者検索の進化
以下のセクションでは、Compass の主要検索機能と、そのアーキテクチャが当初の Apache Lucene アーキテクチャから時間と共にどのように進化してきたかの詳細を掘り下げていきます。
Apache Lucene を使った以前のアーキテクチャ
Compass は Lucene との直接的な統合を通じて検索機能を実装し始めました。これは、手動でプロビジョニングされた AWS の仮想マシンと手動インストールによって設定されました。
以下のアーキテクチャ図では、MLS (Master Listing Service) システムのデータが共通の ETL (抽出、変換、ロード) フレームワークを通じてプッシュされ、リスティングデータベースに投入されます。その後、データは Lucene クラスターにプッシュされ、フロントエンド検索の REST API によってクエリされます。
このアーキテクチャには、Lucene 使用時における数多くの困難な作業が伴う、以下のような異なるペインポイントが存在しました。
- 専門的な知識が必要となる手動でのメンテナンスと設定
- ディスクの予想と拡大に関する課題
- 手動シャーディングによって達成されるスケーラビリティと高パフォーマンス
- 多大な労力を必要とする新規データフィールドの設定
Amazon ES を使った新しいアーキテクチャ
これらの課題を克服するために、Compass は Amazon ES の使用を開始しました。
以下のアーキテクチャ図は、Compass のシステムの進化を表すものです。Compass は、Amazon ES と Lucene を並行的に実行してトラフィックをシャドーイングし、本番環境での結果の検証と品質保証を行いました。Compass は、Amazon ES が同じ結果をレプリケートしていると確信するまで、これらのサービスを 2 か月間同時実行しました。
これに加えて、Compass は Amazon ES への切り替え直後にフルテキスト検索 (説明検索) を追加しました。その結果、顧客がリスティングと機能をより迅速に利用できるようになり、Compass は全国的に拡大し、局地化された検索を実装することができました。
Amazon MSK を使って強化されたアーキテクチャ
Compass は Amazon MSK を使ってアーキテクチャをさらに強化しました。そうすることで、変換されたイベントを Kafka クラスターにプッシュする異なるチームによる並行処理が可能になりました。以下の図は、強化されたアーキテクチャを示しています。
この新しいアーキテクチャで、Compass 検索は即座にその効果を発揮しました。
- Amazon ES がマネージドサービスであり、クラスター管理のオーバーヘッドを抱える必要がないことによるメンテナンスコストの削減
- インデックスの構築時間が 8 時間から 1 時間に短縮されたことによる追加のパフォーマンスメリット
- 1 回クリックするだけでクラスターを解体する能力 (メンテナンスを容易にします)
Amazon ES のユーザーインターフェイスとモニタリング機能のため、Compass チームは使用パターンを簡単に評価し、キャパシティー計画とコスト予測を実行することができました。
Elasticsearch パーコレーターを使った保存済み検索の実装
Elasticsearch パーコレーターはクエリ対ドキュメントのパターンを反転させる、つまりドキュメントの代わりにクエリをインデックスし、ドキュメントを使ってインデックスされたクエリをクエリします。パーコレートクエリの検索結果が、ドキュメントを一致させるクエリです。
Compass はこの機能を使用して、各ユーザーの検索クエリをインデックスすることによって保存済み検索機能を実装しました。物件リスティングが届くと、Amazon ES を使って一致するクエリを取得し、対応する顧客に通知を送ります。
以下の図は、このワークフローを示したものです。
パーコレートの実装前、Compass は新しいマッチを調べるために保存済み検索クエリを再実行していました。パーコレートは、検索における変化をユーザーにタイミング良く通知することを可能にします。Compass は、平均で 250,000 件の検索クエリを保存します。
新しいリスティングが届くと、毎分平均 5~10 件の一括リクエストを送信し、各一括リクエストには 1,000 個のドキュメントが含まれています。Amazon ES 側での最大レイテンシーは 750~2,500 ミリ秒です (m5.12xlarge インスタンスタイプの 18 ノードのクラスターを使用)。
以下の図は、保存済み検索のアーキテクチャを示しています。検索条件は検索インデックスに保存されます。MLS および Amazon MSK リスティングストリームを通じて新しいリスティングが届くと、パーコレートプロセッサが実行され、これによって Amazon MSK の保存済み検索一致トピックストリームにメッセージがプッシュされます。その後、それが保存済み検索サービスによってプルされ、そこから通知がエンドユーザーにプッシュされます。
このアーキテクチャには以下のメリットがあります。
- 検索条件に照らして物件を探すと、それが Amazon ES に保存される。不動産業者が保存済み検索条件を一致させるシステムに物件を追加すると、条件に一致する新しい物件が追加されことがユーザーに通知されます。
- パーコレート機能により、ユーザーは物件がシステムに追加されるとすぐに通知を受けるので、時間差が 1 時間から 1 分に短縮される。
- パーコレートの実装前、Compass チームには検索に対して新しい物件記録をプルするバッチジョブがあったが、現在はプッシュベースの通知を使用できる。
プラットフォームがより多くのリスティング、不動産業者、およびユーザーにスケールすることから、Compass には優れた成長への道が備えられています。Compass では以下の機能を開発する予定です。
- リアルタイムストリーミング
- 検索ランキングのための AI
- AI を使ってパーソナライズされた検索
まとめ
この記事では、Compass が顧客の不動産ニーズに関連する結果を提供するために Amazon ES を使用する方法を説明しました。次のリスティングのためにリアルタイムで検索しているか、Compass の保存済み検索を使って市場をモニタリングしているかに関わらず、Amazon ES はユーザーが必要とする結果をもたらします。
Lucene インフラストラクチャを管理する手間がなくなって以来、 Compass はそのビジネスとエンジニアリングに焦点を当てており、新たな機会が広がりました。
著者について
Sakti Mishra は AWS の Data Lab ソリューションアーキテクトです。Sakti は、お客様がデータ分析ソリューションを構築するためのお手伝いをし、モダナイゼーションイニシアティブへの道のりを迅速化させています。
仕事以外では、新しいテクノロジーについて学ぶこと、映画を鑑賞すること、そして旅行を楽しんでいます。