Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
yangj1211 committed Aug 20, 2024
1 parent 3a333ef commit 040fcc4
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions docs/MatrixOne/Develop/Vector/vector_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ IVF_FLAT(Inverted File with Flat)是一种常用的向量索引技术,用
### 主要原理

**倒排索引**

- IVF_FLAT 首先将向量数据通过一种称为“粗量量化器”(coarse quantizer)的过程,分成若干个簇(clusters)。
- 每个簇都有一个中心(centroid),查询时,首先根据查询向量找到距离最近的几个簇中心,这些簇中存储着可能包含最接近查询向量的向量数据。

**Flat 检索**

- 在确定了最可能包含目标的簇后,IVF_FLAT 在这些簇内进行逐一比较(即 "Flat" 搜索),以找到与查询向量最相似的向量。
- 这种方法减少了需要进行全量比较的向量数量,从而提高了检索效率。

Expand All @@ -32,7 +32,9 @@ IVF_FLAT 广泛应用于图像检索、推荐系统、文本检索、生物信

## 示例

步骤一:建立数据表
下面我们将给出一个例子,通过 Python 脚本随机生成 200 万条 128 维向量数据,并对比创建向量索引前后,向量检索的时间差异。

### 步骤一:建立数据表

准备一个名为 `vec_table` 的表,用来存储向量数据。

Expand All @@ -43,15 +45,15 @@ create table vec_table(
);
```

步骤二:开启向量索引的选项
### 步骤二:开启向量索引的选项

在数据库中用以下 SQL 开启向量索引,重连数据库生效。

```sql
SET GLOBAL experimental_ivf_index = 1;
```

步骤三:构建 python 脚本
### 步骤三:构建 python 脚本

建立一个名为 `vec_test.py` 的 python 文件,定义了向量数据插入函数、向量检索函数和创建向量索引的函数,然后计算在创建索引前后进行向量检索所花费的时间。

Expand Down Expand Up @@ -92,7 +94,7 @@ def insert_data(vector_dim,num_vectors,batch_size):
cursor.executemany("INSERT INTO vec_table(vec) VALUES (%s)", batch_data)
conn.commit()

#定义检索函数,参数为向量维度,检索返回的条数
#定义检索函数参数为向量维度,检索返回的条数
def vec_search(vector_dim,topk):
vector = np.random.rand(vector_dim)
formatted_vector = '[' + ','.join(f"{x}" for x in vector) + ']'
Expand Down Expand Up @@ -120,7 +122,7 @@ if __name__ == "__main__":
conn.close()
```

步骤四:运行脚本
### 步骤四:运行脚本

```bash
python vec_test.py
Expand Down

0 comments on commit 040fcc4

Please sign in to comment.