test_infinity_encapsulation.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 测试Infinity向量数据库封装
  5. """
  6. from services.utils.infinity import InfinityVectorDB
  7. from conf.config import VectorDBConfig
  8. def test_infinity_connection():
  9. """
  10. 测试Infinity连接
  11. """
  12. print("=== 测试Infinity连接 ===")
  13. try:
  14. # 初始化InfinityVectorDB
  15. infinity_db = InfinityVectorDB()
  16. print("✅ InfinityVectorDB初始化成功")
  17. # 测试索引创建
  18. index_name = "test_collection"
  19. print(f"\n测试创建索引: {index_name}")
  20. result = infinity_db.create_index(index_name)
  21. if result:
  22. print(f"✅ 索引 {index_name} 创建成功")
  23. else:
  24. print(f"❌ 索引 {index_name} 创建失败")
  25. return False
  26. # 测试索引存在检查
  27. print(f"\n测试检查索引存在: {index_name}")
  28. exists = infinity_db.index_exists(index_name)
  29. if exists:
  30. print(f"✅ 索引 {index_name} 存在")
  31. else:
  32. print(f"❌ 索引 {index_name} 不存在")
  33. return False
  34. # 测试插入文档
  35. print(f"\n测试插入文档")
  36. document = {
  37. "file_name": "test.pdf",
  38. "file_page_count": 10,
  39. "page_number": 1,
  40. "text": "这是一个测试文档",
  41. "image_path": "test.png",
  42. "sparse_vector": [],
  43. "dense_vector_1024": [0.1] * 1024,
  44. "dataset_id": "test_dataset",
  45. "document_id": "test_doc_id"
  46. }
  47. insert_result = infinity_db.insert_document(index_name, document)
  48. if insert_result:
  49. print(f"✅ 文档插入成功")
  50. else:
  51. print(f"❌ 文档插入失败")
  52. return False
  53. # 测试批量插入
  54. print(f"\n测试批量插入文档")
  55. documents = []
  56. for i in range(2, 5):
  57. doc = {
  58. "file_name": "test.pdf",
  59. "file_page_count": 10,
  60. "page_number": i,
  61. "text": f"这是第 {i} 页",
  62. "image_path": f"test_{i}.png",
  63. "sparse_vector": [],
  64. "dense_vector_1024": [0.1] * 1024,
  65. "dataset_id": "test_dataset",
  66. "document_id": "test_doc_id"
  67. }
  68. documents.append(doc)
  69. bulk_result = infinity_db.bulk_insert(index_name, documents)
  70. if bulk_result["success"] == len(documents):
  71. print(f"✅ 批量插入成功,共插入 {bulk_result['success']} 个文档")
  72. else:
  73. print(f"❌ 批量插入失败,成功 {bulk_result['success']} 个,失败 {bulk_result['failed']} 个")
  74. return False
  75. # 测试向量检索
  76. print(f"\n测试向量检索")
  77. vector = [0.1] * 1024
  78. search_result = infinity_db.vector_search(index_name, "dense_vector_1024", vector, size=5)
  79. if search_result["hits"]["total"] > 0:
  80. print(f"✅ 向量检索成功,找到 {search_result['hits']['total']} 个结果")
  81. else:
  82. print(f"❌ 向量检索失败,未找到结果")
  83. # 测试混合检索
  84. print(f"\n测试混合检索")
  85. hybrid_result = infinity_db.hybrid_search(
  86. index_name,
  87. text_query="测试",
  88. vector_field="dense_vector_1024",
  89. vector=vector,
  90. size=5
  91. )
  92. if hybrid_result["hits"]["total"] > 0:
  93. print(f"✅ 混合检索成功,找到 {hybrid_result['hits']['total']} 个结果")
  94. else:
  95. print(f"❌ 混合检索失败,未找到结果")
  96. # 测试删除索引
  97. print(f"\n测试删除索引: {index_name}")
  98. delete_result = infinity_db.delete_index(index_name)
  99. if delete_result:
  100. print(f"✅ 索引 {index_name} 删除成功")
  101. else:
  102. print(f"❌ 索引 {index_name} 删除失败")
  103. return False
  104. # 关闭连接
  105. infinity_db.close()
  106. print(f"\n✅ 成功关闭连接")
  107. return True
  108. except Exception as e:
  109. print(f"\n❌ 测试失败: {e}")
  110. import traceback
  111. traceback.print_exc()
  112. return False
  113. def test_vector_db_factory():
  114. """
  115. 测试VectorDBFactory
  116. """
  117. print("\n=== 测试VectorDBFactory ===")
  118. try:
  119. from services.utils.vector_db import VectorDBFactory
  120. # 获取向量数据库实例
  121. vector_db = VectorDBFactory.get_vector_db()
  122. print(f"✅ 成功获取向量数据库实例: {type(vector_db).__name__}")
  123. # 测试创建索引
  124. index_name = "test_factory_collection"
  125. result = vector_db.create_index(index_name)
  126. if result:
  127. print(f"✅ 通过工厂创建索引 {index_name} 成功")
  128. else:
  129. print(f"❌ 通过工厂创建索引 {index_name} 失败")
  130. vector_db.close()
  131. print(f"✅ 成功关闭通过工厂获取的连接")
  132. return True
  133. except Exception as e:
  134. print(f"\n❌ 工厂测试失败: {e}")
  135. import traceback
  136. traceback.print_exc()
  137. return False
  138. if __name__ == "__main__":
  139. print("开始测试Infinity向量数据库封装...")
  140. # 测试Infinity连接
  141. connection_result = test_infinity_connection()
  142. # 测试VectorDBFactory
  143. factory_result = test_vector_db_factory()
  144. # 总结
  145. print("\n=== 测试总结 ===")
  146. if connection_result and factory_result:
  147. print("✅ 所有测试通过!")
  148. exit(0)
  149. else:
  150. print("❌ 部分测试失败!")
  151. exit(1)