2025年10月にリリースされたElasticsearch 9.2で、ベクトル検索の新しいストレージフォーマット「DiskBBQ」が技術プレビューとして導入されました。従来のHNSW(Hierarchical Navigable Small Worlds)と比較して、メモリ使用量を劇的に削減しながら高速なベクトル検索を実現する革新的な技術です。
来春からデータサイエンティストとして働く予定の技術オタク。
『知りたい』気持ちで質問を止められない、好奇心旺盛な学生。
DiskBBQとは?
DiskBBQって何?バーベキューと関係あるの?
いい質問だね!DiskBBQは、Elasticsearchの新しいベクトル検索アルゴリズムで、バーベキューとは関係ないんだ。名前の由来は「BBQ」という圧縮技術(Better Binary Quantization)から来てるよ。
ベクトル検索って何?
ベクトル検索は、データを数値の配列(ベクトル)として表現して、似たものを探す技術なんだ。例えば、画像検索や文章の類似度検索に使われているよ。GoogleやChatGPTのような検索システムの裏側で活躍してるんだ。
そんなに使われてるんだ!
従来のHNSWの課題
実は、従来のベクトル検索には大きな課題があったんだ。
どんな課題?
従来のHNSWという方式は、全てのデータをメモリ(RAM)に読み込む必要があったんだ。だから、データ量が増えるとメモリが足りなくなって、検索ができなくなってしまう。
メモリが足りないと、諦めるしかないの?
そうなんだ。もっと高性能なサーバーを用意するか、データ量を減らすしかなかった。でも、DiskBBQはこの問題を解決するために作られたんだよ。
どうやって解決するの!?
DiskBBQの仕組み
DiskBBQの最大の特徴は、ディスク(ハードディスクやSSD)から直接ベクトルを読み込むことなんだ。
ディスクから読むって、普通じゃないの?
実は普通じゃないんだ。従来のHNSWは検索する前に全データをメモリに読み込む必要があった。でもDiskBBQは、必要な部分だけをディスクから読み込むんだ。
なるほど!必要な部分だけ読めば、メモリが少なくて済むんだね!
そういうこと!具体的には、次の3つの技術を組み合わせてるんだ。
1. 階層的K-meansによるクラスタリング
まず、ベクトルを小さなグループ(クラスタ)に分けるんだ。これは「階層的K-means」という手法を使うよ。
K-meansって何?
K-meansは、似たもの同士をグループにまとめる手法なんだ。例えば、服を種類別に整理するみたいなイメージだよ。Tシャツはこの箱、ズボンはあの箱、みたいにね。
整理整頓みたいなものなんだ!
2. BBQ(Better Binary Quantization)による圧縮
次に、ベクトルを「BBQ」という技術で圧縮するんだ。
圧縮ってどれくらい小さくなるの?
元のベクトルのサイズを大幅に小さくできるんだ。例えば、128次元のベクトルなら、元のデータサイズの数十分の一まで圧縮できるよ。
数十分の一!?すごい!
3. SOARによる複数クラスタへの割り当て
最後に、「SOAR」という技術を使って、1つのベクトルを複数のクラスタに割り当てるんだ。
なんで複数に割り当てるの?1つじゃダメなの?
いい質問だね!1つのクラスタだけだと、境界にあるベクトルが見つけにくくなっちゃうんだ。複数のクラスタに割り当てることで、検索の精度(recall)を高められるんだよ。
なるほど!検索漏れを防ぐための工夫なんだね!
HNSWとの性能比較
で、実際にどれくらい速いの?
ベンチマークの結果を見てみよう。100万個のベクトルでテストした結果がこれなんだ。
インデックス作成時間
まず、データを検索可能な状態にする「インデックス作成」の時間だよ。
- HNSW BBQ:1,054,319ミリ秒(約17.5分)
- DiskBBQ:94,075ミリ秒(約1.6分)
DiskBBQは約10倍速いんだ。
10倍!?めちゃくちゃ速くなってるじゃん!
検索速度
検索速度(レイテンシ)はこんな感じだよ。
- HNSW BBQ:約3.4ミリ秒
- DiskBBQ:約4.0ミリ秒
あれ?DiskBBQの方が少し遅いね
そうなんだ。でも、これは十分高速で、ほとんどのアプリケーションでは問題ないレベルなんだ。それに、DiskBBQは100MBのメモリで動作してるけど、HNSWはもっと大量のメモリが必要なんだよ。
100MBで動くのはすごいね!スマホアプリにも使えそう!
検索精度(Recall)
検索精度も見てみよう。
- HNSW BBQ:92%
- DiskBBQ:91%
ほぼ同じ精度を保ってるんだ。
91%って高いの?低いの?
用途によるんだ。例えば、100件の関連結果があるとして、91件見つけられるってこと。多くの検索アプリケーションでは十分な精度だよ。
DiskBBQの使いどころ
じゃあ、どういう時にDiskBBQを使えばいいの?
DiskBBQがおすすめなのは、こんな場面だよ。
- メモリが限られている環境:小規模なサーバーやクラウドでコストを抑えたい時
- 大規模データセット:数百万、数千万のベクトルを扱う時
- 95%以下の精度で十分な用途:レコメンド機能や類似画像検索など
- コストを重視する場合:メモリの多いサーバーは高価だからね
逆に、使わない方がいい場面は?
99%以上の高精度が必要な場合や、メモリが十分にある環境では、従来のHNSWの方がいい場合もあるんだ。用途に応じて使い分けることが大切だよ。
なるほど!適材適所ってことだね!
実装方法
実際にどうやって使うの?
Elasticsearchのマッピング設定で、index_optionsにbbq_diskを指定するだけなんだ。
{
"mappings": {
"properties": {
"image-vector": {
"type": "dense_vector",
"dims": 128,
"similarity": "l2_norm",
"index_options": {
"type": "bbq_disk"
}
}
}
}
}
これだけ!?簡単すぎる!
そうなんだ。Elasticsearchが裏側で全部やってくれるから、設定はとてもシンプルだよ。dimsはベクトルの次元数で、similarityは類似度の計算方法を指定するんだ。
l2_normって何?
l2_normは「ユークリッド距離」って呼ばれる、2点間の直線距離を測る方法なんだ。他にもcosine(コサイン類似度)やdot_product(内積)が選べるよ。
用途に応じて選べるんだね!
まとめ
DiskBBQは、ベクトル検索の新しい選択肢として、メモリ効率と検索性能のバランスを大きく改善したんだ。
従来は全部メモリに入れる必要があったけど、DiskBBQはディスクから必要な分だけ読むから、メモリが少なくても大丈夫なんだね!
その通り!主なメリットをまとめるとこんな感じだよ。
- メモリ使用量を大幅削減:100MBという少量のメモリでも動作
- インデックス作成が約10倍高速:データの準備時間を大幅短縮
- 検索速度も十分高速:サブ20ミリ秒のレイテンシを実現
- スケーラビリティの向上:メモリではなくCPUとディスクで制限されるため、より大規模なデータセットに対応可能
これでコストを抑えながら、大規模なベクトル検索ができるようになるんだね!
まさにそういうこと。現在は技術プレビュー版だから、今後さらに改善されていくと思うよ。ベクトル検索を使ったアプリケーションを考えてる人は、ぜひチェックしてみてね。
教えてくれてありがとう!早速試してみたくなった!