pyvastbase 0.2.8__tar.gz → 0.2.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/MANIFEST.in +5 -0
  2. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/PKG-INFO +16 -12
  3. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/README.md +15 -11
  4. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/README_en.md +16 -12
  5. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/__init__.py +435 -352
  6. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/__init__.py +43 -1
  7. pyvastbase-0.2.9/async_impl/client.py +855 -0
  8. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/collection.py +467 -38
  9. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/connections.py +56 -4
  10. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/index_builder.py +26 -0
  11. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/utility.py +610 -4
  12. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/client.py +328 -29
  13. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/collection.py +425 -22
  14. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/collection_core.py +11 -3
  15. pyvastbase-0.2.9/core/compat.py +108 -0
  16. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/connections.py +135 -5
  17. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/constants.py +2 -0
  18. pyvastbase-0.2.9/core/dataframe_schema.py +158 -0
  19. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/exceptions.py +231 -187
  20. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/mutation_result.py +55 -5
  21. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/schema.py +226 -21
  22. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/vector_types.py +11 -0
  23. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/executor/async_impl.py +22 -2
  24. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/index/index_builder.py +228 -44
  25. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/__init__.py +2 -0
  26. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/ddl.py +32 -0
  27. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/index.py +27 -2
  28. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/result.py +3 -3
  29. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/pyvastbase.egg-info/SOURCES.txt +29 -2
  30. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/search/search_builder.py +693 -689
  31. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async.py +96 -0
  32. pyvastbase-0.2.9/tests/test_async_alter_field_collection_stats_compat.py +329 -0
  33. pyvastbase-0.2.9/tests/test_async_collection_search_iterator.py +81 -0
  34. pyvastbase-0.2.9/tests/test_async_mirrors_compat.py +728 -0
  35. pyvastbase-0.2.9/tests/test_async_vastbase_client_compat.py +784 -0
  36. pyvastbase-0.2.9/tests/test_client_aliases_factories_compat.py +251 -0
  37. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_client_compat.py +66 -0
  38. pyvastbase-0.2.9/tests/test_client_missing_methods_compat.py +338 -0
  39. pyvastbase-0.2.9/tests/test_client_partition_names_compat.py +327 -0
  40. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection.py +96 -0
  41. pyvastbase-0.2.9/tests/test_collection_construct_from_dataframe.py +353 -0
  42. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_core.py +19 -0
  43. pyvastbase-0.2.9/tests/test_collection_orm_delegates_compat.py +487 -0
  44. pyvastbase-0.2.9/tests/test_collection_schema_construct_from_dict.py +256 -0
  45. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_connections.py +49 -0
  46. pyvastbase-0.2.9/tests/test_connections_compat_shims.py +405 -0
  47. pyvastbase-0.2.9/tests/test_connections_get_connection_addr_compat.py +91 -0
  48. pyvastbase-0.2.9/tests/test_create_index_compat.py +506 -0
  49. pyvastbase-0.2.9/tests/test_datatype_value_bridge.py +168 -0
  50. pyvastbase-0.2.9/tests/test_drop_index_compat.py +161 -0
  51. pyvastbase-0.2.9/tests/test_exception_aliases.py +205 -0
  52. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_index_builder.py +119 -0
  53. pyvastbase-0.2.9/tests/test_init_exports_compat.py +266 -0
  54. pyvastbase-0.2.9/tests/test_insert_upsert_compat.py +180 -0
  55. pyvastbase-0.2.9/tests/test_iterator_next_method.py +241 -0
  56. pyvastbase-0.2.9/tests/test_list_indexes_field_filter_compat.py +295 -0
  57. pyvastbase-0.2.9/tests/test_migration_doc_claims.py +783 -0
  58. pyvastbase-0.2.9/tests/test_mutation_result.py +229 -0
  59. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_operations.py +24 -0
  60. pyvastbase-0.2.9/tests/test_schema_alignment.py +612 -0
  61. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_search_builder.py +19 -0
  62. pyvastbase-0.2.9/tests/test_search_iterator_round_decimal.py +218 -0
  63. pyvastbase-0.2.9/tests/test_search_query_delete_dualname.py +610 -0
  64. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utility_integration.py +13 -4
  65. pyvastbase-0.2.9/tests/test_vastbase_client.py +283 -0
  66. pyvastbase-0.2.9/tests/test_vector_operator_mapping.py +42 -0
  67. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_with_executor.py +12 -9
  68. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utility.py +389 -57
  69. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/__init__.py +4 -0
  70. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/result_utils.py +46 -0
  71. pyvastbase-0.2.8/CLAUDE.md +0 -136
  72. pyvastbase-0.2.8/CONTEXT.md +0 -95
  73. pyvastbase-0.2.8/tests/test_exception_aliases.py +0 -51
  74. pyvastbase-0.2.8/tests/test_mutation_result.py +0 -128
  75. pyvastbase-0.2.8/tests/test_schema_alignment.py +0 -171
  76. pyvastbase-0.2.8/tests/test_vastbase_client.py +0 -123
  77. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/search_builder.py +0 -0
  78. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/__init__.py +0 -0
  79. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/executor.py +0 -0
  80. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/search_result.py +0 -0
  81. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/executor/__init__.py +0 -0
  82. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/executor/sync.py +0 -0
  83. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/index/__init__.py +0 -0
  84. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/admin.py +0 -0
  85. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/delete.py +0 -0
  86. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/insert.py +0 -0
  87. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/query.py +0 -0
  88. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/schema_reflect.py +0 -0
  89. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/search.py +0 -0
  90. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/search_result.py +0 -0
  91. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/upsert.py +0 -0
  92. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/orm/__init__.py +0 -0
  93. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/orm/base.py +0 -0
  94. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/orm/fields.py +0 -0
  95. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/pyproject.toml +0 -0
  96. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/search/__init__.py +0 -0
  97. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/setup.cfg +0 -0
  98. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/test_conn.py +0 -0
  99. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/__init__.py +0 -0
  100. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/conftest.py +0 -0
  101. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/helpers.py +0 -0
  102. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_alignment.py +0 -0
  103. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_executor.py +0 -0
  104. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_integration.py +0 -0
  105. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_with_executor.py +0 -0
  106. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_adapter.py +0 -0
  107. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_integration.py +0 -0
  108. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_properties.py +0 -0
  109. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_signatures.py +0 -0
  110. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_connection_alignment.py +0 -0
  111. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_connection_provider.py +0 -0
  112. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_constants.py +0 -0
  113. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_datatype_compat.py +0 -0
  114. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_datatype_intenum.py +0 -0
  115. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_datatype_mapping.py +0 -0
  116. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_exceptions.py +0 -0
  117. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_executor.py +0 -0
  118. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_exports.py +0 -0
  119. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_hybrid_search.py +0 -0
  120. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_integration.py +0 -0
  121. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_operations_compat.py +0 -0
  122. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_orm.py +0 -0
  123. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_packaging.py +0 -0
  124. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_parameter_unification.py +0 -0
  125. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_pool_del_repro.py +0 -0
  126. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_return_type_rename.py +0 -0
  127. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_schema.py +0 -0
  128. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_type_alignment.py +0 -0
  129. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utility.py +0 -0
  130. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utility_compat.py +0 -0
  131. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utils.py +0 -0
  132. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_vector_types.py +0 -0
  133. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/distance_utils.py +0 -0
  134. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/filter_utils.py +0 -0
  135. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/index_utils.py +0 -0
  136. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/sql_utils.py +0 -0
  137. {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/vector_utils.py +0 -0
@@ -18,5 +18,10 @@ prune .ruff_cache
18
18
  prune .coverage
19
19
  prune .claude
20
20
  prune .scratch
21
+ # Internal dev-convention docs — not shipped in the published package
22
+ exclude CLAUDE.md
23
+ exclude CONTEXT.md
24
+ prune docs/adr
25
+ prune docs/agents
21
26
  global-exclude *.pyc
22
27
  global-exclude __pycache__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyvastbase
3
- Version: 0.2.8
3
+ Version: 0.2.9
4
4
  Summary: Python SDK for Vastbase V3 (PyMilvus-style API)
5
5
  Author-email: "zhangzhijie(字节)" <zhangzj@vastdata.com.cn>
6
6
  License-Expression: MIT
@@ -72,7 +72,10 @@ results = client.search("my_vectors", data=[0.15] * 128, limit=5)
72
72
  db_info = client.describe_database("vastbase")
73
73
  print(db_info) # {'name': 'vastbase', 'table_count': 5, ...}
74
74
 
75
- results = client.hybrid_search("my_vectors", data=[0.15] * 128, filter="price < 1000", limit=20)
75
+ # 多路向量召回 + 重排序(pymilvus 兼容)
76
+ from pyvastbase import AnnSearchRequest, RRFRanker
77
+ req = AnnSearchRequest(data=[0.15] * 128, anns_field="embedding", limit=20)
78
+ results = client.hybrid_search("my_vectors", reqs=[req], ranker=RRFRanker(), limit=20)
76
79
  ```
77
80
 
78
81
  ### 方式二:传统 Collection 风格
@@ -238,12 +241,12 @@ results = bm25_search_highlight(
238
241
  # 返回: ['<b>向量</b>数据库是AI应用的核心', ...]
239
242
  ```
240
243
 
241
- ## 混合搜索
244
+ ## 混合 ANN 搜索(hybrid_ann_search)
242
245
 
243
- 将向量相似度与标量字段过滤结合,实现灵活的复合查询:
246
+ Vastbase 原生单向量相似度 + 标量字段过滤(HybridANN 索引),实现灵活的复合查询:
244
247
 
245
248
  ```python
246
- results = col.hybrid_search(
249
+ results = col.hybrid_ann_search(
247
250
  data=[0.1] * 128,
248
251
  filter={
249
252
  "$and": [
@@ -273,7 +276,7 @@ for buf in bulkbuffer_inspect():
273
276
 
274
277
  ## MutationResult
275
278
 
276
- 所有变更操作返回 `MutationResultWrapper`,同时支持向后兼容的列表访问和完整的 `MutationResult` 接口:
279
+ 所有变更操作返回 `MutationResult`,支持列表访问和结构化字段(`MutationResultWrapper` 为废弃别名,访问会触发 `DeprecationWarning`,但仍可用):
277
280
 
278
281
  ```python
279
282
  result = col.insert([{"id": 1, "embedding": [0.1] * 128, "text": "hello"}])
@@ -389,7 +392,7 @@ except ConnectionError:
389
392
  | [ORM](docs/api-reference_zh.md#orm) | Entity, Model, Field, VectorField |
390
393
  | [Exceptions](docs/api-reference_zh.md#exceptions) | VastbaseException 继承层次 |
391
394
  | [Async API](docs/api-reference_zh.md#async-api) | AsyncCollection, AsyncConnections |
392
- | [MutationResult](docs/api-reference_zh.md#mutationresult) | MutationResult, MutationResultWrapper |
395
+ | [MutationResult](docs/api-reference_zh.md#mutationresult) | MutationResult(MutationResultWrapper 为废弃别名) |
393
396
 
394
397
  ## 快速 API 参考
395
398
 
@@ -443,12 +446,13 @@ col.create()
443
446
  col.drop()
444
447
  col.exists()
445
448
  col.truncate()
446
- col.insert(data, normalize_vectors=False) # -> MutationResultWrapper
449
+ col.insert(data, normalize_vectors=False) # -> MutationResult
447
450
  col.batch_insert(data, batch_size=100)
448
451
  col.delete(expr="id > 10") | delete(pks=[1, 2, 3])
449
452
  col.upsert(data)
450
453
  col.search(data, anns_field, param, limit, expr, output_fields)
451
- col.hybrid_search(data, anns_field, param, limit, filter, output_fields)
454
+ col.hybrid_search(reqs, rerank, limit, output_fields)
455
+ col.hybrid_ann_search(data, anns_field, param, limit, filter, output_fields)
452
456
  col.query(expr="id < 100", limit=10, offset=0, batch_size=None)
453
457
  col.get(ids=[1, 2, 3])
454
458
  col.num_entities / col.is_empty
@@ -500,7 +504,7 @@ get_config() # -> {"default_connection": "default", "timeout": 30.0, ...}
500
504
  以下功能已与 pymilvus API 对齐:
501
505
 
502
506
  - **DataType IntEnum** — 所有标量和向量类型使用 IntEnum,与 pymilvus 枚举值兼容
503
- - **MutationResult** — `insert`/`upsert`/`delete` 返回 `MutationResultWrapper`,同时支持列表访问和结构化字段(`insert_count`, `delete_count`, `primary_keys`)
507
+ - **MutationResult** — `insert`/`upsert`/`delete` 返回 `MutationResult`,支持列表访问和结构化字段(`insert_count`, `delete_count`, `primary_keys`);`MutationResultWrapper` 为废弃别名
504
508
  - **SearchResult** — 搜索结果结构与 pymilvus 一致,支持 `result.id`, `result.distance`, `result.data`
505
509
  - **connect(uri)** — 支持通过 URI 连接字符串连接(`postgresql://user:pass@host:port/db`)
506
510
  - **hybrid_search** — SDK 层多路向量召回 + RRF/WeightedRRF/WeightedRanker 重排序(pymilvus 兼容 API)
@@ -565,7 +569,7 @@ pyvastbase/
565
569
  │ ├── constants.py # IndexType, DistanceType, 版本常量, 算子映射
566
570
  │ ├── connections.py # ConnectionConfig, VastbaseConnection (含版本缓存)
567
571
  │ ├── exceptions.py # 19 个异常类
568
- │ ├── mutation_result.py # MutationResult, MutationResultWrapper
572
+ │ ├── mutation_result.py # MutationResult(含 MutationResultWrapper 废弃别名)
569
573
  │ └── schema.py # FieldSchema, CollectionSchema, DataType
570
574
  ├── collection.py # Collection 类,完整的 CRUD、搜索、索引操作
571
575
  ├── utility.py # 50+ 工具函数:用户/数据库/权限, flush/compact, 3.0.9+特性
@@ -576,7 +580,7 @@ pyvastbase/
576
580
  ├── utils/ # SQL 生成, 向量/距离/过滤/结果工具
577
581
  ├── orm/ # Entity/Model ORM 层 (Django 风格装饰器)
578
582
  ├── async_impl/ # AsyncCollection 等异步对应实现
579
- ├── tests/ # 1100+ 测试覆盖所有模块
583
+ ├── tests/ # 1700+ 测试覆盖所有模块
580
584
  └── docs/
581
585
  ├── api-reference.md # 完整 API 参考(英文)
582
586
  └── api-reference_zh.md # 完整 API 参考(简体中文)
@@ -34,7 +34,10 @@ results = client.search("my_vectors", data=[0.15] * 128, limit=5)
34
34
  db_info = client.describe_database("vastbase")
35
35
  print(db_info) # {'name': 'vastbase', 'table_count': 5, ...}
36
36
 
37
- results = client.hybrid_search("my_vectors", data=[0.15] * 128, filter="price < 1000", limit=20)
37
+ # 多路向量召回 + 重排序(pymilvus 兼容)
38
+ from pyvastbase import AnnSearchRequest, RRFRanker
39
+ req = AnnSearchRequest(data=[0.15] * 128, anns_field="embedding", limit=20)
40
+ results = client.hybrid_search("my_vectors", reqs=[req], ranker=RRFRanker(), limit=20)
38
41
  ```
39
42
 
40
43
  ### 方式二:传统 Collection 风格
@@ -200,12 +203,12 @@ results = bm25_search_highlight(
200
203
  # 返回: ['<b>向量</b>数据库是AI应用的核心', ...]
201
204
  ```
202
205
 
203
- ## 混合搜索
206
+ ## 混合 ANN 搜索(hybrid_ann_search)
204
207
 
205
- 将向量相似度与标量字段过滤结合,实现灵活的复合查询:
208
+ Vastbase 原生单向量相似度 + 标量字段过滤(HybridANN 索引),实现灵活的复合查询:
206
209
 
207
210
  ```python
208
- results = col.hybrid_search(
211
+ results = col.hybrid_ann_search(
209
212
  data=[0.1] * 128,
210
213
  filter={
211
214
  "$and": [
@@ -235,7 +238,7 @@ for buf in bulkbuffer_inspect():
235
238
 
236
239
  ## MutationResult
237
240
 
238
- 所有变更操作返回 `MutationResultWrapper`,同时支持向后兼容的列表访问和完整的 `MutationResult` 接口:
241
+ 所有变更操作返回 `MutationResult`,支持列表访问和结构化字段(`MutationResultWrapper` 为废弃别名,访问会触发 `DeprecationWarning`,但仍可用):
239
242
 
240
243
  ```python
241
244
  result = col.insert([{"id": 1, "embedding": [0.1] * 128, "text": "hello"}])
@@ -351,7 +354,7 @@ except ConnectionError:
351
354
  | [ORM](docs/api-reference_zh.md#orm) | Entity, Model, Field, VectorField |
352
355
  | [Exceptions](docs/api-reference_zh.md#exceptions) | VastbaseException 继承层次 |
353
356
  | [Async API](docs/api-reference_zh.md#async-api) | AsyncCollection, AsyncConnections |
354
- | [MutationResult](docs/api-reference_zh.md#mutationresult) | MutationResult, MutationResultWrapper |
357
+ | [MutationResult](docs/api-reference_zh.md#mutationresult) | MutationResult(MutationResultWrapper 为废弃别名) |
355
358
 
356
359
  ## 快速 API 参考
357
360
 
@@ -405,12 +408,13 @@ col.create()
405
408
  col.drop()
406
409
  col.exists()
407
410
  col.truncate()
408
- col.insert(data, normalize_vectors=False) # -> MutationResultWrapper
411
+ col.insert(data, normalize_vectors=False) # -> MutationResult
409
412
  col.batch_insert(data, batch_size=100)
410
413
  col.delete(expr="id > 10") | delete(pks=[1, 2, 3])
411
414
  col.upsert(data)
412
415
  col.search(data, anns_field, param, limit, expr, output_fields)
413
- col.hybrid_search(data, anns_field, param, limit, filter, output_fields)
416
+ col.hybrid_search(reqs, rerank, limit, output_fields)
417
+ col.hybrid_ann_search(data, anns_field, param, limit, filter, output_fields)
414
418
  col.query(expr="id < 100", limit=10, offset=0, batch_size=None)
415
419
  col.get(ids=[1, 2, 3])
416
420
  col.num_entities / col.is_empty
@@ -462,7 +466,7 @@ get_config() # -> {"default_connection": "default", "timeout": 30.0, ...}
462
466
  以下功能已与 pymilvus API 对齐:
463
467
 
464
468
  - **DataType IntEnum** — 所有标量和向量类型使用 IntEnum,与 pymilvus 枚举值兼容
465
- - **MutationResult** — `insert`/`upsert`/`delete` 返回 `MutationResultWrapper`,同时支持列表访问和结构化字段(`insert_count`, `delete_count`, `primary_keys`)
469
+ - **MutationResult** — `insert`/`upsert`/`delete` 返回 `MutationResult`,支持列表访问和结构化字段(`insert_count`, `delete_count`, `primary_keys`);`MutationResultWrapper` 为废弃别名
466
470
  - **SearchResult** — 搜索结果结构与 pymilvus 一致,支持 `result.id`, `result.distance`, `result.data`
467
471
  - **connect(uri)** — 支持通过 URI 连接字符串连接(`postgresql://user:pass@host:port/db`)
468
472
  - **hybrid_search** — SDK 层多路向量召回 + RRF/WeightedRRF/WeightedRanker 重排序(pymilvus 兼容 API)
@@ -527,7 +531,7 @@ pyvastbase/
527
531
  │ ├── constants.py # IndexType, DistanceType, 版本常量, 算子映射
528
532
  │ ├── connections.py # ConnectionConfig, VastbaseConnection (含版本缓存)
529
533
  │ ├── exceptions.py # 19 个异常类
530
- │ ├── mutation_result.py # MutationResult, MutationResultWrapper
534
+ │ ├── mutation_result.py # MutationResult(含 MutationResultWrapper 废弃别名)
531
535
  │ └── schema.py # FieldSchema, CollectionSchema, DataType
532
536
  ├── collection.py # Collection 类,完整的 CRUD、搜索、索引操作
533
537
  ├── utility.py # 50+ 工具函数:用户/数据库/权限, flush/compact, 3.0.9+特性
@@ -538,7 +542,7 @@ pyvastbase/
538
542
  ├── utils/ # SQL 生成, 向量/距离/过滤/结果工具
539
543
  ├── orm/ # Entity/Model ORM 层 (Django 风格装饰器)
540
544
  ├── async_impl/ # AsyncCollection 等异步对应实现
541
- ├── tests/ # 1100+ 测试覆盖所有模块
545
+ ├── tests/ # 1700+ 测试覆盖所有模块
542
546
  └── docs/
543
547
  ├── api-reference.md # 完整 API 参考(英文)
544
548
  └── api-reference_zh.md # 完整 API 参考(简体中文)
@@ -30,7 +30,10 @@ results = client.search("my_vectors", data=[0.15] * 128, limit=5)
30
30
  db_info = client.describe_database("vastbase")
31
31
  print(db_info) # {'name': 'vastbase', 'table_count': 5, ...}
32
32
 
33
- results = client.hybrid_search("my_vectors", data=[0.15] * 128, filter="price < 1000", limit=20)
33
+ # Multi-way vector recall + reranking (pymilvus-compatible)
34
+ from pyvastbase import AnnSearchRequest, RRFRanker
35
+ req = AnnSearchRequest(data=[0.15] * 128, anns_field="embedding", limit=20)
36
+ results = client.hybrid_search("my_vectors", reqs=[req], ranker=RRFRanker(), limit=20)
34
37
  ```
35
38
 
36
39
  ### Traditional Collection-based
@@ -194,12 +197,12 @@ results = bm25_search_highlight(
194
197
  # Returns: ['<b>向量</b>数据库是AI应用的核心', ...]
195
198
  ```
196
199
 
197
- ## Hybrid Search
200
+ ## Hybrid ANN Search (hybrid_ann_search)
198
201
 
199
- Combine vector similarity with scalar field filtering for flexible queries:
202
+ Vastbase-native single-vector similarity + scalar field filtering (HybridANN index) for flexible queries:
200
203
 
201
204
  ```python
202
- results = col.hybrid_search(
205
+ results = col.hybrid_ann_search(
203
206
  data=[0.1] * 128,
204
207
  filter={
205
208
  "$and": [
@@ -229,7 +232,7 @@ for buf in bulkbuffer_inspect():
229
232
 
230
233
  ## MutationResult
231
234
 
232
- All mutation operations return `MutationResultWrapper` which provides both backward-compatible list access and the full `MutationResult` interface:
235
+ All mutation operations return a `MutationResult` providing both list access and structured fields (`MutationResultWrapper` is a deprecated alias that still works but emits a `DeprecationWarning`):
233
236
 
234
237
  ```python
235
238
  result = col.insert([{"id": 1, "embedding": [0.1] * 128, "text": "hello"}])
@@ -345,7 +348,7 @@ Full API reference: [docs/api-reference.md](docs/api-reference.md)
345
348
  | [ORM](docs/api-reference.md#orm) | Entity, Model, Field, VectorField |
346
349
  | [Exceptions](docs/api-reference.md#exceptions) | VastbaseException hierarchy |
347
350
  | [Async API](docs/api-reference.md#async-api) | AsyncCollection, AsyncConnections |
348
- | [MutationResult](docs/api-reference.md#mutationresult) | MutationResult, MutationResultWrapper |
351
+ | [MutationResult](docs/api-reference.md#mutationresult) | MutationResult (MutationResultWrapper is a deprecated alias) |
349
352
 
350
353
  ## Quick API Reference
351
354
 
@@ -399,12 +402,13 @@ col.create()
399
402
  col.drop()
400
403
  col.exists()
401
404
  col.truncate()
402
- col.insert(data, normalize_vectors=False) # -> MutationResultWrapper
405
+ col.insert(data, normalize_vectors=False) # -> MutationResult
403
406
  col.batch_insert(data, batch_size=100)
404
407
  col.delete(expr="id > 10") | delete(pks=[1, 2, 3])
405
408
  col.upsert(data)
406
409
  col.search(data, anns_field, param, limit, expr, output_fields)
407
- col.hybrid_search(data, anns_field, param, limit, filter, output_fields)
410
+ col.hybrid_search(reqs, rerank, limit, output_fields)
411
+ col.hybrid_ann_search(data, anns_field, param, limit, filter, output_fields)
408
412
  col.query(expr="id < 100", limit=10, offset=0, batch_size=None)
409
413
  col.get(ids=[1, 2, 3])
410
414
  col.num_entities / col.is_empty
@@ -454,7 +458,7 @@ get_config() # -> {"default_connection": "default", "timeout": 30.0, ...}
454
458
  ### Aligned (matches pymilvus API)
455
459
 
456
460
  - **DataType IntEnum** -- Numeric values match pymilvus (e.g. `FLOAT_VECTOR=16`, `INT64=6`); PG-only types use values >= 100
457
- - **MutationResult** -- Same `.insert_count`, `.delete_count`, `.upsert_count`, `.primary_keys` fields; `MutationResultWrapper` adds backward-compatible list access
461
+ - **MutationResult** -- Same `.insert_count`, `.delete_count`, `.upsert_count`, `.primary_keys` fields with backward-compatible list access (`MutationResultWrapper` is a deprecated alias)
458
462
  - **SearchResult** -- Same `.id`, `.distance`, `.entity` attribute pattern on result hits
459
463
  - **connect(uri)** -- Accepts PostgreSQL connection URI strings, same parameter pattern as pymilvus `connect()`
460
464
  - **hybrid_search** -- SDK-layer multi-way vector recall with RRF/WeightedRRF/WeightedRanker reranking (pymilvus-compatible API; N SQL round trips vs Milvus single gRPC call)
@@ -523,7 +527,7 @@ pyvastbase/
523
527
  │ ├── constants.py # IndexType, DistanceType, version constants, operator mapping
524
528
  │ ├── connections.py # ConnectionConfig, VastbaseConnection (with version cache)
525
529
  │ ├── exceptions.py # 19 exception classes
526
- │ ├── mutation_result.py # MutationResult, MutationResultWrapper
530
+ │ ├── mutation_result.py # MutationResult (incl. MutationResultWrapper deprecated alias)
527
531
  │ └── schema.py # FieldSchema, CollectionSchema, DataType
528
532
  ├── collection.py # Collection class with full CRUD, search, index ops
529
533
  ├── utility.py # 50+ utility functions: user/DB/privilege, flush/compact, 3.0.9+
@@ -534,7 +538,7 @@ pyvastbase/
534
538
  ├── utils/ # SQL generation, vector/distance/filter/result utilities
535
539
  ├── orm/ # Entity/Model ORM layer (Django-style decorators)
536
540
  ├── async_impl/ # AsyncCollection, async counterparts
537
- ├── tests/ # 1100+ tests (unit + integration)
541
+ ├── tests/ # 1700+ tests (unit + integration)
538
542
  └── docs/
539
543
  └── api-reference.md # Full API reference in PyMilvus format
540
544
  ```
@@ -542,7 +546,7 @@ pyvastbase/
542
546
  ## Requirements
543
547
 
544
548
  - Python >= 3.9
545
- - psycopg[binary] >= 3.1
549
+ - psycopg[binary] >= 3.2
546
550
  - Vastbase V3 / VexDB Enterprise Edition / Vastbase G100 V2.2 (3.0.9+ for new vector types and features)
547
551
 
548
552
  ## License