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= 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()
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。