搬瓦工 VPS 部署 Weaviate 向量搜索引擎教程
Weaviate 是一款开源的向量搜索引擎,它不仅支持纯向量搜索,还提供了强大的混合搜索能力,可以同时结合关键词搜索和语义搜索。Weaviate 内置了对多种 AI 模型的支持,能够自动完成文本到向量的转换。本教程将介绍如何在搬瓦工 VPS 上部署和配置 Weaviate。
一、Weaviate 核心特点
- 混合搜索:同时支持向量搜索(语义)和 BM25 关键词搜索,并可调节两者权重。
- 模块化架构:通过模块扩展向量化、生成和引用等功能。
- GraphQL API:提供灵活的 GraphQL 查询接口。
- 多租户支持:单实例可服务多个隔离的租户。
- 自动向量化:内置文本向量化模块,无需手动生成向量。
二、环境要求
- 操作系统:Ubuntu 20.04 或更高版本。
- 内存:至少 2GB,推荐 4GB 以上。
- Docker:需要 Docker 和 Docker Compose。
部署 Weaviate 需要先安装 Docker,参考 Docker 安装教程。选购 VPS 请参考 全部方案。
三、Docker 部署 Weaviate
mkdir -p /opt/weaviate && cd /opt/weaviate
cat > docker-compose.yml <<'EOF'
version: '3.4'
services:
weaviate:
image: cr.weaviate.io/semitechnologies/weaviate:latest
ports:
- "8080:8080"
- "50051:50051"
volumes:
- weaviate_data:/var/lib/weaviate
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'none'
CLUSTER_HOSTNAME: 'node1'
ENABLE_MODULES: 'text2vec-transformers,generative-openai'
restart: unless-stopped
volumes:
weaviate_data:
EOF
docker compose up -d
3.1 带内置向量化模块部署
如果需要 Weaviate 自动将文本转换为向量,可以启用内置的向量化模块:
cat > docker-compose-vectorizer.yml <<'EOF'
version: '3.4'
services:
weaviate:
image: cr.weaviate.io/semitechnologies/weaviate:latest
ports:
- "8080:8080"
volumes:
- weaviate_data:/var/lib/weaviate
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
DEFAULT_VECTORIZER_MODULE: 'text2vec-transformers'
ENABLE_MODULES: 'text2vec-transformers'
TRANSFORMERS_INFERENCE_API: 'http://t2v-transformers:8080'
CLUSTER_HOSTNAME: 'node1'
restart: unless-stopped
t2v-transformers:
image: cr.weaviate.io/semitechnologies/transformers-inference:sentence-transformers-all-MiniLM-L6-v2
environment:
ENABLE_CUDA: 0
restart: unless-stopped
volumes:
weaviate_data:
EOF
docker compose -f docker-compose-vectorizer.yml up -d
四、验证部署
# 检查服务状态
curl http://localhost:8080/v1/meta | python3 -m json.tool
# 检查健康状态
curl http://localhost:8080/v1/.well-known/ready
五、Python 客户端操作
pip install weaviate-client
cat > /opt/weaviate/weaviate_demo.py <<'EOF'
import weaviate
import weaviate.classes as wvc
# 连接 Weaviate
client = weaviate.connect_to_local()
# 创建集合
articles = client.collections.create(
name="Article",
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="category", data_type=wvc.config.DataType.TEXT),
]
)
# 插入数据(手动提供向量)
import random
with articles.batch.dynamic() as batch:
for i in range(50):
batch.add_object(
properties={
"title": f"VPS 教程 {i}",
"content": f"这是第 {i} 篇关于 VPS 配置和管理的教程内容。",
"category": "技术教程"
},
vector=[random.random() for _ in range(384)]
)
print(f"已插入 {articles.aggregate.over_all(total_count=True).total_count} 条数据")
# 向量搜索
query_vector = [random.random() for _ in range(384)]
results = articles.query.near_vector(
near_vector=query_vector,
limit=5,
return_metadata=wvc.query.MetadataQuery(distance=True)
)
for obj in results.objects:
print(f"标题: {obj.properties['title']}, 距离: {obj.metadata.distance}")
client.close()
EOF
python3 /opt/weaviate/weaviate_demo.py
六、混合搜索
Weaviate 的混合搜索结合了 BM25 关键词搜索和向量搜索:
cat > /opt/weaviate/hybrid_search.py <<'EOF'
import weaviate
client = weaviate.connect_to_local()
articles = client.collections.get("Article")
# 混合搜索 - alpha 控制向量搜索和关键词搜索的权重
# alpha=1 纯向量搜索,alpha=0 纯关键词搜索
results = articles.query.hybrid(
query="VPS 安全配置",
alpha=0.5, # 50% 向量 + 50% 关键词
limit=5
)
for obj in results.objects:
print(f"标题: {obj.properties['title']}")
client.close()
EOF
七、GraphQL 查询
Weaviate 提供了 GraphQL 查询接口:
# 查询示例
curl -X POST http://localhost:8080/v1/graphql \
-H "Content-Type: application/json" \
-d '{
"query": "{Get{Article(limit:5){title content category}}}"
}'
八、配置认证
生产环境建议启用 API 密钥认证。修改 Docker Compose 配置:
# 在 environment 中修改
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
AUTHENTICATION_APIKEY_ENABLED: 'true'
AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'your-secure-api-key'
AUTHENTICATION_APIKEY_USERS: 'admin'
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
AUTHORIZATION_ADMINLIST_USERS: 'admin'
九、数据备份
# 备份 Weaviate 数据
docker compose stop
tar -czf /opt/backups/weaviate-backup-$(date +%Y%m%d).tar.gz /opt/weaviate/
docker compose start
十、Weaviate 与其他向量数据库对比
Weaviate 的独特优势在于混合搜索和内置向量化模块。Milvus 在纯向量搜索性能和大规模数据处理方面表现更好。ChromaDB 最为轻量,适合快速原型开发。选择时需要根据实际需求权衡。
十一、常见问题
内存占用过高
Weaviate 使用 HNSW 索引,会将索引数据加载到内存中。可以通过配置 LIMIT_RESOURCES 或减少数据量来控制。
模块加载失败
确认 Docker Compose 中的模块服务正常运行,检查模块容器日志:
docker compose logs t2v-transformers
总结
Weaviate 是功能全面的向量搜索引擎,特别适合需要混合搜索能力的 AI 应用。配合 LangChain 或 LlamaIndex 可以构建强大的知识库问答系统。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net。