本章介绍快速上手Qdrant向量数据库,如果基于RESTful API 操作向量数据库。
安装Qdrant
提示:本教程基于docker安装Qdrant数据库,在此之前请先安装docker.
下载qdrant镜像
docker pull qdrant/qdrant
启动qdrant向量数据库服务
docker run -p 6333:6333 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant
在默认配置下,我们将本机的文件目录映射到容器里面,所有数据都存储在 ./qdrant_storage 目录中。
现在可以通过 localhost:6333 访问 Qdrant
Qdrant向量数据库支持Restful api操作数据库,也支持其Python、Go等编程语言sdk,本教程主要基于Restful api进行讲解。
访问API例子
## 创建test_collection集合
curl -X PUT 'http://localhost:6333/collections/test_collection' \
-H 'Content-Type: application/json' \
--data-raw '{
"vectors": {
"size": 4,
"distance": "Dot"
}
}'
Qdrant Web UI
通过 http://localhost:6333/dashboard 地址访问web ui
创建集合(collections)
Qdrant向量数据库的集合概念可以类比MYSQL的表结构,用于统一存储同一类向量数据,集合中存储的每一条数据,在Qdrant中称为点(points),这里的点有数学几何空间的点类似的意思,代表向量在几何空间中的表示(你就当成一条数据看待就行)。
PUT /collections/{collection_name}
{
"vectors": {
"size": 300,
"distance": "Cosine"
}
}
参数说明:
参数 | 说明 |
---|---|
collection_name | 集合名字(必填) |
vectors | 量参数定义(必填) |
vectors.size | 代表向量大小(或者叫向量维度) |
vectors.distance | 代表向量相似度算法,主要有”Cosine” “Euclid” “Dot”三种算法 |
添加向量(points)
创建好集合之后,我们可以向集合添加向量数据,在Qdrant中向量数据使用point表示,一条point数据包括三部分id、payload(关联数据)、向量数据(vector)三部分。
例子
PUT /collections/{collection_name}/points
{
"points": [
{
"id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // id
"payload": {"color": "red"}, // 关联的属性数据,通常业务这里可以关联业务的属性,例如:订单ID、商品ID、标题等等属性
"vector": [0.9, 0.1, 0.1] // 向量数据,代表当前业务数据的特征
}
]
}
向量搜索
添加向量数据之后,我们可以通过向量进行语义相似度搜索
例子
// collection_name - 集合名字
POST /collections/{collection_name}/points/search
{
"vector": [0.2, 0.1, 0.9, 0.7], // 向量参数
"limit": 3 // 返回相似度最高的3条数据
}
参数说明:
- vector向量参数,搜索跟这个向量相似的内容,例如:你可以用户需要搜索的关键词转成向量,然后搜索跟用户输入相关的内容。
属性过滤
在搜索数据的时候除了前面通过向量进行相似度搜索,有时候也想执行类似sql的where查询过滤一些属性,qdrant支持filter查询用于过滤point的payload关联属性
例子
// collection_name - 集合名字
POST /collections/{collection_name}/points/search
{
"filter": { // 这里主要用于过滤payload的关联属性,整体语法格式类似elasticsearch语法,这个参数是可选的
"must": [ //筛选color=red的point数据
{
"key": "color",
"match": {
"value": "red"
}
}
]
},
"vector": [0.2, 0.1, 0.9, 0.7], // 向量参数
"limit": 3
}
更详情的教程请阅读后续章节.