一架梯子,一头程序猿,仰望星空!
Qdrant向量数据库教程 > 内容正文

Qdrant快速入门


本章介绍快速上手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

Qdrant 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
}

更详情的教程请阅读后续章节.



关联主题