PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

Swiggyが検索の候補表示を改善した話:OpenSearch上で動くリアルタイム機械学習ランキング

キーポイント

まず何が起きたのか

インドのフードデリバリー企業 Swiggy が、検索候補表示の仕組みをかなり本格的に刷新した、という話です。

検索窓に1文字打つと候補が出てくるあの機能、見た目は地味ですが、実は裏側ではかなり忙しい処理が走っています。しかも Autocomplete は、​1回の検索で終わりではなく、キーを打つたびに再検索が起きるので、とにかく速さが命です。
ここが遅いと、ユーザーは「なんか引っかかるな」と感じてすぐ離れてしまう。地味だけど、サービスの体験を左右する重要パーツです。

Swiggy はここで、従来の「人が調整したルールベースの順位づけ」から、​learning to rank を使った機械学習ランキングへ移行しました。
個人的には、これはかなり筋のいい進化だと思います。検索候補って、単純な文字一致だけでは「本当に今この人が欲しいもの」を当てにくいんですよね。ユーザーの行動履歴や人気度のような“文脈”が効くので、機械学習と相性がいい分野です。

何がすごいのか

この仕組みの面白いところは、単に「MLを使いました」では終わっていない点です。
Swiggy は、Autocomplete を次の2段階に分けています。

  1. Candidate generation
    まずは候補を広く集める
  2. Ranking
    集めた候補を、機械学習で並び替える

これは検索システムでは王道に近い設計です。
最初から完璧な答えを探すのではなく、まず「それっぽい候補」を素早く拾い、その後で精密に順位をつける。
たとえるなら、最初に売り場をざっと回って商品を集め、最後にレジ前で「どれを優先的に出すか」を決める感じです。

image_0001.jpg

候補を集める段階:速さと広さを重視

Swiggy の候補生成では、​OpenSearch を使った lexical retrieval と、embedding-based similarity search を組み合わせています。

つまり、「文字が合うもの」だけでなく「意味が近いもの」も拾うわけです。
これにより、ユーザーが少し曖昧な入力をしても候補を出しやすくなります。これは実際かなり便利で、検索体験の“抜け”を減らせます。

ただし、候補生成の段階はあくまで広く拾うことが目的なので、ここで細かく考えすぎないのがコツです。
速く、たくさん拾う。細かい判断は次のランキングに任せる。設計の切り分けがきれいです。

ランキング段階:ユーザーの今を見て並べ替える

候補が集まったら、次は ML モデルが順位を付けます。ここで使うのが、ユーザーの行動に関するリアルタイム信号です。

記事で挙げられているのは、たとえば次のようなものです。

![image_0012.png](https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/news/2026/05/swiggy-autocomplete-rt-ranking/en/resources/1Screenshot 2026-05-16 at 4.53.26 PM-1778975637105.png)

要するに、「この人は最近何に反応したか」「今どんな検索をしているか」「みんなは何を選んでいるか」を見て、候補の順番を決めるわけです。
静的なルールより、かなり人間の感覚に近いです。「この人にはこれが上に来た方が自然だよね」という判断を、モデルに学ばせるイメージですね。

Feature Store が地味に重要

このシステムでは Feature Store も使われています。
Feature Store は、学習に使う特徴量と、実運用で使う特徴量をそろえて管理する仕組みです。

なぜ大事かというと、学習時と本番時でデータの持ち方がズレると、モデルがうまく動かないからです。
「学習では見えていた情報が、本番では使えない」みたいなことが起きると、せっかく作った ML が台無しになります。

Swiggy は、事前に計算した特徴量と、ストリーミングで来る最新の特徴量の両方を扱えるようにしていて、しかも重いリアルタイム計算を避けています。
これは実務っぽくて良いです。理想論より、ちゃんと遅延を守る工夫が入っているのが好印象です。

OpenSearchの中で動かすのがポイント

記事で特に重要なのは、​ランキングモデルを OpenSearch の中で直接動かしていることです。

これによって、追加のサービスを挟まなくて済みます。
サービスを1つ増やすと、その分だけネットワークの往復が増えますし、障害点も増えます。Autocomplete はミリ秒単位の世界なので、余計なホップはかなり痛い。

image_0013.jpg

つまり Swiggy は、
​「MLを使う」ことより「MLを低遅延で使い切る」こと
に本気で取り組んでいるわけです。

これは地味ですが、かなり重要です。
モデルが賢くても、遅ければ使い物になりません。検索や推薦の現場では、賢さと速さの両立がいつも難所です。

ルールベースから学習ベースへ

以前は、手で調整した heuristic ranking、つまり「この条件なら上に出す」といったルールで順位を決めていたようです。
でもルールベースは、増やせば増やすほど複雑になります。しかも、ユーザー行動が変わるたびに人手で直すのはしんどい。

そこを ML に置き換えると、ユーザーのクリック率や購入、注文といった実データから、ランキングを自動で改善できます。
この発想はとても現代的です。個人的には、検索やレコメンドのような「答えが1つじゃない領域」は、ルールだけで追いかけるより ML の方がずっと自然だと思います。

もちろん、ML にすれば自動で全部うまくいくわけではありません。
学習データの品質や、遅延、再学習の頻度、説明しやすさなど、課題は山ほどあります。
でも、Swiggy はそこをちゃんと設計で受け止めているのがえらいところです。

継続学習のフィードバックループ

このシステムのもう一つの肝は、​継続的なフィードバックループです。

image_0014.jpg

ユーザーの

といった信号を集めて、オフラインの学習パイプラインに流し、モデルを再生成して、model registry に保存し、オンラインへデプロイする。
つまり、使われ方を見ながらモデルを育てる流れです。

これはかなり実用的です。
検索候補の世界は流行り廃りが早いので、古いモデルのままだとすぐズレます。
新しい検索語やトレンドに、自動で追従できるのは大きな強みでしょう。

この設計の良さを一言でいうと

この事例の本質は、​​「ML を入れた」ではなく、「低遅延のまま ML を回す設計にした」​ことだと思います。

Autocomplete は、ユーザーに見えないところで毎回ものすごく厳しい条件を要求されます。
その中で、

image_0015.jpg

という構成は、かなりバランスがいいです。

派手さはないけれど、実運用で強い。
こういう設計は、技術記事としても実務のヒントとしてもかなりおいしいですね。

まとめ

Swiggy の事例は、検索候補のような“目立たないけど超重要な機能”を、機械学習でしっかり改善した好例です。
しかも、ただ精度を上げただけでなく、​低遅延・継続更新・学習と本番の整合性までちゃんと考えているのがポイントです。

個人的には、こういう「AIで派手に見せる」話より、​既存機能を現実的な制約の中で少しずつ賢くする話のほうがずっと面白いです。
現場で本当に価値が出るのは、たぶんこういうところなんだと思います。


参考: Swiggy Improves Search Autocomplete Using Real Time Machine Learning Ranking

同じ著者の記事