From b1866c9f8627633d09fe4156fa0dbe2cf55b63f9 Mon Sep 17 00:00:00 2001
From: wangjingyuan <1577039175@qq.com>
Date: Fri, 21 Feb 2025 10:06:38 +0800
Subject: [PATCH] =?UTF-8?q?HNSWPQ=E8=B5=84=E6=96=99=E8=A1=A5=E5=85=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...0\221\351\207\217\345\274\225\346\223\216.md" | 3 ++-
content/docs-lite/zh/docs/BriefTutorial/PQ.md | 16 +++++++++++++---
...0\221\351\207\217\347\264\242\345\274\225.md" | 3 ++-
...0\221\351\207\217\345\274\225\346\223\216.md" | 3 ++-
content/zh/docs/BriefTutorial/PQ.md | 16 +++++++++++++---
...0\221\351\207\217\347\264\242\345\274\225.md" | 3 ++-
6 files changed, 34 insertions(+), 10 deletions(-)
diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md" "b/content/docs-lite/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md"
index aa28c8037..679fa6c8a 100644
--- "a/content/docs-lite/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md"
+++ "b/content/docs-lite/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md"
@@ -31,6 +31,7 @@ DataVec能够无缝对接自研大模型。通过嵌入技术将非结构化数
### 索引支持
- IVFFLAT
- HNSW
+- IVFPQ
- HNSWPQ
### 架构设计
@@ -167,7 +168,7 @@ openGauss=# INSERT INTO items (val) VALUES ('[1,2,3]'), ('[4,5,6]');
### 向量索引创建
-DataVec目前支持了IVFFLAT、HNSW及HNSWPQ等算法的[向量索引](../SQLReference/向量索引.md),基于openGauss中的ASTORE和USTORE存储实现,通过索引结构能够高效地检索出查询结果。
+DataVec目前支持了IVFFLAT、HNSW、IVFPQ及HNSWPQ等算法的[向量索引](../SQLReference/向量索引.md),基于openGauss中的ASTORE和USTORE存储实现,通过索引结构能够高效地检索出查询结果。
```
CREATE INDEX [INDEX_NAME]
diff --git a/content/docs-lite/zh/docs/BriefTutorial/PQ.md b/content/docs-lite/zh/docs/BriefTutorial/PQ.md
index 39f74e8a8..045950dd5 100644
--- a/content/docs-lite/zh/docs/BriefTutorial/PQ.md
+++ b/content/docs-lite/zh/docs/BriefTutorial/PQ.md
@@ -5,7 +5,7 @@
本章节主要介绍openGauss数据库DataVec向量引擎PQ(Product Quantization)特性的安装使用步骤,以指导用户顺利完成操作。本特性将DataVec向量引擎和自研PQ算法相结合,以提高向量检索的查询性能。
> **限制:
**
>PQ特性暂时只支持ARM架构环境。
->PQ特性暂时只支持HNSW和IVFFLAT索引。
+>PQ特性暂时只支持HNSW和IVF索引。
>PQ特性暂时只支持vector数据类型,在其他向量数据类型构建HNSWPQ以及IVFPQ索引会导致执行失败。
>在创建PQ索引前需要先插入数据,无数据情况下会创建失败。
## 安装准备
@@ -48,6 +48,8 @@ openGauss=# SET hnsw_earlystop_threshold =
- `TABLE_NAME` - 表名
- `COLUMN_NAME` - 向量数据列名
+创建PQ索引时表中的数据量小于pq_ksub可以正常创建索引,但会提示参与训练码本的数据量较少,召回率可能会偏低。
+
#### HNSWPQ索引操作符
HNSW索引操作符`[TYPE]_[DISTANCE_FUN]_ops` 格式:
@@ -76,7 +78,15 @@ vector_cosine_ops | 余弦距离
- `m` - 每个图层最大连接数 2~100(默认为16)
- `ef_construction` - 用于图形构造的动态候选集大小 4~1000,必须大于等于2*m(默认为64)
- `enable_pq` - 开启pq量化压缩(默认off)
-- `pq_m` - 切分的子空间数量 1~2000(默认为8)
+- `pq_m` - 切分的子空间数量 1~2000(默认为8)。对于高维向量,pq_m的上限受页面大小限制,可能会在创建索引时报错,并给出当前向量维度对应pq_m的上限,还需结合pq_m的其他限制确定最终值。
+
+**示例:** 使用L2距离创建HNSWPQ索引,其中表items中向量为2000维。
+
+```
+openGauss=# CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (enable_pq=on, pq_m=2000);
+ERROR: vector and pqcode must on the same page, max pq_m is 72
+```
+对于HNSWPQ索引,2000维的vector pq_m的最大值是72,由于维度%pq_m=0的限制,pq_m的最大值是50。
- `pq_ksub` - 每个子空间的聚类中心数量 1~256(默认为256)
#### GUC参数
@@ -133,7 +143,7 @@ vector_cosine_ops|<=>|余弦距离
- `lists` - 倒排表(单元格)聚类中心数量(默认为100)
- `enable_pq` - 开启pq量化压缩(默认off)
-- `pq_m` - 仅在`enable_pq`开启时有效,切分的子空间数量 1~2000(默认为8)
+- `pq_m` - 仅在`enable_pq`开启时有效,切分的子空间数量 1~2000(默认为8)。对于高维向量,pq_m的上限受页面大小限制,可能会在创建索引时报错,并给出当前向量维度对应pq_m的上限,还需结合pq_m的其他限制确定最终值。
- `pq_ksub` - 仅在`enable_pq`开启时有效,每个子空间的聚类中心数量 1~256 (默认256)
- `by_residual` - 仅在`enable_pq`开启时有效,启用残差运算(默认off)
diff --git "a/content/docs-lite/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md" "b/content/docs-lite/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md"
index 67298b5c4..2a161ddc9 100644
--- "a/content/docs-lite/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md"
+++ "b/content/docs-lite/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md"
@@ -228,10 +228,11 @@ openGauss=# REINDEX INDEX t_val_idx;
> **说明:**
>修改向量索引参数后需使用`REINDEX`更新索引,并且REINDEX支持并行,并行度仍根据数据表中`parallel_workers`决定。
>不支持修改索引操作符,如vector_l2_ops到vector_cosine_ops。
+>alter index修改索引选项时,HNSWPQ、IVFPQ索引无法校验PQ相关参数,在reindex时进行校验。
## 约束
- 向量索引仅支持普通行存表,临时表,Toast表,Unlogged表,段页式表等,其他表仅支持对向量数据创建btree和ubtree索引。
-- 若ALTER INDEX后不执行REINDEX,后插入的数据会根据新的索引选项构建索引,而索引中已存在的数据不会因此改变。
+- 若ALTER INDEX后不执行REINDEX,索引仍是原索引的选项配置,后插入的数据也会根据原索引选项构建索引。
- IVFFLAT索引不支持ustore存储。
- 构建带有向量表时可以使用INDEX子句构建默认btree、ubtree索引,无法指定向量索引。
- 未指定向量列维度时无法构建向量索引,只支持构建btree、ubtree索引。
diff --git "a/content/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md" "b/content/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md"
index e09855cfd..4703f0799 100644
--- "a/content/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md"
+++ "b/content/zh/docs/AboutopenGauss/DataVec\345\220\221\351\207\217\345\274\225\346\223\216.md"
@@ -31,6 +31,7 @@ DataVec能够无缝对接自研大模型。通过嵌入技术将非结构化数
### 索引支持
- IVFFLAT
- HNSW
+- IVFPQ
- HNSWPQ
### 架构设计
@@ -167,7 +168,7 @@ openGauss=# INSERT INTO items (val) VALUES ('[1,2,3]'), ('[4,5,6]');
### 向量索引创建
-DataVec目前支持了IVFFLAT、HNSW及HNSWPQ等算法的[向量索引](../SQLReference/向量索引.md),基于openGauss中的ASTORE和USTORE存储实现,通过索引结构能够高效地检索出查询结果。
+DataVec目前支持了IVFFLAT、HNSW、IVFPQ及HNSWPQ等算法的[向量索引](../SQLReference/向量索引.md),基于openGauss中的ASTORE和USTORE存储实现,通过索引结构能够高效地检索出查询结果。
```
CREATE INDEX [INDEX_NAME]
diff --git a/content/zh/docs/BriefTutorial/PQ.md b/content/zh/docs/BriefTutorial/PQ.md
index 542665409..ee0ad1b86 100644
--- a/content/zh/docs/BriefTutorial/PQ.md
+++ b/content/zh/docs/BriefTutorial/PQ.md
@@ -6,7 +6,7 @@
> **限制:
**
>PQ特性暂时只支持ARM架构环境。
->PQ特性暂时只支持HNSW和IVFFLAT索引。
+>PQ特性暂时只支持HNSW和IVF索引。
>PQ特性暂时只支持vector数据类型,在其他向量数据类型构建HNSWPQ以及IVFPQ索引会导致执行失败。
>在创建PQ索引前需要先插入数据,无数据情况下会创建失败。
## 安装准备
@@ -49,6 +49,8 @@ openGauss=# SET hnsw_earlystop_threshold =
- `TABLE_NAME` - 表名
- `COLUMN_NAME` - 向量数据列名
+创建PQ索引时表中的数据量小于pq_ksub可以正常创建索引,但会提示参与训练码本的数据量较少,召回率可能会偏低。
+
#### HNSWPQ索引操作符
HNSW索引操作符`[TYPE]_[DISTANCE_FUN]_ops` 格式:
@@ -77,7 +79,15 @@ vector_cosine_ops | 余弦距离
- `m` - 每个图层最大连接数 2~100(默认为16)
- `ef_construction` - 用于图形构造的动态候选集大小 4~1000,必须大于等于2*m(默认为64)
- `enable_pq` - 开启pq量化压缩(默认off)
-- `pq_m` - 切分的子空间数量 1~2000(默认为8)
+- `pq_m` - 切分的子空间数量 1~2000(默认为8)。对于高维向量,pq_m的上限受页面大小限制,可能会在创建索引时报错,并给出当前向量维度对应pq_m的上限,还需结合pq_m的其他限制确定最终值。
+
+**示例:** 使用L2距离创建HNSWPQ索引,其中表items中向量为2000维。
+
+```
+openGauss=# CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (enable_pq=on, pq_m=2000);
+ERROR: vector and pqcode must on the same page, max pq_m is 72
+```
+对于HNSWPQ索引,2000维的vector pq_m的最大值是72,由于维度%pq_m=0的限制,pq_m的最大值是50。
- `pq_ksub` - 每个子空间的聚类中心数量 1~256(默认为256)
#### GUC参数
@@ -134,7 +144,7 @@ vector_cosine_ops|<=>|余弦距离
- `lists` - 倒排表(单元格)聚类中心数量(默认为100)
- `enable_pq` - 开启pq量化压缩(默认off)
-- `pq_m` - 仅在`enable_pq`开启时有效,切分的子空间数量 1~2000(默认为8)
+- `pq_m` - 仅在`enable_pq`开启时有效,切分的子空间数量 1~2000(默认为8)。对于高维向量,pq_m的上限受页面大小限制,可能会在创建索引时报错,并给出当前向量维度对应pq_m的上限,还需结合pq_m的其他限制确定最终值。
- `pq_ksub` - 仅在`enable_pq`开启时有效,每个子空间的聚类中心数量 1~256 (默认256)
- `by_residual` - 仅在`enable_pq`开启时有效,启用残差运算(默认off)
diff --git "a/content/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md" "b/content/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md"
index f7a344734..82a8b188b 100644
--- "a/content/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md"
+++ "b/content/zh/docs/SQLReference/\345\220\221\351\207\217\347\264\242\345\274\225.md"
@@ -228,10 +228,11 @@ openGauss=# REINDEX INDEX t_val_idx;
> **说明:**
>修改向量索引参数后需使用`REINDEX`更新索引,并且REINDEX支持并行,并行度仍根据数据表中`parallel_workers`决定。
>不支持修改索引操作符,如vector_l2_ops到vector_cosine_ops。
+>alter index修改索引选项时,HNSWPQ、IVFPQ索引无法校验PQ相关参数,在reindex时进行校验。
## 约束
- 向量索引仅支持普通行存表,临时表,Toast表,Unlogged表,段页式表等,其他表仅支持对向量数据创建btree和ubtree索引。
-- 若ALTER INDEX后不执行REINDEX,后插入的数据会根据新的索引选项构建索引,而索引中已存在的数据不会因此改变。
+- 若ALTER INDEX后不执行REINDEX,索引仍是原索引的选项配置,后插入的数据也会根据原索引选项构建索引。
- IVFFLAT索引不支持ustore存储。
- 构建带有向量表时可以使用INDEX子句构建默认btree、ubtree索引,无法指定向量索引。
- 未指定向量列维度时无法构建向量索引,只支持构建btree、ubtree索引。
--
Gitee