surrealdb-vector について
SurrealDB のベクトルインデックスとクエリを扱うリファレンススキルです。HNSW インデックスの設定、距離関数や数値型の選択、スコアとしきい値を使った K 近傍検索を説明します。
主な機能
- 01HNSW インデックス定義
- 02距離関数と数値型の選択
- 03KNN ベクトルクエリ
- 04しきい値付きスコア結果
活用シーン
- 01SurrealDB でのベクトルインデックス設定
- 02ベクトル類似度によるレコード検索
- 03スコア付き候補の絞り込みと並べ替え
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ surrealdb/ agent-skills --skill surrealdb-vectorインストール後、Claude Code で/surrealdb-vectorを入力して読み込まれたか確認します。
詳細
SurrealDB ベクトル検索
HNSW インデックス
基本的な HNSW インデックスを作成します:
DEFINE INDEX hnsw_idx ON pts FIELDS point HNSW DIMENSION 4;
特定の距離関数と型を指定する場合:
DEFINE INDEX hnsw_idx ON pts FIELDS point HNSW DIMENSION 4 DIST EUCLIDEAN TYPE F64;
使用可能な型:F64、F32、I64、I32、I16。
テーブル全体の例
DEFINE TABLE OVERWRITE document SCHEMALESS;
DEFINE FIELD OVERWRITE embedding ON document TYPE array<float>;
DEFINE INDEX OVERWRITE hnsw_idx_document ON document
FIELDS embedding
HNSW DIMENSION 384
DIST COSINE
TYPE F32
EFC 150 M 12 M0 24;
HNSW パラメータ
| パラメータ | 説明 |
|---|---|
| DIMENSION | ベクトルの次元数(埋め込みと一致させる必要があります) |
| DIST | 距離関数:COSINE、EUCLIDEAN など |
| TYPE | 数値型:F64、F32、I64、I32、I16 |
| EFC | 構築時の探索努力(大きいほどインデックスの精度が向上) |
| M | ノードごとの最大接続数 |
| M0 | レイヤ0での最大接続数 |
ベクトルのクエリ
<|K, EF|> 演算子は KNN 検索を実行します。K は結果の数、
EF は探索努力です(大きいほど高精度ですが、低速になります)。
推奨される努力値:
40— デフォルト、良好な精度17— 高速ですが、一部の結果を見逃す可能性があります
基本的な KNN クエリ
SELECT
*,
vector::distance::knn() AS dist
FROM document
WHERE embedding <|10, 40|> $vector;
vector::distance::knn() は、インデックスで定義された距離関数を使用します。
しきい値を指定したスコア付き結果
SELECT *, score
FROM (
SELECT *, (1 - vector::distance::knn()) AS score
FROM document
WHERE embedding <|20, 40|> $vector
)
WHERE score >= $threshold
ORDER BY score DESC;
コメント
Markdown 対応