__init__.py 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. """
  2. Infinity向量数据库主类
  3. """
  4. from typing import List, Dict, Any, Optional
  5. from services.utils.infinity.base import InfinityConnection
  6. from services.utils.infinity.index import InfinityIndexManager
  7. from services.utils.infinity.document import InfinityDocumentManager
  8. from services.utils.infinity.search import InfinitySearchManager
  9. class InfinityVectorDB:
  10. """
  11. Infinity向量数据库主类
  12. 提供统一的接口,整合索引、文档和搜索功能
  13. """
  14. def __init__(self, host: str = None, port: int = None, user: str = None, password: str = None):
  15. """
  16. 初始化Infinity向量数据库
  17. Args:
  18. host: Infinity主机地址
  19. port: Infinity端口
  20. user: 用户名
  21. password: 密码
  22. """
  23. # 初始化连接
  24. self.connection = InfinityConnection(host, port, user, password)
  25. # 初始化管理器
  26. self.index_manager = InfinityIndexManager(self.connection)
  27. self.document_manager = InfinityDocumentManager(self.connection)
  28. self.search_manager = InfinitySearchManager(self.connection)
  29. def create_index(self, index_name: str, mappings: Dict[str, Any] = None) -> bool:
  30. """创建索引"""
  31. return self.index_manager.create_index(index_name, mappings)
  32. def delete_index(self, index_name: str) -> bool:
  33. """删除索引"""
  34. return self.index_manager.delete_index(index_name)
  35. def index_exists(self, index_name: str) -> bool:
  36. """检查索引是否存在"""
  37. return self.index_manager.index_exists(index_name)
  38. def insert_document(self, index_name: str, document: Dict[str, Any], id: str = None) -> bool:
  39. """插入单个文档"""
  40. return self.document_manager.insert_document(index_name, document, id)
  41. def bulk_insert(self, index_name: str, documents: List[Dict[str, Any]]) -> Dict[str, Any]:
  42. """批量插入文档"""
  43. return self.document_manager.bulk_insert(index_name, documents)
  44. def update_document(self, index_name: str, document_id: str, document: Dict[str, Any]) -> bool:
  45. """更新单个文档"""
  46. return self.document_manager.update_document(index_name, document_id, document)
  47. def delete_document(self, index_name: str, document_id: str) -> bool:
  48. """删除单个文档"""
  49. return self.document_manager.delete_document(index_name, document_id)
  50. def get_document(self, index_name: str, document_id: str) -> Optional[Dict[str, Any]]:
  51. """获取单个文档"""
  52. return self.document_manager.get_document(index_name, document_id)
  53. def delete_by_query(self, index_name: str, query: Dict[str, Any]) -> Dict[str, Any]:
  54. """按查询条件删除文档"""
  55. return self.document_manager.delete_by_query(index_name, query)
  56. def search(self, index_name: str, query: Dict[str, Any], size: int = 10) -> Dict[str, Any]:
  57. """搜索文档"""
  58. return self.search_manager.search(index_name, query, size)
  59. def vector_search(self, index_name: str, vector_field: str, vector: List[float], size: int = 10, filter: Dict[str, Any] = None) -> Dict[str, Any]:
  60. """向量检索"""
  61. return self.search_manager.vector_search(index_name, vector_field, vector, size, filter)
  62. def hybrid_search(self, index_name: str, text_query: str, vector_field: str, vector: List[float],
  63. size: int = 10, text_weight: float = 0.5, vector_weight: float = 0.5) -> Dict[str, Any]:
  64. """混合检索"""
  65. return self.search_manager.hybrid_search(index_name, text_query, vector_field, vector, size, text_weight, vector_weight)
  66. def match_search(self, index_name: str, field: str, value: str, size: int = 10) -> Dict[str, Any]:
  67. """简单匹配搜索"""
  68. return self.search_manager.match_search(index_name, field, value, size)
  69. def match_all(self, index_name: str, size: int = 10) -> Dict[str, Any]:
  70. """匹配所有文档"""
  71. return self.search_manager.match_all(index_name, size)
  72. def close(self):
  73. """关闭连接"""
  74. self.connection.close()