weaviate入门
Weaviate是一款由德国SeMITechnologies开发的开源向量搜索引擎数据库,结合了向量搜索和图数据库技术,专为AI应用提供高效的数据存储和检索。其核心功能包括高效的向量索引和近似最近邻(ANN)搜索、图数据结构、机器学习模块支持、模块化设计以及基于GraphQL的强大查询语言。Weaviate支持多种部署方式,如Weaviate云、Docker、Kubernetes和嵌入式部署,适用
Weaviate 是一个开源的向量搜索引擎数据库,由德国公司 SeMI Technologies 开发。它结合了向量搜索和图数据库技术,旨在为 AI 应用提供高效的数据存储和检索能力。
核心功能
- 向量搜索:Weaviate 支持高效的向量索引和近似最近邻(ANN)搜索,能够在数百万个对象中实现毫秒级的 10-NN 邻近搜索。
- 图数据结构:采用图数据结构来组织数据,支持复杂的查询和分析。
- 机器学习模块支持:Weaviate 提供了丰富的机器学习模块支持,能够与 OpenAI、Hugging Face 等流行服务和模型集成,实现数据的自动向量化。
- 模块化设计:Weaviate 的模块化设计允许开发者根据需求选择不同的功能模块,如文本嵌入、生成式 AI 等。
- 强大查询语言:Weaviate 提供了基于 GraphQL 的强大查询语言,支持复杂的向量和结构化数据查询。
部署方式
Weaviate 提供了多种部署选项,以满足不同用户和用例的需求:
- Weaviate 云:利用 Weaviate 官方的云服务,支持数据复制、零停机更新和无缝扩展,非常适合评估、开发和生产环境。
- Docker 部署:通过 Docker 容器进行 Weaviate 向量数据库的部署,适用于评估和开发场景。
- K8s 部署:在 Kubernetes 环境中部署 Weaviate 向量数据库,适合用于开发和生产场景。
- 嵌入式 Weaviate:基于本地文件的 Weaviate 向量数据库构建方式,适用于评估场景。但嵌入式 Weaviate 仅支持 Linux 和 macOS 系统,不支持 Windows。
使用示例
以 Docker 部署为例,Weaviate 的使用流程通常包括以下几个步骤:
- 下载并安装 Docker:在本地下载并安装 Docker。
- 拉取 Weaviate 镜像:使用
docker pull semitechnologies/weaviate:latest命令拉取最新版本的 Weaviate 镜像。 - 启动 Weaviate 容器:使用
docker run -p8080:8080 -p50051:50051 semitechnologies/weaviate:latest命令启动 Weaviate 容器。其中,8080 是 HTTP 的端口,50051 是 gRPC 的端口。 - 连接 Weaviate:使用 Python SDK 或其他客户端库连接 Weaviate 数据库。
- 创建集合:在 Weaviate 中创建集合,类似于传统关系型数据库中的表,用于管理特定类型的数据/数据对象。
- 插入数据:向集合中插入数据,包括向量和结构化属性。
- 查询数据:使用向量或结构化属性查询数据,实现高效的语义搜索。
优势与特点
- 低延迟:Weaviate 提供毫秒级的响应时间,适用于实时场景。
- 灵活扩展:支持数十亿级数据对象,模块化架构可集成自定义模型(如 PyTorch、TensorFlow)。
- 多模态支持:适配文本、图像、音视频等多种数据类型。
- 云原生设计:提供 GraphQL 和 REST API,无缝对接现有技术栈(如 LangChain)。
应用场景
Weaviate 适用于需要高效处理和查询向量数据的应用程序,如语义搜索、问答系统、推荐系统等。通过集成不同的机器学习模块,Weaviate 可以在多种应用场景下发挥重要作用。

使用Weaviate进行向量搜索涉及多个步骤,从环境准备到数据插入,再到执行搜索查询。以下是一个详细的指南,帮助你理解如何使用Weaviate进行向量搜索:
一、环境准备
-
安装Weaviate:
- 你可以通过Docker快速启动Weaviate实例,使用以下命令:
docker pull semitechnologies/weaviate:latest
docker run -p 8080:8080 semitechnologies/weaviate:latest - 或者,你可以在Kubernetes、云服务(如AWS、GCP)上部署Weaviate,甚至使用Weaviate Cloud服务。
- 你可以通过Docker快速启动Weaviate实例,使用以下命令:
-
安装客户端库:
- Weaviate提供了多种编程语言的客户端库,如Python、JavaScript等。以Python为例,你可以使用pip安装:
pip install weaviate-client
- Weaviate提供了多种编程语言的客户端库,如Python、JavaScript等。以Python为例,你可以使用pip安装:
二、创建集合与类
-
连接到Weaviate:
- 使用客户端库连接到你的Weaviate实例。例如,在Python中:
import weaviate
client = weaviate.Client("http://localhost:8080")
- 使用客户端库连接到你的Weaviate实例。例如,在Python中:
-
创建集合(Class):
- 集合在Weaviate中类似于关系型数据库中的表,用于存储特定类型的数据对象。
- 你可以定义一个包含向量属性的集合。例如,创建一个名为
Article的集合,其中包含一个名为content_vector的向量属性:class_obj = { "class": "Article", "vectorizer": "none", # 如果你打算自己提供向量,则设置为"none" "properties": [ { "name": "title", "dataType": ["string"] }, { "name": "content_vector", "dataType": ["number[]"], # 假设向量是浮点数数组 "vectorIndexType": "hnsw" # 使用HNSW算法进行向量索引 } ] } client.schema.create_class(class_obj)
三、插入数据
-
准备数据:
- 你需要准备要插入的数据对象,包括向量。向量通常是通过预训练的模型(如BERT、GPT等)将文本、图像等数据转换而来的。
-
插入数据对象:
- 使用客户端库将数据对象插入到Weaviate中。例如:
article_data = { "title": "Weaviate向量搜索指南", "content_vector": [0.1, 0.2, 0.3, ...] # 假设这是一个128维的向量 } client.data_object.create(article_data, "Article")
- 使用客户端库将数据对象插入到Weaviate中。例如:
四、执行向量搜索
-
构建查询:
- 使用Weaviate的查询语言(基于GraphQL)来构建向量搜索查询。你需要提供查询向量和搜索参数(如最近邻的数量)。
-
执行搜索:
- 使用客户端库执行搜索查询。例如,在Python中:
query_vector = [0.1, 0.2, 0.3, ...] # 与插入数据时的向量维度相同 result = client.query.get("Article", ["title"]) \ .with_near_vector({"vector": query_vector, "certainty": 0.7}) \ .with_limit(5) \ .do() for article in result['data']['Get']['Article']: print(article['title']) - 在这个例子中,
with_near_vector方法用于指定查询向量和搜索参数(如certainty,表示搜索的确定性阈值),with_limit方法用于限制返回的结果数量。
- 使用客户端库执行搜索查询。例如,在Python中:
五、优化与扩展
-
优化向量索引:
- 根据你的数据特性和查询需求,调整向量索引的参数(如HNSW的
efConstruction、ef等),以提高搜索性能。
- 根据你的数据特性和查询需求,调整向量索引的参数(如HNSW的
-
扩展Weaviate实例:
- 随着数据量的增长,你可能需要扩展Weaviate实例以处理更多的数据和查询。Weaviate支持水平扩展,可以通过添加更多的节点来提高性能。
更多推荐

所有评论(0)