Introducing DoorDash’s In-House Search Engine
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/layerx/285a14fa-d2a7-4f0a-94fe-e69e37a5af47/3d78b3f375b0aeb8b8ee693ce170185a.png)
要約
- DoorDash: Uber Eatsのようなフードデリバリーサービス
- 検索エンジンをElasticsearchから自社開発の検索エンジンに移行
背景
- サービスの急成長により効率的なスケールアップできない可能性があると判断
- 店舗とアイテムのハイブリッド検索に移行するにつれて問題が顕著になった
- Elasticsearchのボトルネック
- レプリケーションメカニズムに問題
- サポートや情報が不足
概要
- Elasticsearchから自社開発の検索エンジンに移行
- 新しい検索エンジンのコアとしてApache Luceneを採用
- 検索エンジンに複数レプリカを持たせた
- インデックス作成と検索のトラフィックを分離
- インデックスは、関連性を持つ複数のタイプのドキュメントを保存するように設計
- 結果
- 99.9%タイルの遅延が50%減少し、ハードウェアコストが75%減少
インデックス作成と検索のトラフィックを分離
- Indexer(下側)とSearcher(上側)を分離
- Searcher
- S3 からインデックスをDL
- 多くのレプリカを追加することでスケールする
- Indexer
- 優先度高の更新はすぐに更新
- 優先度低の更新は定期再構築(6時間ごと)時に更新
- 更新先のS3は1つ
![](https://s3.ap-northeast-1.amazonaws.com/wraptas-prod/layerx/962f49d6-9635-4541-9c51-cd0570a4a50c/88442539aeacd243097d3c660b7b93e6.png)
汎用検索エンジンとして提供
- 開発者向けにクエリAPIの提供
- インデックス付きフィールドや計算フィールドの提供
- インデックスを作成することでクエリ高速化
- 計算フィールドなどで用いる、関連性を持つ複数のタイプのドキュメントを同じシャードに保存できる仕組みを作った
- ドキュメント同士を関連性(ローカル結合、ブロック結合)を定義
- 親子セットでインデックスされる