@clickzetta/cz-cli-darwin-x64 0.3.17 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cz-cli +0 -0
- package/bin/skills/clickzetta-access-control/SKILL.md +243 -0
- package/bin/skills/clickzetta-access-control/eval_cases.jsonl +3 -0
- package/bin/skills/clickzetta-access-control/references/dynamic-masking.md +86 -0
- package/bin/skills/clickzetta-access-control/references/grant-revoke.md +103 -0
- package/bin/skills/clickzetta-access-control/references/role-management.md +66 -0
- package/bin/skills/clickzetta-access-control/references/user-management.md +61 -0
- package/bin/skills/clickzetta-ai-vector-search/SKILL.md +160 -0
- package/bin/skills/clickzetta-ai-vector-search/eval_cases.jsonl +4 -0
- package/bin/skills/clickzetta-ai-vector-search/references/vector-search.md +155 -0
- package/bin/skills/clickzetta-batch-sync-pipeline/SKILL.md +386 -0
- package/bin/skills/clickzetta-cdc-sync-pipeline/SKILL.md +548 -0
- package/bin/skills/clickzetta-data-ingest-pipeline/SKILL.md +220 -0
- package/bin/skills/clickzetta-data-ingest-pipeline/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-data-retention/SKILL.md +160 -0
- package/bin/skills/clickzetta-data-retention/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-data-retention/references/lifecycle-reference.md +175 -0
- package/bin/skills/clickzetta-dw-modeling/SKILL.md +259 -0
- package/bin/skills/clickzetta-dw-modeling/eval_cases.jsonl +4 -0
- package/bin/skills/clickzetta-dw-modeling/references/modeling-patterns.md +100 -0
- package/bin/skills/clickzetta-dynamic-table/SKILL.md +112 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/dimension-table-join-guide.md +257 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/medallion-and-stream-patterns.md +124 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/non-partitioned-merge-into-warning.md +96 -0
- package/bin/skills/clickzetta-dynamic-table/best-practices/performance-optimization.md +109 -0
- package/bin/skills/clickzetta-external-function/SKILL.md +203 -0
- package/bin/skills/clickzetta-external-function/eval_cases.jsonl +4 -0
- package/bin/skills/clickzetta-external-function/references/external-function-ddl.md +171 -0
- package/bin/skills/clickzetta-file-import-pipeline/SKILL.md +156 -0
- package/bin/skills/clickzetta-index-manager/SKILL.md +140 -0
- package/bin/skills/clickzetta-index-manager/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-index-manager/references/bloomfilter-index.md +67 -0
- package/bin/skills/clickzetta-index-manager/references/index-management.md +73 -0
- package/bin/skills/clickzetta-index-manager/references/inverted-index.md +80 -0
- package/bin/skills/clickzetta-index-manager/references/vector-index.md +81 -0
- package/bin/skills/clickzetta-kafka-ingest-pipeline/SKILL.md +751 -0
- package/bin/skills/clickzetta-kafka-ingest-pipeline/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-kafka-ingest-pipeline/references/kafka-pipe-syntax.md +324 -0
- package/bin/skills/clickzetta-monitoring/SKILL.md +199 -0
- package/bin/skills/clickzetta-monitoring/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-monitoring/references/job-history-analysis.md +97 -0
- package/bin/skills/clickzetta-monitoring/references/show-jobs.md +48 -0
- package/bin/skills/clickzetta-oss-ingest-pipeline/SKILL.md +537 -0
- package/bin/skills/clickzetta-query-optimizer/SKILL.md +156 -0
- package/bin/skills/clickzetta-query-optimizer/eval_cases.jsonl +5 -0
- package/bin/skills/clickzetta-query-optimizer/references/explain.md +56 -0
- package/bin/skills/clickzetta-query-optimizer/references/hints-and-sortkey.md +78 -0
- package/bin/skills/clickzetta-query-optimizer/references/optimize.md +65 -0
- package/bin/skills/clickzetta-query-optimizer/references/result-cache.md +49 -0
- package/bin/skills/clickzetta-query-optimizer/references/show-jobs.md +42 -0
- package/bin/skills/clickzetta-realtime-sync-pipeline/SKILL.md +276 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/SKILL.md +379 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/evals/evals.json +166 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/dynamic-table.md +185 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/materialized-view.md +129 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/pipe.md +222 -0
- package/bin/skills/clickzetta-sql-pipeline-manager/references/table-stream.md +125 -0
- package/bin/skills/clickzetta-table-stream-pipeline/SKILL.md +206 -0
- package/bin/skills/clickzetta-vcluster-manager/SKILL.md +212 -0
- package/bin/skills/clickzetta-vcluster-manager/references/vc-cache.md +54 -0
- package/bin/skills/clickzetta-vcluster-manager/references/vcluster-ddl.md +150 -0
- package/bin/skills/clickzetta-volume-manager/SKILL.md +292 -0
- package/bin/skills/clickzetta-volume-manager/references/volume-ddl.md +199 -0
- package/bin/skills/cz-cli/SKILL.md +1 -1
- package/bin/skills/cz-cli-inner/SKILL.md +8 -0
- package/package.json +1 -1
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/SKILL.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/dt-declaration-strategy.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/incremental-config-reference.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/refresh-history-guide.md +0 -0
- /package/bin/skills/{dt-creator → clickzetta-dynamic-table/dt-creator}/references/sql-limitations.md +0 -0
- /package/bin/skills/{dynamic-table-alter → clickzetta-dynamic-table/dynamic-table-alter}/SKILL.md +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clickzetta-ai-vector-search
|
|
3
|
+
description: |
|
|
4
|
+
在 ClickZetta Lakehouse 中实现向量存储、向量索引(HNSW)和向量检索,
|
|
5
|
+
构建 RAG、语义搜索、图像检索等 AI 应用。覆盖 VECTOR 数据类型定义、
|
|
6
|
+
向量索引创建(cosine/l2/hamming 距离)、向量数据插入与转换、
|
|
7
|
+
ANN 近似最近邻检索、向量+倒排索引融合检索等完整工作流。
|
|
8
|
+
当用户说"向量检索"、"向量索引"、"语义搜索"、"embedding 存储"、
|
|
9
|
+
"RAG"、"ANN 搜索"、"HNSW"、"cosine_distance"、"l2_distance"、
|
|
10
|
+
"VECTOR 类型"、"向量数据库"、"相似度搜索"、"向量 + 标量融合检索"、
|
|
11
|
+
"文本向量化"时触发。
|
|
12
|
+
Keywords: vector, HNSW, embedding, RAG, semantic search, similarity, VECTOR type
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# ClickZetta 向量检索
|
|
16
|
+
|
|
17
|
+
Lakehouse 原生支持 VECTOR 数据类型和 HNSW 向量索引,无需独立向量数据库即可在同一张表中实现向量检索、全文检索和标量过滤的融合查询。
|
|
18
|
+
|
|
19
|
+
阅读 [references/vector-search.md](references/vector-search.md) 了解完整语法。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 快速开始
|
|
24
|
+
|
|
25
|
+
### 1. 建表(含向量索引)
|
|
26
|
+
|
|
27
|
+
```sql
|
|
28
|
+
CREATE TABLE doc_embeddings (
|
|
29
|
+
id INT,
|
|
30
|
+
content STRING,
|
|
31
|
+
vec VECTOR(FLOAT, 1024),
|
|
32
|
+
INDEX vec_idx (vec) USING VECTOR PROPERTIES (
|
|
33
|
+
"distance.function" = "cosine_distance",
|
|
34
|
+
"scalar.type" = "f32"
|
|
35
|
+
)
|
|
36
|
+
);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. 插入向量数据
|
|
40
|
+
|
|
41
|
+
```sql
|
|
42
|
+
-- 直接插入
|
|
43
|
+
INSERT INTO doc_embeddings VALUES
|
|
44
|
+
(1, '云器 Lakehouse 产品介绍', vector(0.12, 0.34, ...));
|
|
45
|
+
|
|
46
|
+
-- 从字符串转换(适合 API 返回的 JSON 格式)
|
|
47
|
+
INSERT INTO doc_embeddings (id, content, vec)
|
|
48
|
+
SELECT id, content, CAST(embedding_str AS VECTOR(1024))
|
|
49
|
+
FROM staging_table;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 3. 向量检索
|
|
53
|
+
|
|
54
|
+
```sql
|
|
55
|
+
-- 设置探索因子(精度 vs 速度)
|
|
56
|
+
SET cz.vector.index.search.ef = 64;
|
|
57
|
+
|
|
58
|
+
-- 余弦距离 Top-10 相似文档
|
|
59
|
+
SELECT id, content, cosine_distance(vec, CAST('[0.12, 0.34, ...]' AS VECTOR(1024))) AS dist
|
|
60
|
+
FROM doc_embeddings
|
|
61
|
+
ORDER BY dist
|
|
62
|
+
LIMIT 10;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 向量 + 标量融合检索(RAG 场景)
|
|
68
|
+
|
|
69
|
+
```sql
|
|
70
|
+
-- 先用标量过滤缩小范围,再用向量排序
|
|
71
|
+
SELECT id, content, cosine_distance(vec, :query_embedding) AS dist
|
|
72
|
+
FROM doc_embeddings
|
|
73
|
+
WHERE category = 'product'
|
|
74
|
+
AND created_at >= '2024-01-01'
|
|
75
|
+
ORDER BY dist
|
|
76
|
+
LIMIT 5;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 向量 + 全文检索融合
|
|
82
|
+
|
|
83
|
+
```sql
|
|
84
|
+
-- 建表:同时支持向量索引和倒排索引
|
|
85
|
+
CREATE TABLE hybrid_docs (
|
|
86
|
+
id INT,
|
|
87
|
+
title STRING,
|
|
88
|
+
body STRING,
|
|
89
|
+
vec VECTOR(FLOAT, 1024),
|
|
90
|
+
INDEX body_inv_idx (body) USING INVERTED,
|
|
91
|
+
INDEX vec_idx (vec) USING VECTOR PROPERTIES (
|
|
92
|
+
"distance.function" = "cosine_distance"
|
|
93
|
+
)
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
-- 融合检索:关键词过滤 + 向量排序
|
|
97
|
+
SELECT id, title, cosine_distance(vec, :query_vec) AS dist
|
|
98
|
+
FROM hybrid_docs
|
|
99
|
+
WHERE body LIKE '%向量检索%'
|
|
100
|
+
ORDER BY dist
|
|
101
|
+
LIMIT 10;
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 外部系统写入向量(ARRAY → VECTOR 转换)
|
|
107
|
+
|
|
108
|
+
外部系统(Python SDK、Kafka 等)不能直接写 VECTOR 类型,需先写 ARRAY 再转换:
|
|
109
|
+
|
|
110
|
+
```sql
|
|
111
|
+
-- 暂存表(ARRAY 类型)
|
|
112
|
+
CREATE TABLE staging (id INT, vec_array ARRAY<FLOAT>);
|
|
113
|
+
|
|
114
|
+
-- 转换写入目标表
|
|
115
|
+
INSERT INTO doc_embeddings (id, vec)
|
|
116
|
+
SELECT id, CAST(vec_array AS VECTOR(FLOAT, 1024))
|
|
117
|
+
FROM staging;
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 距离函数速查
|
|
123
|
+
|
|
124
|
+
| 函数 | 适用场景 |
|
|
125
|
+
|---|---|
|
|
126
|
+
| `cosine_distance(v1, v2)` | 文本语义检索(最常用) |
|
|
127
|
+
| `l2_distance(v1, v2)` | 图像/通用向量检索 |
|
|
128
|
+
| `dot_product(v1, v2)` | 归一化向量的相似度 |
|
|
129
|
+
| `hamming_distance(v1, v2)` | 二值向量(高效压缩) |
|
|
130
|
+
| `binary_quantize(v)` | 将 float 向量压缩为二值向量 |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 性能调优
|
|
135
|
+
|
|
136
|
+
```sql
|
|
137
|
+
-- 调整探索因子(默认 64,越大精度越高但越慢)
|
|
138
|
+
SET cz.vector.index.search.ef = 128;
|
|
139
|
+
|
|
140
|
+
-- 验证向量索引是否生效
|
|
141
|
+
EXPLAIN SELECT id, cosine_distance(vec, vector(0.1, 0.2)) AS dist
|
|
142
|
+
FROM doc_embeddings ORDER BY dist LIMIT 10;
|
|
143
|
+
-- 查看执行计划中是否有 vector_index_search_type 字样
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**最佳实践:**
|
|
147
|
+
- 向量检索建议**单独占用 VCluster**,避免与其他查询争抢缓存
|
|
148
|
+
- 大批量写入后执行 `BUILD INDEX vec_idx ON table_name` 为存量数据构建索引
|
|
149
|
+
- 外部系统写入时先写 ARRAY,再批量 CAST 转换,避免频繁小文件
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 常见问题
|
|
154
|
+
|
|
155
|
+
| 问题 | 原因 | 解决方案 |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| 向量索引未生效 | 存量数据未构建索引 | 执行 `BUILD INDEX idx ON table` |
|
|
158
|
+
| 检索精度低 | ef 值太小 | 增大 `cz.vector.index.search.ef` |
|
|
159
|
+
| 外部写入报错 | 不支持直接写 VECTOR | 先写 ARRAY,再 CAST 转换 |
|
|
160
|
+
| 向量检索慢 | 与其他查询共用 VCluster | 为向量检索单独分配 VCluster |
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{"case_id":"001","type":"should_call","user_input":"怎么在 ClickZetta 里创建 VECTOR 类型的列存储 embedding?","expected_skill":"clickzetta-ai-vector-search","expected_output_contains":["VECTOR","FLOAT"]}
|
|
2
|
+
{"case_id":"002","type":"should_call","user_input":"HNSW 向量索引怎么创建?支持哪些距离函数?","expected_skill":"clickzetta-ai-vector-search","expected_output_contains":["HNSW","cosine"]}
|
|
3
|
+
{"case_id":"003","type":"should_call","user_input":"怎么做 ANN 近似最近邻检索?SQL 怎么写?","expected_skill":"clickzetta-ai-vector-search","expected_output_contains":["ANN","distance"]}
|
|
4
|
+
{"case_id":"004","type":"should_call","user_input":"向量检索和倒排索引能融合查询吗?怎么写?","expected_skill":"clickzetta-ai-vector-search","expected_output_contains":["向量","检索"]}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# 向量检索参考
|
|
2
|
+
|
|
3
|
+
> 来源:https://www.yunqi.tech/documents/vector-search 等
|
|
4
|
+
|
|
5
|
+
## VECTOR 数据类型
|
|
6
|
+
|
|
7
|
+
```sql
|
|
8
|
+
-- 语法
|
|
9
|
+
vector(scalar_type, dimension)
|
|
10
|
+
vector(dimension) -- 默认 float 类型
|
|
11
|
+
|
|
12
|
+
-- 示例
|
|
13
|
+
CREATE TABLE embeddings (
|
|
14
|
+
id INT,
|
|
15
|
+
content STRING,
|
|
16
|
+
vec VECTOR(FLOAT, 1024), -- 1024 维 float 向量
|
|
17
|
+
vec_bin VECTOR(TINYINT, 128) -- 128 维 tinyint 向量(二值化)
|
|
18
|
+
);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
支持的元素类型:`FLOAT`(f32)、`TINYINT`(i8/b1)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 创建向量索引
|
|
26
|
+
|
|
27
|
+
```sql
|
|
28
|
+
-- 建表时内联创建
|
|
29
|
+
CREATE TABLE doc_embeddings (
|
|
30
|
+
id INT,
|
|
31
|
+
content STRING,
|
|
32
|
+
vec VECTOR(FLOAT, 1024),
|
|
33
|
+
INDEX vec_idx (vec) USING VECTOR PROPERTIES (
|
|
34
|
+
"distance.function" = "cosine_distance",
|
|
35
|
+
"scalar.type" = "f32",
|
|
36
|
+
"m" = "16",
|
|
37
|
+
"ef.construction" = "128"
|
|
38
|
+
)
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
-- 在已有表上添加向量索引
|
|
42
|
+
ALTER TABLE doc_embeddings ADD INDEX vec_idx (vec) USING VECTOR PROPERTIES (
|
|
43
|
+
"distance.function" = "cosine_distance",
|
|
44
|
+
"scalar.type" = "f32"
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
-- 为存量数据构建索引
|
|
48
|
+
BUILD INDEX vec_idx ON doc_embeddings;
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 关键参数
|
|
52
|
+
|
|
53
|
+
| 参数 | 可选值 | 默认值 | 说明 |
|
|
54
|
+
|---|---|---|---|
|
|
55
|
+
| distance.function | l2_distance, cosine_distance, jaccard_distance, hamming_distance | cosine_distance | 距离函数 |
|
|
56
|
+
| scalar.type | f32, f16, i8, b1 | f32 | 索引元素类型 |
|
|
57
|
+
| m | 建议 ≤ 1000 | 16 | HNSW 最大邻居数 |
|
|
58
|
+
| ef.construction | 建议 ≤ 5000 | 128 | 构建时候选集大小 |
|
|
59
|
+
| compress.codec | uncompressed/zstd/lz4 | uncompressed | 压缩算法 |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 插入向量数据
|
|
64
|
+
|
|
65
|
+
```sql
|
|
66
|
+
-- 直接插入
|
|
67
|
+
INSERT INTO doc_embeddings (id, content, vec) VALUES
|
|
68
|
+
(1, 'hello world', vector(0.1, 0.2, 0.3, ...)),
|
|
69
|
+
(2, 'foo bar', vector(0.4, 0.5, 0.6, ...));
|
|
70
|
+
|
|
71
|
+
-- 从字符串转换
|
|
72
|
+
INSERT INTO doc_embeddings (id, vec)
|
|
73
|
+
SELECT id, CAST('[0.1, 0.2, 0.3]' AS VECTOR(3))
|
|
74
|
+
FROM source_table;
|
|
75
|
+
|
|
76
|
+
-- 从 ARRAY 列转换(外部系统写入场景)
|
|
77
|
+
INSERT OVERWRITE doc_embeddings
|
|
78
|
+
SELECT id, content, CAST(vec_array AS VECTOR(FLOAT, 1024))
|
|
79
|
+
FROM staging_table;
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 向量检索
|
|
85
|
+
|
|
86
|
+
```sql
|
|
87
|
+
-- 调整探索因子(精度 vs 速度权衡)
|
|
88
|
+
SET cz.vector.index.search.ef = 64;
|
|
89
|
+
|
|
90
|
+
-- L2 距离检索(欧几里得距离,越小越相似)
|
|
91
|
+
SELECT id, content, l2_distance(vec, vector(0.1, 0.2, 0.3, ...)) AS dist
|
|
92
|
+
FROM doc_embeddings
|
|
93
|
+
ORDER BY dist
|
|
94
|
+
LIMIT 10;
|
|
95
|
+
|
|
96
|
+
-- 余弦距离检索(越小越相似)
|
|
97
|
+
SELECT id, content, cosine_distance(vec, CAST('[0.1,0.2,0.3]' AS VECTOR(3))) AS dist
|
|
98
|
+
FROM doc_embeddings
|
|
99
|
+
ORDER BY dist
|
|
100
|
+
LIMIT 10;
|
|
101
|
+
|
|
102
|
+
-- 带过滤条件的向量检索(向量 + 标量融合)
|
|
103
|
+
SELECT id, content, cosine_distance(vec, :query_vec) AS dist
|
|
104
|
+
FROM doc_embeddings
|
|
105
|
+
WHERE category = 'tech'
|
|
106
|
+
AND cosine_distance(vec, :query_vec) < 0.3
|
|
107
|
+
ORDER BY dist
|
|
108
|
+
LIMIT 10;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 距离函数速查
|
|
114
|
+
|
|
115
|
+
| 函数 | 适用场景 | 说明 |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| `l2_distance(v1, v2)` | 通用语义检索 | 欧几里得距离,越小越相似 |
|
|
118
|
+
| `cosine_distance(v1, v2)` | 文本语义检索 | 余弦距离,越小越相似 |
|
|
119
|
+
| `dot_product(v1, v2)` | 归一化向量 | 点积,越大越相似 |
|
|
120
|
+
| `hamming_distance(v1, v2)` | 二值向量 | 汉明距离,越小越相似 |
|
|
121
|
+
| `jaccard_distance(v1, v2)` | 集合相似度 | 雅卡德距离 |
|
|
122
|
+
| `binary_quantize(v)` | 向量压缩 | 将 float 向量二值化 |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 向量 + 倒排索引融合检索
|
|
127
|
+
|
|
128
|
+
```sql
|
|
129
|
+
-- 建表:同时支持向量索引和倒排索引
|
|
130
|
+
CREATE TABLE hybrid_search (
|
|
131
|
+
id INT,
|
|
132
|
+
content STRING,
|
|
133
|
+
vec VECTOR(FLOAT, 1024),
|
|
134
|
+
INDEX content_inv_idx (content) USING INVERTED,
|
|
135
|
+
INDEX vec_idx (vec) USING VECTOR PROPERTIES (
|
|
136
|
+
"distance.function" = "cosine_distance"
|
|
137
|
+
)
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
-- 融合检索:先用倒排过滤,再用向量排序
|
|
141
|
+
SELECT id, content, cosine_distance(vec, :query_vec) AS dist
|
|
142
|
+
FROM hybrid_search
|
|
143
|
+
WHERE content LIKE '%关键词%'
|
|
144
|
+
ORDER BY dist
|
|
145
|
+
LIMIT 10;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 注意事项
|
|
151
|
+
|
|
152
|
+
- 向量类型不支持 `ORDER BY` 或 `GROUP BY`(只能对距离函数结果排序)
|
|
153
|
+
- 向量索引性能与内存/磁盘缓存直接相关,建议**单独占用 VCluster**
|
|
154
|
+
- 外部系统写入时不能直接写 VECTOR 类型,需先写 ARRAY 再 CAST 转换
|
|
155
|
+
- `ef` 值越大,检索精度越高但延迟越大;建议从 64 开始调优
|