From 42579aeb8bfaa692c5fd966973a4ee6faaf59850 Mon Sep 17 00:00:00 2001 From: taoying <2474671424@qq.com> Date: Sat, 22 Feb 2025 18:37:51 +0800 Subject: [PATCH] =?UTF-8?q?hnsw=E7=B4=A2=E5=BC=95=E5=9C=BA=E6=99=AF?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/docs-lite/zh/docs/BriefTutorial/PQ.md | 18 +++++++++--------- ...25\346\223\216\345\217\202\346\225\260.md" | 4 ++-- ...21\351\207\217\347\264\242\345\274\225.md" | 3 +++ content/zh/docs/BriefTutorial/PQ.md | 19 ++++++++++--------- ...25\346\223\216\345\217\202\346\225\260.md" | 4 ++-- ...21\351\207\217\347\264\242\345\274\225.md" | 3 +++ 6 files changed, 29 insertions(+), 22 deletions(-) diff --git a/content/docs-lite/zh/docs/BriefTutorial/PQ.md b/content/docs-lite/zh/docs/BriefTutorial/PQ.md index 045950dd5..a5760606a 100644 --- a/content/docs-lite/zh/docs/BriefTutorial/PQ.md +++ b/content/docs-lite/zh/docs/BriefTutorial/PQ.md @@ -40,8 +40,6 @@ openGauss=# CREATE INDEX [INDEX_NAME] ON [TABLE_NAME] USING hnsw (COLUMN_NAME [TYPE]_[DISTANCE_FUN]_ops) with (m=, ef_construction=, enable_pq = on, pq_m = , pq_ksub = ); - -openGauss=# SET hnsw_earlystop_threshold = ``` - `INDEX_NAME` - 索引名称 @@ -87,21 +85,23 @@ openGauss=# CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (ena 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) +- `pq_ksub` - 每个子空间的聚类中心数量 1~256(默认为256)
+ +**设置建议:** +- pq_m:切分子空间越多,精度越高,同时性能越低。该值必须要能整除数据集维度,否则索引无法创建成功,推荐值为`维度/4`。 +- pq_ksub:聚类中心越多,精度越高,但同时性能越低。推荐值为`256`。 +- 其余参数设置与[向量索引](../SQLReference/向量索引.md)中HNSW索引中相同。 #### GUC参数 - `hnsw_earlystop_threshold` - 设置图搜索的最大连续迭代次数 160~INT32_MAX-1 (默认INT32_MAX) -**示例:** 使用L2距离计算创建HNSWPQ索引并设置`m = 16, ef_construction = 64, pq_m=32`。 +**示例:** 使用L2距离计算创建HNSWPQ索引并设置`m = 16, ef_construction = 64, pq_m=32`,并设置`hnsw_earlystop_threshold`为320。 ``` openGauss=# CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (m = 16, ef_construction = 64, enable_pq=on, pq_m=32); -``` -**设置建议:** -- pq_m:切分子空间越多,精度越高,同时性能越低。该值必须要能整除数据集维度,否则索引无法创建成功,推荐值为`维度/4`。 -- pq_ksub:聚类中心越多,精度越高,但同时性能越低。推荐值为`256`。 -- 其余参数设置与[向量索引](../SQLReference/向量索引.md)中HNSW索引中相同。 +openGauss=# SET hnsw_earlystop_threshold = 320; +``` ### IVFPQ diff --git "a/content/docs-lite/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" "b/content/docs-lite/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" index 0bc9e3ee8..93e151c2a 100644 --- "a/content/docs-lite/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" +++ "b/content/docs-lite/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" @@ -48,9 +48,9 @@ **参数说明**: HNSW索引开启PQ时,在早停策略中设置图搜索的最大连续迭代次数。 -该参数属于USERSET类型参数,请参考[表1](../DatabaseAdministrationGuide/重设参数.md#zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 +该参数仅支持[表1](../DatabaseAdministrationGuide/重设参数.md#zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应方法三进行设置。 -**取值范围**: 整型,160~INT32_MAX-1 +**取值范围**: 整型,160~INT32_MAX **默认值**: INT32_MAX 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 2a161ddc9..e38dac511 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" @@ -96,6 +96,9 @@ openGauss=# SET hnsw_ef_search = 100; openGauss=# ALTER TABLE items SET(parallel_workers=32); ``` +>![](public_sys-resources/icon-note.png) **说明:** +> hnsw构建图索引时会概率性出现某些数据点不可达的情况,这就导致索引查询返回数据量有误差。该情况和数据集、参数m、ef_construction有关,当增大m时会有改善。建议全量数据查找使用ivfflat索引,hnsw适用于limit远小于整体数据量的场景。 + ## IVFFlat ``` CREATE INDEX [INDEX_NAME] diff --git a/content/zh/docs/BriefTutorial/PQ.md b/content/zh/docs/BriefTutorial/PQ.md index ee0ad1b86..8c16a9a85 100644 --- a/content/zh/docs/BriefTutorial/PQ.md +++ b/content/zh/docs/BriefTutorial/PQ.md @@ -41,8 +41,6 @@ openGauss=# CREATE INDEX [INDEX_NAME] ON [TABLE_NAME] USING hnsw (COLUMN_NAME [TYPE]_[DISTANCE_FUN]_ops) with (m=, ef_construction=, enable_pq = on, pq_m = , pq_ksub = ); - -openGauss=# SET hnsw_earlystop_threshold = ``` - `INDEX_NAME` - 索引名称 @@ -88,21 +86,24 @@ openGauss=# CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (ena 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) +- `pq_ksub` - 每个子空间的聚类中心数量 1~256(默认为256)
+ +**设置建议:** + +- pq_m:切分子空间越多,精度越高,同时性能越低。该值必须要能整除数据集维度,否则索引无法创建成功,推荐值为`维度/4`。 +- pq_ksub:聚类中心越多,精度越高,但同时性能越低。推荐值为`256`。 +- 其余参数设置与[向量索引](../SQLReference/向量索引.md)中HNSW索引中相同。 #### GUC参数 - `hnsw_earlystop_threshold` - 设置图搜索的最大连续迭代次数 160~INT32_MAX-1 (默认INT32_MAX) -**示例:** 使用L2距离计算创建HNSWPQ索引并设置`m = 16, ef_construction = 64, pq_m=32`。 +**示例:** 使用L2距离计算创建HNSWPQ索引并设置`m = 16, ef_construction = 64, pq_m=32`,并设置`hnsw_earlystop_threshold`为320。 ``` openGauss=# CREATE INDEX ON items USING hnsw (embedding vector_l2_ops) WITH (m = 16, ef_construction = 64, enable_pq=on, pq_m=32); -``` -**设置建议:** -- pq_m:切分子空间越多,精度越高,同时性能越低。该值必须要能整除数据集维度,否则索引无法创建成功,推荐值为`维度/4`。 -- pq_ksub:聚类中心越多,精度越高,但同时性能越低。推荐值为`256`。 -- 其余参数设置与[向量索引](../SQLReference/向量索引.md)中HNSW索引中相同。 +openGauss=# SET hnsw_earlystop_threshold = 320; +``` ### IVFPQ diff --git "a/content/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" "b/content/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" index a0fe4bcb4..3b0e88959 100644 --- "a/content/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" +++ "b/content/zh/docs/DatabaseReference/DataVec\345\220\221\351\207\217\345\274\225\346\223\216\345\217\202\346\225\260.md" @@ -48,9 +48,9 @@ **参数说明**: HNSW索引开启PQ时,在早停策略中设置图搜索的最大连续迭代次数。 -该参数属于USERSET类型参数,请参考[表1](../DatabaseAdministrationGuide/重设参数.md#zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 +该参数仅支持[表1](../DatabaseAdministrationGuide/重设参数.md#zh-cn_topic_0283137176_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应方法三进行设置。 -**取值范围**: 整型,160~INT32_MAX-1 +**取值范围**: 整型,160~INT32_MAX **默认值**: INT32_MAX 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 82a8b188b..8ee2047cd 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" @@ -96,6 +96,9 @@ openGauss=# SET hnsw_ef_search = 100; openGauss=# ALTER TABLE items SET(parallel_workers=32); ``` +>![](public_sys-resources/icon-note.png) **说明:** +> hnsw构建图索引时会概率性出现某些数据点不可达的情况,这就导致索引查询返回数据量有误差。该情况和数据集、参数m、ef_construction有关,当增大m时会有改善。建议全量数据查找使用ivfflat索引,hnsw适用于limit远小于整体数据量的场景。 + ## IVFFlat ``` CREATE INDEX [INDEX_NAME] -- Gitee