向量数据库非常适合管理密集嵌入,但并不总是必要的。替代方案包括:
- 传统数据库 :如果使用的是稀疏方法或结构化数据,常规关系数据库或 NoSQL 数据库就足够了。它们适用于关键字搜索。MongoDB 或 Elasticsearch 等数据库非常适合处理非结构化数据和全文搜索,但它们缺乏深度语义搜索。
- 倒排索引 :这些索引将关键字映射到文档以进行快速搜索,但它们无法捕获单词背后的含义。
- 文件系统 :对于较小的系统,存储在文件中的有序文档可能有效,但它们的搜索功能有限。
下面主要解释 倒排索引 和文件系统 。
🟦 一、倒排索引(Inverted Index)示例
作用: 快速实现「关键词」查找「出现在哪些文档中」。
🔸 假设我们有 3 篇文档:
documents = {
"doc1": "我爱自然语言处理",
"doc2": "语言模型非常强大",
"doc3": "我正在学习处理技术"
}
我们可以构建一个倒排索引如下:
✅ 倒排索引代码实现(用 Python 构建)
from collections import defaultdict
# 建立倒排索引
inverted_index = defaultdict(set)
for doc_id, content in documents.items():
for word in content.split():
inverted_index[word].add(doc_id)
# 查询关键词在哪些文档中出现
query = "语言"
result = inverted_index.get(query, set())
print(f"关键词 '{query}' 出现在文档: {result}")
🧠 输出:
关键词 '语言' 出现在文档: {'doc1', 'doc2'}
✅ 说明:「语言」这个词同时出现在
doc1
和doc2
,所以可以通过倒排索引快速查到它们。
🟨 二、文件系统存储检索(File System)
作用: 在没有数据库的情况下,直接从文件夹里的文本文件中按关键词搜索。
📝 假设我们有几个 txt 文件:
data/
├── doc1.txt -> 内容: 我爱自然语言处理
├── doc2.txt -> 内容: 语言模型非常强大
├── doc3.txt -> 内容: 我正在学习处理技术
✅ 文件系统中搜索关键词的代码:
import os
folder = "data"
query = "语言"
# 遍历文件夹中的所有 txt 文件
for filename in os.listdir(folder):
if filename.endswith(".txt"):
path = os.path.join(folder, filename)
with open(path, "r", encoding="utf-8") as file:
content = file.read()
if query in content:
print(f"关键词 '{query}' 出现在文件: {filename}")
🧠 输出:
关键词 '语言' 出现在文件: doc1.txt
关键词 '语言' 出现在文件: doc2.txt
✅ 说明:这是最朴素的关键词检索方式,但不具备语义能力,也不适合大规模文本。
✅ 总结对比
方法 | 优点 | 缺点 |
---|---|---|
倒排索引 | 查询快,适合关键词精确匹配 | 无法处理同义词、语义模糊的匹配 |
文件系统检索 | 简单易用,适合小规模实验 | 查询慢,无法扩展,无法处理语义 |
向量数据库(如 FAISS, Weaviate) | 支持语义相似度搜索,适合大模型嵌入 | 占内存,需要初始化向量索引结构等 |