SQL によるベクトル検索を始める
TiDB は MySQL 構文を拡張してベクトル検索サポートし、新しいベクトルデータ型といくつかのベクトル関数を導入します。
このチュートリアルでは、SQL ステートメントのみを使用して TiDB Vector Search を開始する方法を説明します。1 を使用してMySQL コマンドラインクライアント操作を行う方法を学習します。
- TiDB クラスターに接続します。
- ベクターテーブルを作成します。
- ベクトル埋め込みを保存します。
- ベクトル検索クエリを実行します。
注記
TiDB Vector Search は現在ベータ版であり、 TiDB Cloudサーバーレスクラスターでのみ使用できます。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- MySQL コマンドラインクライアント (MySQL CLI) がマシンにインストールされています。
- TiDB Cloud Serverless クラスター。TiDB Cloud クラスターがない場合は、 TiDB Cloud Serverless クラスターの作成に従って独自のTiDB Cloudクラスターを作成してください。
始める
ステップ1. TiDBクラスターに接続する
クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。
右上隅の「接続」をクリックします。接続ダイアログが表示されます。
接続ダイアログで、 「接続先」ドロップダウンリストから「MySQL CLI」を選択し、 「接続タイプ」のデフォルト設定を「パブリック」のままにします。
まだパスワードを設定していない場合は、 「パスワードの生成」をクリックしてランダムなパスワードを生成します。
接続コマンドをコピーしてターミナルに貼り付けます。以下は macOS の例です。
mysql -u '<prefix>.root' -h '<host>' -P 4000 -D 'test' --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/cert.pem -p'<password>'
ステップ2.ベクターテーブルを作成する
ベクトル検索サポートにより、 VECTOR
型の列を使用して TiDB にベクトル埋め込み保存できます。
3 次元のVECTOR
列のテーブルを作成するには、MySQL CLI を使用して次の SQL ステートメントを実行します。
USE test;
CREATE TABLE embedded_documents (
id INT PRIMARY KEY,
-- Column to store the original content of the document.
document TEXT,
-- Column to store the vector representation of the document.
embedding VECTOR(3)
);
期待される出力は次のとおりです。
Query OK, 0 rows affected (0.27 sec)
ステップ3. ベクトル埋め込みを保存する
ベクトル埋め込みを含む 3 つのドキュメントを 3 つembedded_documents
テーブルに挿入します。
INSERT INTO embedded_documents
VALUES
(1, 'dog', '[1,2,1]'),
(2, 'fish', '[1,2,4]'),
(3, 'tree', '[1,0,0]');
期待される出力は次のとおりです。
Query OK, 3 rows affected (0.15 sec)
Records: 3 Duplicates: 0 Warnings: 0
注記
この例では、ベクトル埋め込みの次元を簡略化し、デモンストレーションの目的で 3 次元ベクトルのみを使用します。
実際のアプリケーションでは、数百または数千の次元を持つベクトル埋め込みが生成されること埋め込みモデルよくあります。
ステップ4.ベクターテーブルをクエリする
ドキュメントが正しく挿入されたことを確認するには、 embedded_documents
テーブルをクエリします。
SELECT * FROM embedded_documents;
期待される出力は次のとおりです。
+----+----------+-----------+
| id | document | embedding |
+----+----------+-----------+
| 1 | dog | [1,2,1] |
| 2 | fish | [1,2,4] |
| 3 | tree | [1,0,0] |
+----+----------+-----------+
3 rows in set (0.15 sec)
ステップ5.ベクター検索クエリを実行する
全文検索と同様に、ベクター検索を使用する場合、ユーザーはアプリケーションに検索用語を提供します。
この例では、検索語は「泳ぐ動物」であり、対応するベクトル埋め込みは[1,2,3]
です。実際のアプリケーションでは、埋め込みモデルを使用して、ユーザーの検索語をベクトル埋め込みに変換する必要があります。
次のSQL文を実行すると、TiDBはベクトル埋め込み間のコサイン距離( vec_cosine_distance
)を計算してソートすることで、検索語に最も近い上位3つのドキュメントを識別します。
SELECT id, document, vec_cosine_distance(embedding, '[1,2,3]') AS distance
FROM embedded_documents
ORDER BY distance
LIMIT 3;
期待される出力は次のとおりです。
+----+----------+---------------------+
| id | document | distance |
+----+----------+---------------------+
| 2 | fish | 0.00853986601633272 |
| 1 | dog | 0.12712843905603044 |
| 3 | tree | 0.7327387580875756 |
+----+----------+---------------------+
3 rows in set (0.15 sec)
出力から判断すると、泳いでいる動物は魚、または泳ぐ才能のある犬である可能性が高いです。