Qdrant向量数据库的使用

Qdrant向量数据库的使用

1 介绍

Qdrant(读作:quadrant)是一个矢量相似性搜索引擎和矢量数据库。它提供了一个方便的API来存储、搜索和管理点向量的生产就绪服务,并提供了额外的有效负载专门用于扩展过滤支持。这使得在各种神经网络或基于语义的匹配、多面搜索和其他应用方面更加有用。

Qdrant要比Weaviate向量库好用。

# Github地址
https://github.com/qdrant/qdrant

# 官网
https://qdrant.tech/

# 开发文档
https://qdrant.tech/documentation/


# 详细的实例参考
https://qdrant.tech/documentation/tutorials/search-beginners/

2 使用Docker安装

安装Qdrant

docker run -itd --name=qdrant \
-p 6333:6333 \
-p 6334:6334 \
-e "QDRANT__SERVICE__API_KEY=123456" \
-e "QDRANT__SERVICE__JWT_RBAC=true" \
-v /home/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant

可视化界面和接口

REST接口: localhost:6333
Web UI: localhost:6333/dashboard
GRPC接口: localhost:6334

REST接口

在这里插入图片描述

Web UI

需要输入密钥(创建容器时设置):123456

在这里插入图片描述

操作台
在这里插入图片描述

安装Python

pip install qdrant-client[fastembed] -i https://pypi.tuna.tsinghua.edu.cn/simple

3 Python使用Qdrant

from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams

from qdrant_client.models import PointStruct

from qdrant_client.models import Filter, FieldCondition, MatchValue

# 创建客户端
ip_addr = "192.168.108.200"
client = QdrantClient(
    url="http://"+ip_addr,
    port=6333,
    grpc_port=6334,
    api_key="123456"
)


# 创建索引
def create_collection():
    client.create_collection(
        # 设置索引的名称
        collection_name="test_collection",
        # 设置索引中输入向量的长度
        # 参数size是数据维度
        # 参数distance是计算的方法,主要有COSINE(余弦),EUCLID(欧氏距离)、DOT(点积),MANHATTAN(曼哈顿距离)
        vectors_config=VectorParams(size=4, distance=Distance.DOT),
    )


def add_data():

    operation_info = client.upsert(
        collection_name="test_collection",
        wait=True,
        points=[
            PointStruct(id=1, vector=[0.05, 0.61, 0.76, 0.74], payload={"city": "Berlin"}),
            PointStruct(id=2, vector=[0.19, 0.81, 0.75, 0.11], payload={"city": "London"}),
            PointStruct(id=3, vector=[0.36, 0.55, 0.47, 0.94], payload={"city": "Moscow"}),
            PointStruct(id=4, vector=[0.18, 0.01, 0.85, 0.80], payload={"city": "New York"}),
            PointStruct(id=5, vector=[0.24, 0.18, 0.22, 0.44], payload={"city": "Beijing"}),
            PointStruct(id=6, vector=[0.35, 0.08, 0.11, 0.44], payload={"city": "Mumbai"}),
        ],
    )

    # 返回值
    # operation_id=0 status=<UpdateStatus.COMPLETED: 'completed'>
    print(operation_info)


def query_data():
    search_result = client.search(
        # 设置索引
        collection_name="test_collection",
        # 查询向量
        query_vector=[0.2, 0.1, 0.9, 0.7],
        # 限制返回值的数量
        limit=3
    )

    # 返回值
    # [ScoredPoint(id=4, version=0, score=1.362, payload={'city': 'New York'}, vector=None, shard_key=None), ScoredPoint(id=1, version=0, score=1.273, payload={'city': 'Berlin'}, vector=None, shard_key=None), ScoredPoint(id=3, version=0, score=1.208, payload={'city': 'Moscow'}, vector=None, shard_key=None)]
    print(search_result)

def filter_data():
    search_result = client.search(
        collection_name="test_collection",
        query_vector=[0.2, 0.1, 0.9, 0.7],

        # 添加过滤器,数据中必须含有London
        query_filter=Filter(
            must=[FieldCondition(key="city", match=MatchValue(value="London"))]
        ),
        with_payload=True,
        limit=3
    )

    # 返回值
    # [ScoredPoint(id=2, version=0, score=0.871, payload={'city': 'London'}, vector=None, shard_key=None)]
    print(search_result)


if __name__ == '__main__':
    # 1 创建索引
    # create_collection()

    # 2 添加数据
    # add_data()

    # 3 查询数据
    query_data()

    # 4 过滤数据
    filter_data()

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值