PolarSearch は、全文検索とベクトル検索をサポートする PolarDB の分散検索サービスです。OpenSearch 上に構築され、Elasticsearch エコシステムと互換性があり、PolarDB データベースと緊密に統合されています。PolarSearch は、簡単な操作でデータ検索のニーズに対応するワンストップソリューションを提供します。
このトピックは、Elasticsearch または OpenSearch に関する知識があることを前提としています。詳細については、「OpenSearch ドキュメント」をご参照ください。
この機能は現在ベータ版です。この機能が必要な場合は、チケットを送信してお問い合わせいただくことで、有効にできます。
適用範囲
クラスター構成要件
製品バージョン: Enterprise Edition。
データベースエンジン: MySQL 8.0.1、MySQL 8.0.2。
説明データベースエンジンに特定のマイナーバージョンは必要ありません。
詳細については、「エンジンバージョンのクエリ」をご参照ください。
シリーズ: Cluster Edition。
PolarSearch はサーバーレスクラスターではサポートされていません。詳細については、「サーバーレス」をご参照ください。
サポートされるリージョンとゾーン
PolarSearch は、次のゾーンでサポートされています:
リージョン | ゾーン |
中国 (杭州) | ゾーン K |
中国 (上海) | ゾーン E、ゾーン L、ゾーン N |
中国 (深圳) | ゾーン C、ゾーン D |
中国 (青島) | ゾーン C |
中国 (北京) | ゾーン K |
中国 (張家口) | ゾーン B |
日本 (東京) | ゾーン A、ゾーン C |
メキシコ | ゾーン A |
課金
PolarSearch は、個別の検索ノードを使用して検索機能を提供します。これらのノードは、通常の計算ノードと同様に課金されます。検索ノード上のインデックスとデータもストレージ領域を消費するため、ストレージ料金が発生します。
PolarSearch 検索ノードの追加
適用範囲の要件を満たす既存のクラスターには、検索ノードを追加できます。
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。クラスターが配置されているリージョンを選択し、クラスターを見つけます。
クラスター ID をクリックして、[基本情報] ページを開きます。
[データベースノード] エリアで、[ノードの追加/削除] をクリックします。

[ノードの追加/削除ウィザード] ダイアログボックスで、検索ノードの追加を選択します。
検索ノードアカウントの作成
管理者アカウントの設定
追加するアカウントは、標準のデータベースアカウントです。
この標準アカウントは、PolarSearch 機能の管理者アカウントとして機能します。
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。クラスターが配置されているリージョンを選択し、クラスターを見つけます。
クラスター ID をクリックして、[基本情報] ページを開きます。
[データベースノード] エリアで、[検索ノード] にカーソルを合わせ、[接続データベースアカウントの設定] をクリックします。

ダイアログボックスで、既存の標準データベースアカウントを選択するか、新しいアカウントを作成し、パスワードを入力します。

標準アカウントの設定
標準アカウントの場合、アカウントがアクセスできるインデックスを制御できます。
API を使用して、検索ノードの完全なアクセスの制御を実装できます。詳細については、「OpenSearch API」ドキュメントをご参照ください。
Kibana 互換の PolarSearch コンソールにログインし、セキュリティプラグインを使用してアカウントを作成します。
接続エンドポイントの取得
検索エンドポイント
[データベースノード] エリアで、[検索ノード] にカーソルを合わせます。環境に応じて、プライベートまたはパブリックエンドポイントを取得します。

ダッシュボードアドレス
[データベースノード] エリアで、[検索ノード] にカーソルを合わせます。環境に応じて、プライベートまたはパブリックダッシュボードアドレスを取得します。
PolarSearch へのログイン
検索エンドポイントを使用したアクセス
API を使用してインデックスとデータを管理する場合は、PolarSearch の API を使用してアクセスできます。このセクションでは、ECS インスタンスを例として使用します:
クラスターのホワイトリストを設定する: ECS インスタンスの IP アドレスを PolarDB for MySQL クラスターのホワイトリストに追加します。
説明ECS インスタンスと PolarDB for MySQL クラスターが同じ VPC にある場合は、ECS インスタンスのプライベート IP アドレスを追加します。
ECS インスタンスと PolarDB for MySQL クラスターが同じ VPC にない場合は、ECS インスタンスのパブリック IP アドレスを追加します。
PolarSearch に接続する: 次のコマンドを実行します。コマンドがクラスター情報を返した場合、接続は成功です。
<endpoint>:<port>を PolarSearch の検索エンドポイントに置き換えます。<user_name>:<passwd>を PolarSearch の管理者アカウントに置き換えます。curl http://<endpoint>:<port>/ -u <user_name>:<passwd>
ダッシュボードを使用したアクセス
グラフィカルユーザーインターフェイス (GUI) を使用して PolarSearch を管理する場合は、ダッシュボード (コンソール) を使用してアクセスできます。このセクションでは、ローカル環境のブラウザを例として使用します:
クラスターのホワイトリストを設定する: ローカル環境の IP アドレスを PolarDB for MySQL クラスターのホワイトリストに追加します。
ブラウザで PolarSearch コンソールにログインします:
ブラウザのアドレスバーに
http://<endpoint>:<port>を入力して Enter キーを押します。<endpoint>:<port>を PolarSearch のパブリックダッシュボードアドレスに置き換えます。コンソールのログインページで、PolarSearch の管理者アカウントを入力して、Kibana 互換の PolarSearch コンソールにログインします。
例
このセクションのすべての例では、ECS インスタンスのコマンドラインを使用します。
PolarSearch は、OpenSearch 2.10.0 のソフトウェア開発キット (SDK) および REST API と完全に互換性があります。他のバージョンでは互換性の問題が発生する可能性があります。詳細については、「OpenSearch」をご参照ください。
インデックスの作成
検索ノード上のインデックスは、リレーショナルデータベースのテーブルに似ています。次の例に示すように、Elasticsearch 互換の REST API を使用してインデックスを作成できます:
curl -X PUT "http://<endpoint>:<port>/articles" -H "Content-Type:application/json" -d '
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"title": {
"type": "text" // 全文検索フィールド (説明コメント。テスト前に削除してください。)
},
"content": {
"type": "text"
},
"author": {
"type": "keyword" // 完全一致フィールド (説明コメント。テスト前に削除してください。)
}
}
}
}
'データのインポート
curl -X POST "http://<endpoint>:<port>/articles/_bulk" -H "Content-Type:application/json" -d '
{"index": {}}
{"title": "Introduction to PolarSearch", "content": "PolarSearch is a powerful search engine.", "author": "Allen"}
{"index": {}}
{"title": "Advanced Search Techniques", "content": "Learn how to use full-text search and filters in PolarDB.", "author": "Lang"}
{"index": {}}
{"title": "Elasticsearch vs PolarSearch", "content": "A comparison of Elasticsearch and PolarSearch features.", "author": "Zhao"}
'検索クエリの実行
データがインポートされた後、次の例に示すように、SDK または REST API を使用して全文検索を実行できます:
curl -X GET "http://<endpoint>:<port>/articles/_search" -H "Content-Type:application/json" -d '
{
"query": {
"match": {
"content": "PolarSearch"
}
}
}'検索クエリの構文の詳細については、「OpenSearch」をご参照ください。
ベクトルインデックスの作成
curl -X PUT "http://<endpoint>:<port>/my-vector-index" -H "Content-Type:application/json" -d '
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"vector_field": {
"type": "knn_vector",
"dimension": 4
},
"metadata": {
"type": "text"
}
}
}
}
'ベクトルデータの挿入
curl -X POST "http://<endpoint>:<port>/my-vector-index/_bulk" -H "Content-Type:application/json" -d '
{"index": {}}
{"vector_field": [0.1, 0.5, -0.3, 0.8], "metadata": "Document 1"}
{"index": {}}
{"vector_field": [-0.2, 0.7, 0.4, -0.1], "metadata": "Document 2"}
'ベクトル検索の実行
curl -X GET "http://<endpoint>:<port>/my-vector-index/_search" -H "Content-Type:application/json" -d '
{
"size": 2,
"query": {
"knn": {
"vector_field": {
"vector": [0.1, 0.5, -0.3, 0.8],
"k": 2
}
}
}
}
'