SQL によるベクトル検索を始める

TiDB は MySQL 構文を拡張してベクトル検索サポートし、新しいベクトルデータ型といくつかのベクトル関数を導入します。

このチュートリアルでは、SQL ステートメントのみを使用して TiDB Vector Search を開始する方法を説明します。1 を使用してMySQL コマンドラインクライアント操作を行う方法を学習します。

  • TiDB クラスターに接続します。
  • ベクターテーブルを作成します。
  • ベクトル埋め込みを保存します。
  • ベクトル検索クエリを実行します。

注記

TiDB Vector Search は現在ベータ版であり、 TiDB Cloudサーバーレスクラスターでのみ使用できます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

始める

ステップ1. TiDBクラスターに接続する

  1. クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。

  2. 右上隅の「接続」をクリックします。接続ダイアログが表示されます。

  3. 接続ダイアログで、 「接続先」ドロップダウンリストから「MySQL CLI」を選択し、 「接続タイプ」のデフォルト設定を「パブリック」のままにします。

  4. まだパスワードを設定していない場合は、 「パスワードの生成」をクリックしてランダムなパスワードを生成します。

  5. 接続コマンドをコピーしてターミナルに貼り付けます。以下は 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)

出力から判断すると、泳いでいる動物は魚、または泳ぐ才能のある犬である可能性が高いです。

参照

このページは役に立ちましたか?