client/v3.0.0

milvus-io/milvusclient/v3.0.0Sep 18, 2026by congqixia

Upgrading?

AI Summary

This is the stable release for Milvus 3.0, introducing a new Go module path and significant architectural changes. The release decouples the client from server-side packages, adds collection snapshot management, and expands search capabilities with aggregation, function scoring, and external collection support.

Key Highlights

  • Migrates the Go module to `github.com/milvus-io/milvus/client/v3`, decoupling the standalone client from server-side `pkg` modules.
  • Adds collection snapshot management and asynchronous restore workflows, including external snapshot export and restore.
  • Introduces advanced search features such as aggregation, search by primary-key IDs, query ordering, and search-time FunctionScore.
  • Adds support for TEXT fields and nullable StructArray in the Go SDK.

Breaking Changes

  • Module path updated from `github.com/milvus-io/milvus/client/v2` to `github.com/milvus-io/milvus/client/v3`.
  • Proto types updated from `milvus-proto/go-api/v2` to `milvus-proto/go-api/v3`.
  • Go version requirement is now Go 1.24.9 or later.
  • Client telemetry is enabled by default; set `ClientConfig.TelemetryConfig.Enabled` to `false` to disable.
  • `ExportSnapshot` return type changed from a snapshot path string to an export job ID (`int64`).

New Features

  • Collection snapshots: APIs to create, drop, list, and describe collection-scoped snapshots with asynchronous restore capabilities.
  • External snapshot export and restore: Durable asynchronous export jobs and state polling for snapshot bundles.
  • External collections: Schema builders for external data sources with refresh capabilities via `RefreshExternalCollection`.
  • Search aggregation: Bucket builders supporting multi-field keys, nested aggregations, top hits, and metric functions.
  • Search by primary-key IDs: `NewSearchByIDsOption` and `AnnRequest.WithIDs` for using existing entities as vector-search inputs.
  • Namespace-scoped operations: Added `WithNamespace` support to Search, Hybrid Search, Query, iterators, Insert, Upsert, and Delete.
  • Query ordering: `QueryOption.WithOrderByFields` accepting expressions for sorting results.
  • Search-time FunctionScore: `SearchOption.WithFunctionScore` carrying scoring Functions with `boost_mode` / `function_mode`.
  • Weighted RRF reranking: `NewRRFReranker().WithWeights` for applying per-ANN-request reciprocal-rank coefficients.
  • Membership filters: Client-side builders for Bloom Filter (MBF1) and Roaring Bitmap blobs.
  • Client telemetry: Configurable collection of request counts, errors, latency metrics, and server heartbeats.
  • Structured RPC errors: Public `RPCError`, `ErrorCode`, and `IsRetryableError` for error inspection.
  • Nullable StructArray support: End-to-end NULL versus empty-array semantics for inserts, queries, and searches.
  • TEXT fields: `FieldTypeText` and column-based insert options for variable-length strings.
  • Drop collection fields: `DropCollectionField`, `AddFunctionField`, and `DropFunctionField` routed through `AlterCollectionSchema`.
  • FileResource APIs: `AddFileResource`, `ListFileResources`, and `RemoveFileResource` for managing remote files.
  • RBAC descriptions: Added user and role descriptions with updates via `AlterRole`.
  • Import two-phase commit: REST wrappers for committing or aborting bulk-import jobs.
  • Message salvage API: High-level `Client.DumpMessages` streaming wrapper for replication and recovery.
  • MinHash: `FunctionTypeMinHash` support in the Go SDK function API.
  • Index types: Added missing index types including HNSW SQ/PQ/PRQ, AISAQ, NGRAM, and FM.
  • Request ID correlation: Opt-in `WithClientRequestID` to correlate requests with server logs.

Full Release Notes

# client/v3.0.0

> This is a stable release for Milvus 3.0. It is not guaranteed to be compatible with Milvus 2.6 servers.

### Highlights

- Migrates the Go module to `github.com/milvus-io/milvus/client/v3`.
- Decouples the standalone client from Milvus server-side `pkg` modules, substantially reducing server-only transitive dependencies.
- Adds collection snapshot management and asynchronous restore workflows, including external snapshot export and restore.
- Adds read-only external collections with manual refresh support.
- Adds search aggregation, search by primary-key IDs, query ordering, and namespace-scoped operations.
- Adds client-side telemetry and structured RPC error inspection.
- Adds search-time FunctionScore (scoring functions with `boost_mode` / `function_mode`) and weighted RRF reranking.
- Adds drop-field / schema-alteration support through `AlterCollectionSchema`.
- Adds TEXT field support and nullable StructArray (scalar and vector) support in the Go SDK.
- Adds client-built membership filter blobs (Bloom/SBBF and Roaring) for `membership_match` expressions.
- Adds FileResource (remote file) management APIs.
- Adds the missing index types (HNSW SQ/PQ/PRQ, AISAQ, NGRAM, FM) and preserves generic index types.

### Breaking Changes and Migration

- Module path: Update all imports from:

  ```
  github.com/milvus-io/milvus/client/v2
  ```

  to:

  ```
  github.com/milvus-io/milvus/client/v3
  ```

- Proto types: Applications directly using generated Milvus messages must migrate from `milvus-proto/go-api/v2` to `milvus-proto/go-api/v3`. Although many high-level builders retain familiar APIs, v2 and v3 protobuf types are not interchangeable.

- Installation:

  ```
  go get github.com/milvus-io/milvus/client/v3@v3.0.0
  ```

- Go version: The module's `go` directive is Go 1.24.9. The client README recommends Go 1.24.12 or later.
- Telemetry behavior: Client telemetry is enabled by default. Set `ClientConfig.TelemetryConfig.Enabled` to `false` to disable heartbeat and metrics reporting.
- `ExportSnapshot` return type changed from a snapshot path string to a `int64` export job ID. Use the new `GetExportSnapshotState` to poll job progress. (`#52476`)
- SDK version is now the GA SemVer `3.0.0` (was `3.0.0-beta`).

### New Features

- Collection snapshots: Added APIs to create, drop, list, and describe collection-scoped snapshots. Snapshots can be restored asynchronously to new collections, with APIs for querying and listing restore jobs. Snapshot data can also be pinned and unpinned to control garbage collection. (#44361, #48143)
- External snapshot export and restore: `ExportSnapshot` now starts a durable asynchronous export job and returns its job ID, `GetExportSnapshotState` and `GetRestoreSnapshotState` expose job progress, and `RestoreExternalSnapshot` restores referenced or exported snapshot bundles. (#52476)
- External collections: Added schema builders for external data sources and external-field mappings:
  - `Schema.WithExternalSource`
  - `Schema.WithExternalSpec`
  - `Field.WithExternalField`

  External collections can be searched and queried using standard client APIs and refreshed through `RefreshExternalCollection`, `GetRefreshExternalCollectionProgress`, and `ListRefreshExternalCollectionJobs`. (#46886, #47492, #49531)
- Search aggregation: Added bucket aggregation builders supporting multi-field keys, nested aggregations, top hits, ordering, and avg, sum, count, min, and max metrics. Results are returned through `ResultSet.AggregationBuckets`. (#50448)
- Search by primary-key IDs: Added `NewSearchByIDsOption` and `AnnRequest.WithIDs` for using existing entities as vector-search inputs. Int64 and VarChar primary keys are supported. (#47633)
- Namespace-scoped operations: Added `WithNamespace` support to Search, Hybrid Search, Query, iterators, Insert, Upsert, and Delete options. (#50153)
- Query ordering: Added `QueryOption.WithOrderByFields`, accepting expressions such as `price:desc` and `name:asc`. An explicit query limit is required when ordering is used. (#51173, #51220)
- Search-time FunctionScore: Added `SearchOption.WithFunctionScore` and `HybridSearchOption.WithFunctionScore`, carrying scoring Functions together with score-option params (`boost_mode` / `function_mode`). `AnnRequest.WithFunctionReranker` / `HybridSearchOption.WithFunctionRerankers` accumulate scoring Functions per request. (#53392)
- Weighted RRF reranking: Added `NewRRFReranker().WithWeights`, applying per-ANN-request reciprocal-rank coefficients while preserving classic RRF when weights are omitted. (#52818)
- Membership filters: Added client-side builders for `membership_match` expression-template parameters:
  - `NewBloomFilterBlob(members, fpr)` builds a Split-Block Bloom Filter (MBF1) blob for `type=bloom`.
  - `NewRoaringBitmapBlob(members)` builds an exact portable Roaring64 bitmap for `type=roaring`.

  Blobs travel as native protobuf bytes template values (`WithTemplateParam`), letting large membership sets pass the proxy gRPC receive limit. New `client/membership/sbbf` and `client/membership/roaringfilter` packages power the builders. (#53019)
- Client telemetry: Added configurable collection of request counts, errors, and latency metrics, including P99 latency, recent-error tracking, periodic server heartbeats, and server-pushed command handling. (#47523, #47542)
- Structured RPC errors: Added public `RPCError`, common error sentinels, `ErrorCode`, and `IsRetryableError`. RPC errors with matching Milvus codes can now be inspected using `errors.Is`.
- Dynamic StructArray fields: Added `Client.AddCollectionStructField` and `NewAddCollectionStructFieldOption`, including validation and preservation of parent nullable and `max_capacity` metadata. (#50276)
- Nullable StructArray support: StructArray scalar and vector sub-fields now honor NULL versus empty-array semantics end-to-end for inserts, queries, and searches, including compact nullable insert payloads, row-dense query/search results, and restoration of nullable StructArray columns for zero-row results with sub-field selections. (#51813)
- TEXT fields: Added `FieldTypeText` (DataType 25), `column.NewColumnText` / `NewNullableColumnText`, and the column-based insert option `WithTextColumn`, for variable-length strings without a required `max_length`. (#52450)
- Drop collection fields: Added `DropCollectionField` (by name or by ID), `AddFunctionField`, and `DropFunctionField`, routed through `AlterCollectionSchema`; legacy `AddCollectionField` remains as a compatibility fallback. (#51770)
- FileResource APIs: Added `AddFileResource`, `ListFileResources`, and `RemoveFileResource` for managing remote files registered with Milvus. (#51470)
- RBAC descriptions: Added user and role descriptions, role-description updates through `AlterRole`, and force-drop support for roles. (#50184, #50186, #47071)
- Import two-phase commit: Added REST wrappers for committing or aborting bulk-import jobs through `CommitImport` and `AbortImport`. (#50177)
- Message salvage API: Added the high-level `Client.DumpMessages` streaming wrapper for replication and recovery workflows. (#50343, #50574)
- MinHash: Added `FunctionTypeMinHash` support to the Go SDK function API. (#45322)
- Index types: Added the missing vector/scalar index models — HNSW SQ/PQ/PRQ (`NewHNSWSQIndex` / `NewHNSWPQIndex` / `NewHNSWPRQIndex` and matching ANN params), `NewAISAQIndex`, `NewNgramIndex`, and `NewFMIndex`. `WithExtraIndexParams` merges raw build params while refusing to override `index_type`/`metric_type`, so `Params()` and `IndexType()` never disagree. (#53392)
- Request ID correlation: Added opt-in `WithClientRequestID` / `NewClientRequestID` to correlate a request with server logs and traces. (#53392)

### Improvements and Bug Fixes

- Default gRPC keepalive, reconnect, and receive-size options are now always applied before user-provided `DialOptions`. (#49186)
- Row-based Insert and Upsert builders now preserve row-based processing when chaining partition, namespace, partial-update, and Array-operation options.
- Client-local error, retry, crypto, concurrency, property, and type helpers replace the dependency on Milvus server packages.
- Updated the v3 protobuf, gRPC, protobuf runtime, and supporting Go dependencies.
- Streaming RPCs (e.g. `DumpMessages`) now apply client metadata through a new `MetadataStreamInterceptor`, fixing streaming gRPCs that previously bypassed authentication on the external proxy port. (#52608)
- Client telemetry hardening: trustworthy windows/quantiles, fractional sampling that never rounds a positive rate to off, idempotent command cursor, panic-safe command handlers, bounded history, config-reply detail, and opt-in `client_request_id` correlation. (#53392)
- `merr` now exposes `ErrServiceUnimplemented`, `ErrParameterMissing`, and the `WrapErrParameterInvalidMsg` / `WrapErrParameterInvalidErr` / `WrapErrParameterMissingMsg` helpers. (#51770)
- `BloomFilterBlob` and `RoaringBitmapBlob` are distinct Go types so the builders cannot be mixed up; wrong-domain blobs are rejected by the proxy rather than silently matching nothing. (#53019)

Related Repositories