欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Weaviate使用入门:从零搭建向量数据库的完整指南

Weaviate使用入门:从零搭建向量数据库的完整指南

2025/5/10 19:16:30 来源:https://blog.csdn.net/xiezhipu/article/details/147544894  浏览:    关键词:Weaviate使用入门:从零搭建向量数据库的完整指南
一、Weaviate简介与核心优势

Weaviate是一款开源向量搜索引擎,专为存储和检索高维向量数据设计,支持文本、图像等多种媒体类型。其核心功能包括语义搜索、问答提取、分类等,具备以下独特优势:

  • 低延迟:毫秒级响应时间,适用于实时场景。
  • 灵活扩展:支持数十亿级数据对象,模块化架构可集成自定义模型(如PyTorch、TensorFlow)。
  • 多模态支持:适配文本、图像、音视频等多种数据类型。
  • 云原生设计:提供GraphQL和REST API,无缝对接现有技术栈(如LangChain)。

二、环境搭建与部署
1. Docker快速部署

通过Docker Compose一键启动Weaviate服务:

# docker-compose.yml
version: '3.4'
services:weaviate:image: semitechnologies/weaviate:latestports:- "8080:8080"- "50051:50051"  # gRPC端口(可选)environment:AUTHENTICATION_APIKEY_ENABLED: "true"AUTHENTICATION_APIKEY_ALLOWED_KEYS: "your-api-key"

启动命令:

docker-compose up -d
2. Python客户端初始化

安装SDK并连接数据库:

import weaviate
client = weaviate.Client(url="http://localhost:8080",auth_client_secret=weaviate.AuthApiKey("your-api-key")
)

三、数据建模与Schema定义
1. 创建数据类(Class)

示例:构建一个存储技术文章的Schema:

schema = {"class": "Article","properties": [{"name": "title", "dataType": ["text"]},{"name": "content", "dataType": ["text"]},{"name": "tags", "dataType": ["text[]"]}],"vectorizer": "text2vec-transformers",  # 指定向量化模型"vectorIndexConfig": {"distance": "cosine"  # 相似度计算方式(可选:l2、dot等)}
}
client.schema.create_class(schema)
2. 自定义向量化模块

若需集成自定义模型(如Hugging Face模型),可在Docker配置中添加模块:

services:t2v-transformers:image: soulteary/t2v-transformers:2024.06.27ports:- "9090:8080"

四、数据导入与向量生成
1. 单条数据插入
data_object = {"title": "Weaviate入门指南","content": "本文介绍如何快速搭建Weaviate向量数据库...","tags": ["数据库", "AI"]
}
client.data_object.create(data_object, "Article")
2. 批量导入CSV数据

结合Pandas处理结构化数据:

import pandas as pd
df = pd.read_csv("articles.csv")
for _, row in df.iterrows():client.data_object.create({"title": row["title"],"content": row["content"],"tags": row["tags"].split(",")}, "Article")

五、向量检索实战
1. 基础语义搜索
response = client.query\.get("Article", ["title", "content"])\.with_near_text({"concepts": ["机器学习"]})\.with_limit(5)\.do()for item in response["data"]["Get"]["Article"]:print(f"标题: {item['title']}\n内容摘要: {item['content'][:100]}...")
2. 混合查询(向量+结构化过滤)
client.query\.get("Article", ["title"])\.with_where({"path": ["tags"],"operator": "ContainsAny","valueText": ["AI"]})\.with_near_vector({"vector": [0.1, -0.2, 0.5]})\.with_additional(["distance"])

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词