PolarSearch は、異なる OpenSearch カーネル上に構築された 2 つのメジャーバージョン、1.x と 3.x を提供しています。このガイドでは、ビジネスニーズに適したバージョンを選択できるよう、カーネルの機能、クライアントの互換性、ユースケースの観点から 2 つのバージョンを比較します。
選択の概要
PolarSearch のバージョンを選択する際には、互換性とパフォーマンスのトレードオフを考慮する必要があります。検索ノードを追加する際は、長期的なビジネス戦略とコードのリファクタリングに対する許容度に基づき、バージョン 1.x と 3.x のどちらかを選択する必要があります。以下のガイドを参考に、最適な選択を行ってください:
決定基準 | PolarSearch 1.x を選択 (Elasticsearch との互換性優先) | PolarSearch 3.x を選択 (パフォーマンス優先) |
コアビジネスニーズ | ワークロードが従来の全文検索に集中しており、短期的にベクトル検索を導入する計画がない。 | ビジネスに AI 検索、RAG、またはその他のベクトル検索シナリオが含まれているか、将来的にこれらの機能を導入する計画がある。 |
クライアントコードのリファクタリングコスト | 既存のコードとの厳密な互換性が求められる。現在、アプリケーションで Elasticsearch Java high-level REST Client 7.13.4 以前を使用しており、スムーズなゼロコード移行を希望する。 | コードのリファクタリングに抵抗がなく、長期的なメリットのために OpenSearch クライアントに切り替える意思がある。 |
パフォーマンスと機能への期待 | 従来の検索における現在のパフォーマンスベースラインを満たしていれば十分である。 | より優れたクエリと書き込みのパフォーマンス、強力なセキュリティコントロール、および OpenSearch コミュニティの最新機能へのアクセスが必要である。 |
バージョンの比較
以下の表は、PolarSearch 1.x と 3.x のコア仕様を比較したものです:
機能 | PolarSearch 1.x | PolarSearch 3.x |
Lucene バージョン | 8.10.1 | 10.3.1 |
Elasticsearch クライアントの互換性 | Elasticsearch Java high-level REST Client バージョン 7.0.0 から 7.13.4 までと完全な互換性があります。 | 互換性なし |
ベクトル検索 (k-NN) | 基本的なサポートのみで、パフォーマンスは低い | 完全なサポートと高いパフォーマンス |
クエリパフォーマンス | Lucene 8.x ベースライン | Lucene 10.x に基づいており、優れたインデックス作成とクエリパフォーマンスを提供します。 |
セキュリティ機能 | 基本認証 | 強化された認証とアクセス制御 |
ユースケース | Elasticsearch 7.x からの移行 | 新規プロジェクト、AI ワークロード |
クライアントの互換性
PolarSearch の 2 つのバージョンは、異なるクライアントライブラリをサポートしています。ご利用の PolarSearch バージョンに合ったクライアントを選択してください。
PolarSearch 1.x のクライアント
クライアント | 推奨バージョン | 説明 |
7.10.2 から 7.13.4 |
| |
Elasticsearch Java Low Level REST Client | すべてのバージョン | 安定性と柔軟性がありますが、HTTP リクエストとレスポンスを手動でシリアル化する必要があります。 |
1.3.20 | ネイティブサポートされています。PolarSearch 1.x との新規統合プロジェクトに推奨されます。 |
PolarSearch 3.x のクライアント
クライアント | 推奨バージョン | 説明 |
3.3.0 | ネイティブサポートされています。ベクトル検索 (k-NN) を含むバージョン 3.x のすべての機能をサポートします。 | |
Elasticsearch Java Low Level REST Client | すべてのバージョン | 安定性と柔軟性がありますが、HTTP リクエストとレスポンスを手動でシリアル化する必要があります。 |
ユースケース
Elasticsearch からの移行
アプリケーションで現在 Elasticsearch Java high-level REST Client (バージョン 7.0.0 から 7.13.4) を使用している場合、PolarSearch のバージョンの選択は、ビジネスコードをリファクタリングする準備ができているかどうかによって決まります:
ビジネスコードをリファクタリングしたくない場合は、PolarSearch 1.x を選択してください。このバージョンは Elasticsearch 7.x と API 互換性があり、コード変更を必要とせずに Elasticsearch からのスムーズな移行が可能です。既存のクエリ DSL、インデックスマッピング、クライアント構成を再利用できます。
ビジネスコードをリファクタリングする意思がある場合は、PolarSearch 3.x を選択してください。このバージョンは Elasticsearch クライアントと互換性がありません。移行プロセスでは、クライアントライブラリを置き換え、大幅なコードのリファクタリングを行う必要があります。
AI 検索と RAG
アプリケーションでベクトル検索、セマンティック類似性マッチング、または Retrieval-Augmented Generation (RAG) が必要な場合は、PolarSearch 3.x を選択してください。組み込みの k-NN プラグインは、高次元の埋め込みベクトルの保存と、近似最近傍 (ANN) クエリの実行をサポートします。典型的なユースケースは次のとおりです:
大規模言語モデル (LLM) アプリケーション向けの RAG ナレッジベース。
ドキュメント、画像、またはマルチモーダルデータのセマンティック検索。
埋め込みの類似性に基づく推奨システム。
全文検索とベクトル検索を組み合わせたハイブリッドクエリ。
新規プロジェクト
プロジェクトに Elasticsearch へのレガシーな依存関係がない場合は、PolarSearch 3.x を選択してください。このバージョンは最新の OpenSearch カーネル上に構築されており、優れたクエリパフォーマンス、ネイティブのベクトル検索機能、およびより長いサポートライフサイクルを提供します。すべての機能を最大限に活用するには、最初からネイティブの OpenSearch クライアントを使用してください。
従来の全文検索
PolarSearch 1.x と 3.x はどちらも、転置インデックス、トークン化、関連性スコアリングなどの全文検索機能をサポートしています。ワークロードが主に従来の全文検索に集中している場合:
既存の Elasticsearch Java high-level REST Client コードとの互換性を維持する必要がある場合は、1.x を選択してください。
より優れたインデックス作成とクエリパフォーマンス、またはパフォーマンス専有型のベクトル検索 (k-NN) を求めている場合は、3.x を選択してください。
移行に関する推奨事項
以下のセクションでは、2 つの一般的なシナリオにおける移行パスの概要を説明します:
Elasticsearch から PolarSearch 1.x への移行
このパスは、PolarSearch 1.x のレガシークライアントとの互換性を最大限に活用し、Elasticsearch からの移行時にコードの変更を最小限に抑えたいユーザー向けに設計されています。
新しいクラスターの作成
ご利用の PolarDB クラスターに、新しい PolarSearch 1.x 検索ノードを作成します。クライアントバージョンの互換性の確認
アプリケーションで使用されている Elasticsearch Java high-level REST Client が 7.0.0 から 7.13.4 のバージョン範囲内であることを確認します。バージョンが 7.14.0 以降の場合は、スペックダウンする必要があります。データの移行
スナップショット/リストアまたは Reindex を使用して、既存の Elasticsearch クラスターから新しい PolarSearch 1.x 検索ノードにデータを完全に移行します。コア API のテスト
アプリケーションの接続先を新しい PolarSearch 1.x 検索ノードに向け、インデックス作成、ドキュメントの読み取り/書き込み操作、検索、集約など、すべての REST API 呼び出しの互換性をテストします。ビジネス機能とパフォーマンスの検証
アプリケーションを徹底的にテストし、プロダクト検索やログクエリなど、検索に依存するすべての機能が正しく動作し、結果が期待どおりであることを確認します。トラフィックの段階的な切り替え
ロードバランサーまたはアプリケーションレベルの構成を使用して、古い Elasticsearch クラスターから新しい PolarSearch 1.x 検索ノードにライブトラフィックを段階的に切り替えます。古いインスタンスの廃止
新しいクラスターが一定期間安定して稼働することを確認した後、古い Elasticsearch インスタンスを安全に廃止して移行を完了します。
PolarSearch 1.x から 3.x への移行
このパスは、パフォーマンス専有型のベクトル検索など、バージョン 3.x の新機能を使用したいバージョン 1.x のユーザー向けです。このプロセスには、クライアントの置き換えとコードのリファクタリングが含まれることに注意してください。
新しいクラスターの作成
ご利用の PolarDB クラスターに、新しい PolarSearch 3.x 検索ノードを作成します。データの移行
Reindex を使用して、PolarSearch 1.x 検索ノードから新しい PolarSearch 3.x 検索ノードにデータを完全に移行します。クライアントの切り替えとコードのリファクタリング
アプリケーション内のクライアントライブラリ (Elasticsearch Java high-level REST Client や古い OpenSearch Java Client など) を、OpenSearch 3.x と互換性のあるネイティブクライアント (OpenSearch Java Client 3.3.0 など) に置き換えます。このステップでは、大幅なコードのリファクタリングが必要です。ビジネス機能の検証
コードをリファクタリングした後、アプリケーションを徹底的にテストし、すべての機能が新しいクライアントと 3.x カーネルで正しく動作することを確認します。パフォーマンスの検証
検索、インデックス作成、集約のパフォーマンスに重点を置き、パフォーマンスがバージョン 1.x と同等かそれ以上であることを確認します。トラフィックの段階的な切り替え
ロードバランサーまたはアプリケーションレベルの構成を使用して、1.x 検索ノードから新しい PolarSearch 3.x 検索ノードにライブトラフィックを段階的に切り替えます。古い検索ノードの廃止
新しいクラスターが一定期間安定して稼働することを確認した後、古い PolarSearch 1.x 検索ノードを安全に廃止してアップグレードを完了します。
よくある質問
Elasticsearch クライアントを PolarSearch 3.x で使用できますか?
いいえ。PolarSearch 3.x は OpenSearch 3.x 上に構築されており、Elasticsearch クライアントライブラリとの互換性はありません。Elasticsearch Java high-level REST Client バージョン 7.14.0 以降、および Java API Client 8.x には、PolarSearch への接続を妨げる Elastic ライセンスチェックが含まれています。PolarSearch 3.x に接続するには、OpenSearch Java Client 3.x 以降などのネイティブ OpenSearch クライアントを使用する必要があります。
Elasticsearch Java high-level REST Client 7.14.0 以降を使用して PolarSearch に接続できないのはなぜですか?
バージョン 7.14.0 以降、Elasticsearch Java high-level REST Client には Elastic ライセンスチェックが含まれています。このチェックは PolarSearch サーバーを正しく識別できないため、クライアントは起動時に例外をスローします。
PolarSearch 1.x の場合は、クライアントを 7.0.0 から 7.13.4 の間のバージョンにスペックダウンする必要があります。
PolarSearch 3.x の場合は、ネイティブの OpenSearch クライアントに切り替える必要があります。
PolarSearch 1.x はベクトル検索をサポートしていますか?
PolarSearch 1.x は基本的なサポートを提供しますが、パフォーマンスが低いため本番環境には適していません。その古いカーネルはベクトル検索に最適化されていません。パフォーマンス専有型のベクトル検索が必要な場合は、PolarSearch 3.x を選択してください。