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.
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/MANIFEST.in +5 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/PKG-INFO +16 -12
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/README.md +15 -11
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/README_en.md +16 -12
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/__init__.py +435 -352
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/__init__.py +43 -1
- pyvastbase-0.2.9/async_impl/client.py +855 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/collection.py +467 -38
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/connections.py +56 -4
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/index_builder.py +26 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/utility.py +610 -4
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/client.py +328 -29
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/collection.py +425 -22
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/collection_core.py +11 -3
- pyvastbase-0.2.9/core/compat.py +108 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/connections.py +135 -5
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/constants.py +2 -0
- pyvastbase-0.2.9/core/dataframe_schema.py +158 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/exceptions.py +231 -187
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/mutation_result.py +55 -5
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/schema.py +226 -21
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/vector_types.py +11 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/executor/async_impl.py +22 -2
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/index/index_builder.py +228 -44
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/__init__.py +2 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/ddl.py +32 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/index.py +27 -2
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/result.py +3 -3
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/pyvastbase.egg-info/SOURCES.txt +29 -2
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/search/search_builder.py +693 -689
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async.py +96 -0
- pyvastbase-0.2.9/tests/test_async_alter_field_collection_stats_compat.py +329 -0
- pyvastbase-0.2.9/tests/test_async_collection_search_iterator.py +81 -0
- pyvastbase-0.2.9/tests/test_async_mirrors_compat.py +728 -0
- pyvastbase-0.2.9/tests/test_async_vastbase_client_compat.py +784 -0
- pyvastbase-0.2.9/tests/test_client_aliases_factories_compat.py +251 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_client_compat.py +66 -0
- pyvastbase-0.2.9/tests/test_client_missing_methods_compat.py +338 -0
- pyvastbase-0.2.9/tests/test_client_partition_names_compat.py +327 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection.py +96 -0
- pyvastbase-0.2.9/tests/test_collection_construct_from_dataframe.py +353 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_core.py +19 -0
- pyvastbase-0.2.9/tests/test_collection_orm_delegates_compat.py +487 -0
- pyvastbase-0.2.9/tests/test_collection_schema_construct_from_dict.py +256 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_connections.py +49 -0
- pyvastbase-0.2.9/tests/test_connections_compat_shims.py +405 -0
- pyvastbase-0.2.9/tests/test_connections_get_connection_addr_compat.py +91 -0
- pyvastbase-0.2.9/tests/test_create_index_compat.py +506 -0
- pyvastbase-0.2.9/tests/test_datatype_value_bridge.py +168 -0
- pyvastbase-0.2.9/tests/test_drop_index_compat.py +161 -0
- pyvastbase-0.2.9/tests/test_exception_aliases.py +205 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_index_builder.py +119 -0
- pyvastbase-0.2.9/tests/test_init_exports_compat.py +266 -0
- pyvastbase-0.2.9/tests/test_insert_upsert_compat.py +180 -0
- pyvastbase-0.2.9/tests/test_iterator_next_method.py +241 -0
- pyvastbase-0.2.9/tests/test_list_indexes_field_filter_compat.py +295 -0
- pyvastbase-0.2.9/tests/test_migration_doc_claims.py +783 -0
- pyvastbase-0.2.9/tests/test_mutation_result.py +229 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_operations.py +24 -0
- pyvastbase-0.2.9/tests/test_schema_alignment.py +612 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_search_builder.py +19 -0
- pyvastbase-0.2.9/tests/test_search_iterator_round_decimal.py +218 -0
- pyvastbase-0.2.9/tests/test_search_query_delete_dualname.py +610 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utility_integration.py +13 -4
- pyvastbase-0.2.9/tests/test_vastbase_client.py +283 -0
- pyvastbase-0.2.9/tests/test_vector_operator_mapping.py +42 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_with_executor.py +12 -9
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utility.py +389 -57
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/__init__.py +4 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/result_utils.py +46 -0
- pyvastbase-0.2.8/CLAUDE.md +0 -136
- pyvastbase-0.2.8/CONTEXT.md +0 -95
- pyvastbase-0.2.8/tests/test_exception_aliases.py +0 -51
- pyvastbase-0.2.8/tests/test_mutation_result.py +0 -128
- pyvastbase-0.2.8/tests/test_schema_alignment.py +0 -171
- pyvastbase-0.2.8/tests/test_vastbase_client.py +0 -123
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/async_impl/search_builder.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/__init__.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/executor.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/core/search_result.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/executor/__init__.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/executor/sync.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/index/__init__.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/admin.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/delete.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/insert.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/query.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/schema_reflect.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/search.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/search_result.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/operations/upsert.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/orm/__init__.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/orm/base.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/orm/fields.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/pyproject.toml +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/search/__init__.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/setup.cfg +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/test_conn.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/__init__.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/conftest.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/helpers.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_alignment.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_executor.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_integration.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_async_with_executor.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_adapter.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_integration.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_properties.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_collection_signatures.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_connection_alignment.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_connection_provider.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_constants.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_datatype_compat.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_datatype_intenum.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_datatype_mapping.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_exceptions.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_executor.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_exports.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_hybrid_search.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_integration.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_operations_compat.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_orm.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_packaging.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_parameter_unification.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_pool_del_repro.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_return_type_rename.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_schema.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_type_alignment.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utility.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utility_compat.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_utils.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/tests/test_vector_types.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/distance_utils.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/filter_utils.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/index_utils.py +0 -0
- {pyvastbase-0.2.8 → pyvastbase-0.2.9}/utils/sql_utils.py +0 -0
- {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.
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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) # ->
|
|
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(
|
|
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` 返回 `
|
|
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
|
|
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/ #
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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) # ->
|
|
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(
|
|
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` 返回 `
|
|
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
|
|
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/ #
|
|
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
|
-
|
|
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
|
-
|
|
202
|
+
Vastbase-native single-vector similarity + scalar field filtering (HybridANN index) for flexible queries:
|
|
200
203
|
|
|
201
204
|
```python
|
|
202
|
-
results = col.
|
|
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 `
|
|
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
|
|
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) # ->
|
|
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(
|
|
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
|
|
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
|
|
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/ #
|
|
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.
|
|
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
|