test_vector_db.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 向量数据库测试脚本
  5. 测试向量数据库工厂类的基本功能和配置切换
  6. """
  7. from services.utils.vector_db import VectorDBFactory
  8. from conf.config import VectorDBConfig
  9. def test_vector_db_factory():
  10. """
  11. 测试向量数据库工厂类
  12. """
  13. print("=== 测试向量数据库工厂类 ===")
  14. # 获取配置的向量数据库类型
  15. vector_db_type = VectorDBConfig.get_vector_db_type()
  16. print(f"当前配置的向量数据库类型: {vector_db_type}")
  17. try:
  18. # 获取向量数据库实例
  19. vector_db = VectorDBFactory.get_vector_db()
  20. print(f"成功获取向量数据库实例: {type(vector_db).__name__}")
  21. # 测试创建索引
  22. index_name = "test_index"
  23. print(f"\n测试创建索引: {index_name}")
  24. result = vector_db.create_index(index_name)
  25. print(f"创建索引结果: {result}")
  26. # 测试向量检索接口
  27. print(f"\n测试向量检索接口")
  28. vector = [0.1] * 768
  29. result = vector_db.vector_search(index_name, "vector_768_vec", vector, size=5)
  30. print(f"向量检索结果: {result}")
  31. # 测试混合检索接口
  32. print(f"\n测试混合检索接口")
  33. result = vector_db.hybrid_search(
  34. index_name,
  35. text_query="测试",
  36. vector_field="vector_768_vec",
  37. vector=vector,
  38. size=5
  39. )
  40. print(f"混合检索结果: {result}")
  41. # 关闭连接
  42. vector_db.close()
  43. print(f"\n成功关闭向量数据库连接")
  44. return True
  45. except Exception as e:
  46. print(f"测试失败: {e}")
  47. import traceback
  48. traceback.print_exc()
  49. return False
  50. def test_vector_db_switch():
  51. """
  52. 测试向量数据库切换功能
  53. """
  54. print("\n=== 测试向量数据库切换功能 ===")
  55. # 测试不同类型的向量数据库
  56. test_types = ["es", "infinity"]
  57. for db_type in test_types:
  58. print(f"\n测试向量数据库类型: {db_type}")
  59. try:
  60. # 临时修改配置(实际使用时通过环境变量配置)
  61. from conf.config import VectorDBConfig
  62. # 注意:这里我们不能直接修改配置类的静态方法返回值
  63. # 所以我们通过工厂类的实现来测试
  64. # 这里只测试工厂类是否能正确创建不同类型的向量数据库
  65. if db_type == "es":
  66. from services.utils.vector_db import ElasticsearchVectorDB
  67. vector_db = ElasticsearchVectorDB()
  68. else:
  69. from services.utils.vector_db import InfinityVectorDB
  70. vector_db = InfinityVectorDB()
  71. print(f"成功创建{db_type}向量数据库实例: {type(vector_db).__name__}")
  72. vector_db.close()
  73. print(f"成功关闭{db_type}向量数据库连接")
  74. except Exception as e:
  75. print(f"测试{db_type}失败: {e}")
  76. import traceback
  77. traceback.print_exc()
  78. if __name__ == "__main__":
  79. # 测试向量数据库工厂类
  80. test_vector_db_factory()
  81. # 测试向量数据库切换功能
  82. test_vector_db_switch()
  83. print("\n=== 测试完成 ===")