【Weaviate】数据库:向量存储与搜索的新纪元

🐇明明跟你说过:个人主页

🏅个人专栏:《深度探秘:AI界的007》 🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、什么是Weaviate

2、Weaviate 能做什么?

3、Weaviate 和传统数据库的区别

二、Weaviate数据库概述

1、Weaviate的起源

2、Weaviate 诞生的背景

3、为什么叫 "Weaviate"?

4、Weaviate核心功能

5、主要特性

三、架构解析

1、存储层(Storage Layer)

2、索引层(Indexing Layer)

3、查询层(Query Layer)

4、API 层(API & Integration Layer)

四、工作原理

1、数据向量化过程 

1.1、文本向量化

1.2、图像向量化

1.3、音频向量化

2、向量索引与搜索机制

2.1、什么是向量索引?

2.2、向量搜索的核心步骤

3、查询处理与结果返回流程

3.1、接收查询请求(API 层)

3.2、向量搜索(索引层)

3.3、数据匹配与筛选(存储层)

3.4、返回结果(查询层 & API 层)


一、引言

1、什么是Weaviate

Weaviate 是一个向量数据库,它的主要作用是存储和搜索文本、图片、音频等数据的向量表示

想象你有一个大图书馆📚,但里面的书没有分类、没有索引,想找某一本书只能一本一本翻,效率非常低。Weaviate 就像一个超级智能图书管理员,它会把每本书的内容转换成数字(向量),然后存起来,想要搜索时,输入一句话,它就能迅速找到最相似的内容!💡

 

2、Weaviate 能做什么?

1️⃣ 智能搜索

  • 🔍 你输入 "一部关于人工智能的科幻电影",它能立刻找到《黑客帝国》《她》等类似的电影。
  • 📨 你输入 "中奖"、"免费" 之类的词,它能检索到相关的垃圾短信。

2️⃣ 语义匹配

  • Weaviate 不仅能匹配完全一样的文本,还能理解意思相近的内容
  • 比如,你搜索 "如何提高编程能力",它能找到 "提升代码技能的 10 个方法" 之类的文章。

3️⃣ 多模态数据(不仅限于文本):

  • 图片:你上传一张猫的照片,它能找到数据库里所有相似的猫照片。
  • 音频:你放一段音乐,它能找到类似风格的歌曲。

 

3、Weaviate 和传统数据库的区别

 

二、Weaviate数据库概述

1、Weaviate的起源

Weaviate 是由荷兰公司 SeMI Technologies 开发的一个开源向量数据库,最早发布于 2019 年。它的诞生源于一个核心问题:如何让 AI 更高效地存储和搜索大规模的非结构化数据(文本、图片、音频等)?

2、Weaviate 诞生的背景

在 2010 年代,机器学习和自然语言处理(NLP) 迅速发展,特别是BERT、GPT 等大规模预训练模型的出现,让 AI 在语义理解方面更强大。但问题是:

  • 传统数据库(如 MySQL、PostgreSQL)只能存结构化数据,对 AI 处理的文本、图片等非结构化数据支持很差
  • 关键词搜索(如 Elasticsearch)无法理解语义,比如:
    • 我们搜索 "AI 机器人",但数据库里只有 "人工智能助手",普通搜索引擎不会认为它们是一样的。
  • 向量化搜索(基于神经网络的语义搜索)能解决这个问题,但当时没有高效、易用的向量数据库

为了解决这个问题,SeMI Technologies 在 2019 年发布了 Weaviate,它是一种专门为 AI 设计的数据库,可以存储、索引和搜索向量化数据。

3、为什么叫 "Weaviate"?

Weaviate 这个名字来源于 “Weave(编织)+ Vi(可视化)+ Ate(智能)” 的组合,寓意:

  • Weave(编织):像一张智能网络一样,把数据和 AI 连接起来。
  • Vi(可视化):它不仅能存储数据,还能支持数据可视化、语义搜索等功能。
  • Ate(智能):Weaviate 结合 AI 和机器学习,帮助用户更智能地搜索和管理数据。

 

4、Weaviate核心功能

✅ 1. 向量存储(Vector Storage)

  • Weaviate 支持存储文本、图片、音频、视频等数据的向量化表示
  • 可以使用预训练模型(如 OpenAI, Hugging Face, Cohere, SBERT)自动向量化数据,也支持自定义向量
  • 适用于语义搜索、推荐系统、异常检测等 AI 应用

✅ 2. 语义搜索(Semantic Search)

  • 基于向量相似性(最近邻搜索, ANN),比传统数据库的关键词搜索更智能。
  • 查询方式:
    • 语义搜索("找到与这个文本最相似的内容")
    • Hybrid Search(结合传统关键词 + 向量搜索)
    • 跨模态搜索(同时支持文本、图片等)
  • 适用于智能问答、客户支持、知识管理等场景

✅ 3. 可扩展的存储与检索

  • Weaviate 支持亿级数据存储,并且可以分布式部署,适用于大规模 AI 应用
  • HNSW(Hierarchical Navigable Small World)索引算法,提供高效的向量检索,比 brute-force 计算快很多。
  • GraphQL & REST API 查询,简单易用。

✅ 4. 自动模式(Schema-Free 或 Schema-Based)

  • Schema-Free:可以直接存储 JSON 数据,无需预定义模式,适合灵活的 AI 数据存储。
  • Schema-Based:支持定义数据结构,适用于严格的企业级应用。

✅ 5. 多模态数据支持

  • Weaviate 不仅能存文本,还能存储和搜索图片、音频、视频的向量化表示
  • 适用于跨模态搜索(Multimodal Search),比如:
    • 上传一张图片,搜索相似的文本描述
    • 用语音输入查询,找到相关的文档或图片

5、主要特性

🔹 1. 轻量级 & 易部署

  • 单机部署(Docker / Kubernetes)💻
  • 云端版本(Weaviate Cloud) ☁️
  • 可扩展集群(分布式架构) 🏗️

🔹 2. 开源 & 高性能

  • 完全开源(Apache 2.0 许可证),无需付费
  • 使用 HNSW(Hierarchical Navigable Small World) 提供超快的向量检索(适用于海量数据)

🔹 3. 多种 API 兼容

  • RESTful API
  • GraphQL
  • Python & Go SDK
  • 支持 LangChain / LlamaIndex

🔹 4. 与 LLM(大语言模型)无缝集成

  • 支持 OpenAI, Hugging Face, Cohere 的模型,自动向量化数据
  • 适用于RAG(检索增强生成),让 ChatGPT 能查询自己的知识库

 

三、架构解析

1、存储层(Storage Layer)

🔹 作用:负责存储原始数据(文档、文本、图片、元数据等)向量数据
🔹 组件

  • 对象存储(Object Storage)
    • Weaviate 可以存储 JSON 格式的对象,支持结构化和非结构化数据
    • 数据存储方式类似 NoSQL,每个对象可带有元数据字段。
  • 向量存储(Vector Storage)
    • Weaviate 默认使用 SQLite / LMDB 进行数据持久化
    • 也支持连接 外部对象存储(S3、MinIO)
  • 多模态支持(Multimodal Storage)
    • 存储文本、图片、音频、视频等数据,并支持向量化。

特点

  • 支持结构化和非结构化数据
  • 可持久化存储到磁盘
  • 支持外部对象存储(S3/MinIO)
  • 可搭配 MySQL / PostgreSQL 进行扩展

2、索引层(Indexing Layer)

🔹 作用:负责高效索引管理,加速向量搜索。
🔹 核心技术

✅ 1. HNSW(Hierarchical Navigable Small World)索引

  • HNSW 是 Weaviate 默认的向量索引,提供近似最近邻搜索(ANN)
  • 比传统 brute-force(暴力搜索)快 10~100 倍
  • 适用于大规模数据集(可扩展至亿级数据)。

✅ 2. 关键词索引(Lexical Indexing)

  • Weaviate 结合了传统倒排索引(类似 Elasticsearch)和向量索引
  • 支持 Hybrid Search(关键词 + 向量搜索结合)。

✅ 3. 多模态索引

  • 可以索引文本、图片、音频、视频的向量,适用于跨模态检索。

特点

  • HNSW 提供高效向量检索
  • 支持 Hybrid Search(关键词 + 向量检索)
  • 支持跨模态索引
  • 支持自定义索引字段

3、查询层(Query Layer)

🔹 作用:负责接收查询请求、执行检索、返回匹配结果
🔹 主要查询方式

✅ 1. 语义搜索(Semantic Search)

  • 基于向量相似度,支持 最近邻搜索(k-NN / ANN)
  • 适用于AI 问答、智能推荐、语义搜索等场景

✅ 2. Hybrid Search(混合搜索)

  • 结合 关键词搜索(Lexical Search)+ 向量搜索(Vector Search)
  • 适用于需要匹配关键词 & 语义的查询(例如企业搜索)。

✅ 3. 过滤搜索(Filter & Faceted Search)

  • Weaviate 支持按属性筛选数据(类似 SQL 的 WHERE 条件)。
  • 可以在向量搜索的基础上再筛选(Metadata Filtering)

特点

  • 支持 GraphQL 查询
  • 支持 REST API 查询
  • 支持向量搜索、关键词搜索、混合搜索
  • 支持按属性筛选(Filter)

 

4、API 层(API & Integration Layer)

🔹 作用:提供REST API / GraphQL API 供外部应用访问。
🔹 主要 API

✅ 1. REST API

  • 适用于标准 HTTP 请求
  • 允许存储、查询、删除数据

✅ 2. GraphQL API

  • Weaviate 原生支持 GraphQL,可用于复杂查询
  • 适用于AI 搜索、知识库管理等应用

✅ 3. SDK & 生态集成

  • 官方 SDK
    • Python
    • Go
    • JavaScript
  • LLM & AI 框架集成
    • LangChain(RAG 应用)
    • LlamaIndex(索引管理)
    • Hugging Face / OpenAI API(自动向量化)
    • Stable Diffusion / CLIP(多模态搜索)

 

四、工作原理

1、数据向量化过程

 数据向量化就是把文本、图片、音频等信息转换成计算机可以理解的“数字表示”,也就是 “向量”(一个包含一串数字的列表)。这些向量可以用来计算相似性、分类、搜索等操作。

1.1、文本向量化

👉 为什么要向量化?
计算机不能直接理解“你好”或“hello”,但可以理解 数字,所以我们要把文字转换成向量。

👉 向量化的方式

  • 词袋模型(Bag of Words, BoW):统计每个单词出现的次数,但不考虑语序。例如:
    • "猫 喜欢 鱼" → [1, 1, 1, 0, 0]
    • "狗 不 喜欢 鱼" → [0, 1, 1, 1, 1]
  • TF-IDF(词频-逆文档频率):不仅统计词频,还考虑词的重要性。
  • Word2Vec / FastText / GloVe:把每个单词变成一个固定长度的向量,比如 你好 → [0.2, 0.5, -0.1, ...]
  • Transformer 模型(BERT、GPT、Sentence-BERT):对整句话进行编码,得到一个上下文相关的向量,比如 这是一条短信 → [0.3, -0.2, 0.8, ...]

   

1.2、图像向量化

👉 为什么要向量化?
计算机不能直接理解“猫”或“狗”的图片,它只能看到像素值(RGB 颜色值),所以要把图片转换成固定大小的向量,方便分类和搜索。

👉 向量化的方式

  • 传统方法(SIFT、HOG、SURF):手工提取特征,如边缘、形状等。
  • 深度学习(CNN:卷积神经网络):使用 ResNet、EfficientNet、ViT 等模型,把整个图片编码成一个高维向量。

1.3、音频向量化

👉 为什么要向量化?
计算机只能处理数字信号,所以要把音频转换成数字向量,方便进行语音识别、音频分类等任务。

👉 向量化的方式

  • MFCC(梅尔频率倒谱系数):提取音频的频谱特征,常用于语音识别。
  • VGGish / Wav2Vec2.0 / Whisper:使用深度学习模型,将音频转换成向量。

   

2、向量索引与搜索机制

2.1、什么是向量索引?

想象你有 100 万条短信或图片的向量,每个向量有 768 维(比如 BERT 生成的文本向量)。如果想找到 与某条新短信最相似的短信,直接遍历 100 万条数据进行计算会 非常慢

💡 向量索引的作用

  • 把所有向量 组织成一种高效的数据结构,加快搜索速度。
  • 让查找相似向量的过程 尽量少计算,提高查询效率。

向量索引就像 高速公路的收费站,帮你快速找到正确的路,而不是盲目遍历所有可能的路径。

  

2.2、向量搜索的核心步骤

1️⃣ 数据向量化 📌

  • 文本 → 用 BERT、Word2Vec 把文本转成 768 维向量。
  • 图片 → 用 ResNet/Vision Transformer 把图片转成 2048 维向量。
  • 音频 → 用 Wav2Vec2.0 把语音转成 512 维向量。

2️⃣ 建立索引 🏗️

  • 选择合适的索引算法,比如 HNSW 或 IVF-PQ。
  • 把向量存入索引结构,组织成 高效的查找方式

3️⃣ 执行搜索 🔍

  • 计算 新向量索引中的向量 的相似度(比如余弦相似度、欧几里得距离)。
  • 返回 最相似的K个向量(KNN 搜索)。

4️⃣ 排序与筛选 🎯

  • 可以结合元数据(比如消息时间、类别等)进一步筛选搜索结果。

3、查询处理与结果返回流程

在 Weaviate 或任何向量数据库中,查询处理和结果返回的流程 主要包含 4 大阶段

  1. 接收查询请求(API 层)
  2. 向量搜索(索引层)
  3. 数据匹配与筛选(存储层)
  4. 返回结果(查询层 & API 层)

3.1、接收查询请求(API 层)

  • 用户通过 REST API 或 GraphQL 查询 Weaviate,发送查询请求。
  • 查询的类型可以是:
    • 相似性搜索(Nearest Neighbor Search, NNS)
    • 带过滤条件的查询(Metadata Filtering)
    • 全文搜索(Lexical Search)

   

 

3.2、向量搜索(索引层)

📌 核心目标:从百万级数据中 高效查找最相似的向量

关键步骤:

  1. 文本向量化
    • Weaviate 内置 text2vec-transformers 模块,先将输入的文本转换为 向量(比如 768 维 BERT 向量)。
  2. 索引搜索(HNSW)
    • HNSW(Hierarchical Navigable Small World)索引 中快速定位 最接近的 K 个向量(Top-K 查询)。
  3. 相似度计算
    • 计算查询向量与索引向量的 余弦相似度(Cosine Similarity)欧几里得距离(L2)
  4. 初步筛选结果
    • 选出相似度 最高的 K 条短信,进入下一步数据匹配。

3.3、数据匹配与筛选(存储层)

🔹 从匹配的向量中,提取完整的数据(如原始文本、标签等)

  • 查询的结果是最相似的向量 ID,但 Weaviate 还需要返回对应的原始数据。
  • Weaviate 存储层 负责 检索元数据,如短信内容、是否垃圾短信(Spam / Ham)。
  • 可能会应用 额外的过滤条件(例如,只获取 2024 年后的短信)。

 

3.4、返回结果(查询层 & API 层)

🔹 最终 Weaviate 返回 JSON 结果,供前端或 AI 模型使用

完整的查询流程

1️⃣ 用户发送查询 → 通过 REST APIGraphQL 提交查询请求(nearText、where 过滤等)。
2️⃣ Weaviate 解析查询调用 text2vec-transformers 模块,把查询转成 向量表示
3️⃣ 执行索引搜索HNSW 向量索引 进行 最近邻搜索(KNN),找到相似的向量。
4️⃣ 数据匹配 & 过滤查询存储层,获取完整的短信内容和元数据。
5️⃣ 返回查询结果 → 结果通过 JSON 格式 返回给用户或前端应用。

💡 这个过程适用于 Weaviate,也适用于 FAISS、Milvus、Pinecone 等向量数据库的查询逻辑! 🚀

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

### 如何使用 Git 命令行提交代码 为了通过命令行向仓库提交更改,需遵循一系列特定的操作流程。这些操作不仅限于添加文件到暂存区、执行实际的提交动作以及撰写有意义的日志信息。 #### 准备工作 在准备阶段,先要确保本地修改已经完成并测试无误。此时可以查看当前状态来确认哪些文件被改动过: ```bash git status ``` 这一步骤有助于了解即将提交的内容概览[^2]。 #### 添加变更至暂存区 一旦确定好想要提交的具体变动之后,则可通过`git add`指令将它们加入到待提交列表之中。如果打算一次性全部纳入考虑范围内的最新版本的话,那么可以直接采用`.`通配符简化过程: ```bash git add . ``` 此命令会把所有未跟踪的新建文件连同已存在但发生改变过的项目一并收入囊中等待下一步处理。 #### 执行提交操作 当一切就绪后就可以正式实施提交行为啦!这时要用到的就是大名鼎鼎的`git commit`啦~记得附上清晰明了的信息描述以便日后追溯查询哦! 按照惯例,在编写日志的时候应该采取祈使句的形式表达意图——即告诉别人“做某事”。例如,“修复 bug”,而不是“我修复了一个错误”。 ```bash git commit -m "fix typo in README.md" ``` 上述例子中的 `-m` 参数后面紧跟的是本次更新的核心要点说明;而双引号内则是具体阐述所作更动目的的文字叙述部分[^4]。 #### 查看历史记录 最后还可以利用 `git log` 来回顾过往所有的提交情况,包括作者姓名、日期时间戳记及备注详情等等有用资料呢! ```bash git log ``` 以上就是完整的基于命令行工具实现源码管理的基本步骤介绍啦[^1]。
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明跟你说过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值