[翻訳] OpenSearch 2.15 でハイブリッドクエリのパフォーマンスが最大 70% 向上
OpenSearch 2.10 で導入されて以来、ハイブリッド検索はセマンティック検索結果の関連性を向上させたいユーザーの間で人気を集めています。全文検索とセマンティック検索を組み合わせることで、ハイブリッドクエリは EC サイト、ドキュメント検索、ログ分析、データ探索など、さまざまなアプリケーションで優れた結果を提供します。しかし、大規模なデータセットや複雑なクエリを扱う場合、パフォーマンスの問題が発生することがあります。
新しいリリースごとに、OpenSearch はスケールでのハイブリッド検索パフォーマンスを向上させるための多くの改善を実装してきました。バージョン 2.15 では、これらの改善により、バージョン 2.13 と比較してハイブリッドクエリのパフォーマンスが最大 70% 向上しました。
OpenSearch 2.15 での改善点
開発チームはコードを分析し、パフォーマンスのボトルネックを最適化することで改善を行いました。以下の領域に焦点を当てました。
条件付きスコアリングロジック
以前は、クエリ中のスコア収集のコアロジックが固定されており、必要かどうかに関係なく計算が実行されていました。これにより、特定のクエリタイプやプラグインでスコアリング計算が冗長な場合に、不要な計算が発生することがよくありました。OpenSearch 2.15 では、スコアリングロジックを条件付きにし、現在使用中のプラグインで必要ない場合は特定の計算をスキップできるようにしました。この最適化により、計算オーバーヘッドが削減され、クエリ処理が高速化し、リソース利用率が向上します。
この変更によるパフォーマンス改善は大きく、ベンチマークでは一部のユースケースでクエリ処理速度が 20% 向上しています。
非効率な構造の置き換え
バージョン 2.13 のパフォーマンスを分析したところ、Java Streams API は便利ですが、高パフォーマンスシナリオでは不要なオーバーヘッドを発生させていることがわかりました。これは特に、集中的なデータ処理が必要な領域で顕著でした。バージョン 2.15 では、Java Streams 構造を for ループや最適化されたデータ処理技術などのより効率的な代替手段に置き換えました。この変更により、特定のデータ処理タスクで最大 25% のパフォーマンス向上が得られ、OpenSearch がより大きなデータセットやより複雑なクエリをより効率的に処理できるようになりました。
不要な計算の排除
クエリオブジェクトのハッシュコード計算など、特定の高コストな計算が不要であることがわかりました。これらの計算を削除することで、リソースがより効率的に割り当てられ、ハイブリッドクエリが高速化されます。この変更により、クエリ処理速度が 20% 向上しました。
データ構造の最適化
一部のソート操作に使用される優先度キューの使用を改善しました。クエリヒットオブジェクトの割り当て戦略を遅延初期化に変更し、キューが最大容量に達したときに最低スコアの要素を削除するようにしました。ベンチマークでは、この最適化により特定のデータ処理タスクでクエリ処理速度が最大 10% 向上しました。
繰り返し計算の削減
冗長な内部計算を軽減するために、値のキャッシュと再利用戦略を実装し、システム内の全体的な計算オーバーヘッドを削減しました。繰り返し計算の処理を最適化し、値の再利用を促進することで、システムを 5% 高速化しました。
ベンチマーク結果
ベンチマーク結果では、OpenSearch 2.15 のハイブリッドクエリで、バージョン 2.13 と比較して大規模データセット (1,000 万件以上) で最大 70% のパフォーマンス向上が示されています。これらのベンチマークは、セマンティック検索ユースケースの評価用に特別に作成された新しい OpenSearch Benchmark ワークロードを使用して実施されました。
| 取得ドキュメント数 | ハイブリッドサブクエリ数 | OpenSearch 2.13 p50 (ms) | OpenSearch 2.13 p90 (ms) | OpenSearch 2.15 p50 (ms) | OpenSearch 2.15 p90 (ms) | パフォーマンス向上率 |
|---|---|---|---|---|---|---|
| 1.6K | 1 | 75 | 77 | 75 | 76 | 1% |
| 1.6M | 1 | 224 | 240 | 109 | 114 | 52% |
| 10M | 1 | 729 | 841 | 237 | 257 | 70% |
| 15M | 3 | 1224 | 1300 | 294 | 330 | 75% |
今後の改善予定
OpenSearch のパフォーマンス指標を継続的に分析し、さらなる改善の機会を特定していきます。今後の改善には以下が含まれる可能性があります。
- ハイブリッドクエリの高度な最適化技術: 個々のドキュメントではなくドキュメントのバッチを反復処理することで、レイテンシをさらに削減しパフォーマンスを向上させます。この技術は、大量のデータを処理する際の計算オーバーヘッドを最小化することで、ハイブリッドクエリ処理を効率化することを目指しています。
- アルゴリズムの改良: 既存のアルゴリズムを改良し、ハイブリッド検索により適した新しいアルゴリズムを導入します。これには、より正確で高速な結果を確保するためのランキングおよびスコアリングメカニズムの最適化が含まれます。
継続的なパフォーマンスインサイトと改善を提供するための取り組みには以下が含まれます。
- ナイトリーベンチマーク実行: バージョン 2.15 から、ハイブリッドクエリのナイトリーベンチマーク実行結果を公開し、バージョン間のパフォーマンス変化を追跡できるようにします。これらの結果は OpenSearch Performance Benchmarks ページで確認できます。
- 拡張ベンチマークワークロード: テキスト検索クエリに加えて、ベクトル検索クエリのメトリクスを収集するための拡張機能でベンチマークワークロードを拡大します。
これらの改善により、OpenSearch はより強力で効率的になります。
参考資料
OpenSearch Project(OSS) の Publicationです。 OpenSearch Tokyo User Group : meetup.com/opensearch-project-tokyo/
Discussion