在 .env 文件中添加以下配置,用于选择和配置向量数据库:
# 向量数据库配置
VECTOR_DB_TYPE=es # 可选值: es, infinity
# Infinity向量数据库配置
INFINITY_HOST=localhost
INFINITY_PORT=23810
INFINITY_USER=admin
INFINITY_PASSWORD=admin
from services.utils.vector_db import VectorDBFactory
# 根据配置获取向量数据库实例
vector_db = VectorDBFactory.get_vector_db()
# 创建索引
index_name = "test_index"
mappings = {
"properties": {
"content": {
"type": "text"
},
"vector_768_vec": {
"type": "dense_vector",
"dims": 768,
"similarity": "cosine"
}
}
}
vector_db.create_index(index_name, mappings)
# 插入单个文档
document = {
"content": "这是一个测试文档",
"vector_768_vec": [0.1] * 768,
"metadata": {
"title": "测试文档",
"category": "test"
}
}
vector_db.insert_document(index_name, document, id="1")
# 批量插入文档
documents = [
{
"content": f"批量测试文档 {i}",
"vector_768_vec": [0.1] * 768,
"metadata": {
"title": f"批量测试文档 {i}",
"category": "test"
}
}
for i in range(5)
]
vector_db.bulk_insert(index_name, documents)
# 向量检索
query_vector = [0.1] * 768
result = vector_db.vector_search(
index_name,
vector_field="vector_768_vec",
vector=query_vector,
size=10
)
# 混合检索(文本+向量)
result = vector_db.hybrid_search(
index_name,
text_query="测试",
vector_field="vector_768_vec",
vector=query_vector,
size=10,
text_weight=0.5, # 文本检索权重
vector_weight=0.5 # 向量检索权重
)
# 关闭连接
vector_db.close()
修改 .env 文件中的 VECTOR_DB_TYPE 配置:
# 使用Elasticsearch
VECTOR_DB_TYPE=es
# 使用Infinity
VECTOR_DB_TYPE=infinity
# 注意:这种方式不推荐,建议通过环境变量配置
from services.utils.vector_db import ElasticsearchVectorDB, InfinityVectorDB
# 直接创建特定类型的向量数据库实例
es_db = ElasticsearchVectorDB()
infinity_db = InfinityVectorDB()
原代码:
from services.utils.es_conn import ESConnection
# 初始化ES连接
es = ESConnection()
新代码:
from services.utils.vector_db import VectorDBFactory
# 初始化向量数据库连接(根据配置自动选择)
vector_db = VectorDBFactory.get_vector_db()
原代码:
result = es.hybrid_search(
index_name,
text_query="测试",
vector_field="vector_768_vec",
vector=vector,
size=10
)
新代码:
result = vector_db.hybrid_search(
index_name,
text_query="测试",
vector_field="vector_768_vec",
vector=vector,
size=10
)
依赖问题:
elasticsearch==8.11.1infinity-emb 和 huggingface_hub 的版本兼容问题
huggingface_hub==0.21.4pip install huggingface_hub==0.21.4配置问题:
.env 文件中的配置正确性能问题:
size 参数以平衡性能和结果数量迁移问题:
要添加对新的向量数据库的支持,需要:
VectorDBBaseVectorDBFactory.get_vector_db() 方法中添加新的类型判断示例:
class NewVectorDB(VectorDBBase):
def create_index(self, index_name: str, mappings: Dict[str, Any] = None) -> bool:
# 实现创建索引逻辑
pass
# 实现其他方法...
# 在 VectorDBFactory.get_vector_db() 中添加
if vector_db_type == "new":
return NewVectorDB()
.env 文件中的 ES_HOST 配置是否正确huggingface_hub:pip install huggingface_hub==0.21.4.env 文件中的 Infinity 配置是否正确