一、Weaviate介绍

Weaviate 由荷兰公司SeMI Technologies 2019年6月28日‌创立。它定位为‌ AI原生基础设施,其核心产品是矢量数据库 ,旨在简化开发者的矢量数据管理流程。 Weaviate是一款开源的云原生向量数据库,专为高效存储、管理高维向量数据及实现快速相似性搜索而设计。 其名称“Weaviate”发音可参考为“wee-vee-ate”,寓意编织(weave)数据与AI能力。
Weaviate 凭借其混合存储、高性能搜索、灵活架构和多模态支持,成为构建智能应用(如推荐系统、语义搜索、知识图谱)的理想选择,尤其适合需要结合结构化数据和向量数据的复杂查询场景,是AI原生时代数据存储与检索的关键基础设施。

1.1 核心特点

混合存储与查询能力
  • 同时存储对象数据(如文本、图像、元数据)和向量数据,支持向量搜索+结构化过滤(如价格、时间范围等)的混合查询,实现语义相似性与精确条件的双重匹配。
  • 采用HNSW(层次可导航小世界图)、IVF(倒排文件索引)等先进索引技术,支持余弦相似度、欧几里得距离、点积等多种距离度量,确保亚毫秒级延迟的10-NN搜索性能。
开源与云原生架构
  • 支持自托管和云托管模式,通过水平扩展和分布式部署满足从原型到生产环境的需求,具备高可用性、容错能力及动态资源调整能力。
  • 提供RESTful API、GraphQL API及多语言客户端(Python、JavaScript、Java、Go等),与TensorFlow、PyTorch等AI框架及Apache Spark等数据处理工具无缝集成。
多模态数据支持
  • 处理文本、图像、音频等多种数据类型,通过BERT、ResNet等模型生成向量,支持跨模态检索(如图像-文本联合搜索)。
  • 允许为向量附加元数据(如标签、时间戳),增强数据管理的灵活性和查询精度。
模块化与可扩展性
  • 模块化架构支持集成文本向量化、图像向量化、生成式AI等模型,用户可自定义schema定义数据结构和关系。
  • 支持实时数据更新、持久化存储、备份恢复及SSL/TLS加密、身份验证等安全功能。

1.2 典型应用场景

智能推荐系统
  • 结合用户行为向量(如点击、购买历史)与内容向量(如商品描述、图像),实现个性化商品、音乐或视频推荐,提升点击率和转化率。
语义搜索引擎
  • 在文档、图像或视频库中实现基于语义的搜索,例如企业内部知识库的语义检索、法律文档的相似案例匹配,或社交媒体内容的情感分析
知识图谱构建
  • 将数据以图谱形式组织,存储实体关系(如员工-项目关联),支持复杂关系查询和推理,应用于企业知识管理、生物信息学分子结构分析、学术文献关系挖掘等。
对话式AI与长期记忆
  • 存储聊天机器人对话历史,支持上下文理解和长期记忆,提升对话连贯性;结合大语言模型(如LLM)实现知识库问答和检索增强生成(RAG)。
异常检测与威胁分析
  • 通过向量相似性分析识别异常数据点,应用于网络安全威胁检测、金融欺诈识别、设备故障预测等场景。
多模态内容分析
  • 处理跨模态数据(如文本+图像+音频),支持社交媒体内容的多模态情感分析、视频内容的语义标签生成,或生物医学中的基因序列相似性搜索。
代码库检索与自动化开发
  • 于语义的代码片段检索,辅助代码复用和自动化开发流程,提升开发效率。

1.3 同产品对比

  • 与Milvus对比:Weaviate在混合搜索和模块化设计上更优,适合复杂查询场景;Milvus在大规模数据集和GPU加速场景表现更佳。
  • 与Pinecone对比:Weaviate提供自托管选项,适合数据隐私敏感场景;Pinecone作为全托管服务更易用但成本较高。
  • 与Chroma对比:Weaviate在生产级稳定性和企业级功能支持上更强,适合大规模应用;Chroma适合快速原型开发和小规模项目。

1.4 Weaviate端口说明

端口号
用途
配置示例说明
注意事项
8080
HTTP/REST API & GraphQL入口,支持数据CRUD、语义搜索、混合查询及元数据操作
ocker映射:-p 8080:8080;
Python客户端默认连接http://localhost:8080,API路径为/v1;
可修改config.local-development.yaml中network.http.port
生产环境建议限制内网IP访问,避免端口冲突
50051
gRPC API高性能通信接口,支持批量数据传输、流式处理及复杂模型集成
Docker映射:-p 50051:50051;
可调整为network.grpc.port: 50052避免冲突
需启用TLS加密,生产环境建议使用专用网络隔离
2112
集群通信(Raft协议),用于节点共识、状态同步及故障转移,保障高可用性
集群配置:cluster.raft.port: 2112;需通过防火墙/云安全组限制访问来源(如AWS允许10.0.0.0/16)
生产环境需配置副本数≥3,确保数据一致性
7100
集群节点发现与健康检查(高可用场景)
Docker多节点部署配置:CLUSTER_GOSSIP_BIND_PORT=7100;用于节点间状态同步与故障检测
仅在集群模式下启用,需配合Raft协议端口(如2112)使用;生产环境建议设置专用网络隔离
7101
集群节点数据同步端口
Docker多节点部署配置:CLUSTER_DATA_BIND_PORT=7101;用于节点间数据同步

二、Weaviate部署

2.1 部署环境

docker版本:Docker version 29.2.0, build 0b9d198
docker-compose版本:Docker Compose version v5.0.2
使用主要组件镜像版本为:
weaviate:semitechnologies/weaviate:1.35.3

2.2 导入所需镜像文件

docker load -i weaviate-1.35.3.tar

2.3 编写Weaviate部署使用的docker-compose.yml文件

编辑docker-compose.yaml内容
version: '3.5'
services:
  weaviate:
    container_name: weaviate  #容器名称
    image: semitechnologies/weaviate:1.35.3
    ports:
      - "8080:8080"
    environment:
      QUERY_DEFAULTS_LIMIT: 20
      #明确启用匿名访问,禁用其他认证方式
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
      DEFAULT_VECTORIZER_MODULE: "none"
      #如果不需要使用 Weaviate 的向量化模块,可以禁用
      ENABLE_MODULES: ""
      #节点唯一名称
      CLUSTER_HOSTNAME: "node1"
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data:/var/lib/weaviate
    restart: on-failure:0
    networks:
      - weaviate-net

networks:
  weaviate-net:

2.4 创建Weaviate部署目录并启动服务

mkdir Weaviate
mv docker-compose.yml ./Weaviate
#启动服务
docker-compose up -d

2.5 验证服务状态

访问 http://127.0.0.1:8080/v1 返回应答数据

2.6 集群环境配置

本例演示单机伪集群模式,参考以下内容可部署多机集群模式。根据实际IP配置将node1、node2、node3替换为对应的IP。
version: '3.5'
services:
  weaviate-node1:
    container_name: weaviate-node1  #容器名称
    image: semitechnologies/weaviate:1.35.3
    ports:
      - "8180:8080"
      - "50151:‌50051"
      - "7101:7100"
    environment:
      QUERY_DEFAULTS_LIMIT: 20
      #明确启用匿名访问,禁用其他认证方式
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
      DEFAULT_VECTORIZER_MODULE: "none"
      #如果不需要使用 Weaviate 的向量化模块,可以禁用
      ENABLE_MODULES: ""
      #节点唯一名称
      CLUSTER_HOSTNAME: "node1"
      #节点间通信端口
      CLUSTER_GOSSIP_BIND_PORT: '7100'
      #节点数据同步端口
      CLUSTER_DATA_BIND_PORT: '7101'
      #加入集群的其他节点
      CLUSTER_JOIN: 'node1:7100,node2:7100,node3:7100'
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data1:/var/lib/weaviate
    restart: on-failure:0
    networks:
      - weaviate-net-cluster

  weaviate-node2:
    container_name: weaviate-node2  #容器名称
    image: semitechnologies/weaviate:1.35.3
    ports:
      - "8280:8080"
      - "50251:‌50051"
      - "7102:7100"
    environment:
      QUERY_DEFAULTS_LIMIT: 20
      #明确启用匿名访问,禁用其他认证方式
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
      DEFAULT_VECTORIZER_MODULE: "none"
      #如果不需要使用 Weaviate 的向量化模块,可以禁用
      ENABLE_MODULES: ""
      #节点唯一名称
      CLUSTER_HOSTNAME: "node2"
      #节点间通信端口
      CLUSTER_GOSSIP_BIND_PORT: '7100'
      #节点数据同步端口
      CLUSTER_DATA_BIND_PORT: '7101'
      #加入集群的其他节点
      CLUSTER_JOIN: 'node1:7100,node2:7100,node3:7100'
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data2:/var/lib/weaviate
    restart: on-failure:0
    networks:
      - weaviate-net-cluster

  weaviate-node3:
    container_name: weaviate-node3  #容器名称
    image: semitechnologies/weaviate:1.35.3
    ports:
      - "8380:8080"
      - "50351:‌50051"
      - "7103:7100"
    environment:
      QUERY_DEFAULTS_LIMIT: 20
      #明确启用匿名访问,禁用其他认证方式
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
      DEFAULT_VECTORIZER_MODULE: "none"
      #如果不需要使用 Weaviate 的向量化模块,可以禁用
      ENABLE_MODULES: ""
      #节点唯一名称
      CLUSTER_HOSTNAME: "node3"
      #节点间通信端口
      CLUSTER_GOSSIP_BIND_PORT: '7100'
      #节点数据同步端口
      CLUSTER_DATA_BIND_PORT: '7101'
      #加入集群的其他节点
      CLUSTER_JOIN: 'node1:7100,node2:7100,node3:7100'
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data3:/var/lib/weaviate
    restart: on-failure:0
    networks:
      - weaviate-net-cluster

networks:
  weaviate-net-cluster:

检查服务状态 docker-compose ps
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐