100 Commits
Author SHA1 Message Date
aoiasdandGitHub 6fed75383b enhance: use raw scan for inverted LIKE match (#51477)
pr: https://github.com/milvus-io/milvus/pull/49922

## Summary
Route generic LIKE Match operations to raw-data scan when a varchar
inverted index is present, while keeping PrefixMatch on the
inverted-index path. Update planner policy and sealed-segment coverage
for a complex LIKE pattern.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-07-17 16:42:40 +08:00
f662cec16d feat: add local format metadata and split policy (#51204)
relate: #50304

## Summary
Add the local format design doc, use the storage writer format constant,
and introduce local_format metadata propagation with column-group split
policy support.

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-16 23:08:39 +08:00
ee943a1bf5 enhance: allow updating inactive field analyzer params (#50492)
issue: #50961

## Summary
Allow AlterCollectionField to set or delete analyzer configuration on
string fields before they are used by text match or BM25. Keep analyzer
params immutable once text match is enabled or a BM25 function depends
on the field.

When analyzer params change, RootCoord revalidates the new analyzer
config, reserves newly referenced file resources before broadcasting,
and lets MetaTable.AlterCollection reconcile file resource refCnt for
request, replay, replicated, and recovery paths.

## Verification
- `git diff --check`
- `go test -tags dynamic,test -gcflags="all=-N -l" -count=1
./util/typeutil -run TestIsBm25FunctionInputField` from `pkg/`
- `go test -tags dynamic,test -gcflags="all=-N -l" -count=1
./internal/rootcoord -run
'TestMetaTableAlterCollectionFileResourceRefCnt|TestDDLCallbacksAlterCollectionFieldAnalyzerValidation'`
blocked locally: missing `milvus_core.pc`
- `go test -tags dynamic,test -gcflags="all=-N -l" -count=1
./internal/proxy -run TestAlterCollectionField` blocked locally: missing
`milvus_core.pc` and `milvus-storage.pc`

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-13 17:32:37 +08:00
d04f15806e fix: clean analyzer option update (#51152)
issue: #50931

## Summary
Clean analyzer option update helpers on master to match the 2.6
follow-up.
Remove the exported UpdateParams wrapper and return C status handling
directly during option initialization.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-09 17:10:34 +08:00
29c244ac46 enhance: move RBAC check before hook (#50434)
## Summary
Move the RBAC check before the hook interceptor.
Write the resolved roles for the current request into the request
context.

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-06 16:06:30 +08:00
65307b9d14 fix: sync analyzer runtime options (#50997)
issue: #50931

## Summary
Initialize analyzer runtime options with Lindera download URLs and the
default dictionary path. Register runtime config callbacks so analyzer
yaml updates are propagated to the Rust analyzer layer.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-06 11:24:29 +08:00
aoiasdandGitHub 950062c78b fix: preserve segment insert log paths for text index (#50959)
issue: #50865

## Summary
Preserve existing insert log paths when building segment insert files
for StorageV2 text index builds.
Fall back to constructing paths from log IDs when the binlog path is
absent.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-07-02 15:38:29 +08:00
aoiasdandGitHub e34c569ebb fix: normalize highlight analyzer names (#50597)
issue: #46308

## Summary
Normalize analyzer names before running multi-analyzer highlight and
analyzer requests: omitted names use default, one name is broadcast, and
per-text names must match the text count. Also add default analyzer
names for lexical highlight query texts and request the analyzer-name
field for multi-analyzer query-only highlight.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-06-26 11:14:27 +08:00
4d55c8e3fb enhance: isolate function runner lifecycle keys (#50604)
relate: #49716
pr: https://github.com/milvus-io/milvus/pull/49717

## Summary
Split FunctionRunnerManager lifecycle references between WAL and
delegator keys while still sharing runners by function signature. Add
latest-version lookup support for schemaVersion 0 or nil schema in the
manager; master call sites still pass the current schema version
explicitly.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-25 10:28:26 +08:00
a7a382729d fix: keep empty highlight results for nullable strings (#50572)
issue: #46308

## Summary
Keep lexical highlight corpus texts aligned with search result rows when
highlighted string fields are nullable or empty. Null and empty rows now
still produce highlight data with an empty fragments list.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-23 11:04:42 +08:00
0ea705382c fix: prevent BM25 IDF nil map panic (#50584)
issue: #50542

## Summary
Keep cloned empty BM25 stats writable so recovered growing segments
cannot register nil stats in the IDF oracle. Add a regression test for
updating a growing segment after empty BM25 stats registration.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-17 17:44:24 +08:00
aoiasdandGitHub d79a05bec6 enhance: move embedding function execution before WAL append (#49717)
relate: #49716

## Summary
Move BM25/MinHash function execution from DN/QN pipeline embedding nodes
to the write-before path before WAL append. Add collection-scoped
function runner caching and keep pipeline-side compatibility fill for
old insert messages without generated function output fields.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-06-12 13:30:21 +08:00
aoiasdandGitHub 8e927a78e5 enhance: support dynamic update access log configuration (#48273)
issue: #50206

## Summary
- Support dynamically updating access log configuration (formatters,
methods, writer settings) without restarting, by watching all
`proxy.accessLog` config keys instead of only the enable switch.
- Add RESTful API paths (`/search`, `/query`, `/v2/vectordb/entities/*`)
to the default search/query formatter methods, so RESTful requests also
get detailed access log formatting.
- Fix resource leak: close old `RotateWriter` before re-initializing
when config changes.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-06-08 20:38:25 +08:00
aoiasdandGitHub b55ed60fcf enhance: make function runner analyzer concurrency configurable (#50112)
relate: #50113

## Summary
Make function runner text tokenization concurrency configurable through
function.analyzer.runner_concurrency, preserving the default value of 8.
BM25 and multi-analyzer BM25 now read the parameter for each
BatchRun/BatchAnalyze call so runtime config changes can take effect
without recreating runners. Also register a config event handler for
function.analyzer.concurrency_per_cpu_core so the shared analyzer pool
resizes dynamically when that setting changes.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-06-04 12:02:19 +08:00
aoiasdandGitHub ccd649b2fc enhance: refine inverted pattern match planner policy (#49922)
issue: #50005

## Summary
Separate pattern match capability from planner policy so inverted
indexes keep regex filters on the index path while suffix/contains LIKE
can fall back to raw-data scan when appropriate.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-06-01 20:08:16 +08:00
aoiasdandGitHub 2e2266f1ff fix: keep text match stats paths compatible (#49957)
relate: #49907

## Summary
Make TextMatch upload return relative file names consistently, including
the unified scalar index path. Restore full object keys in DataNode text
stats task results and compaction metadata so mixed-version rolling
upgrades remain compatible with older Coord/QueryNode consumers.

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-05-25 18:34:33 +08:00
aoiasdandGitHub efc996e28d fix: strip UTF-8 BOM from analyzer word files (#49691)
relate: #49684

## Summary
Strip a UTF-8 BOM from the first line when loading analyzer word files
so BOM-prefixed stop words are matched correctly. Add coverage for BOM +
CRLF stop word files.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-05-21 10:48:30 +08:00
aoiasdandGitHub e991bc779e fix: skip loading BM25 sparse vector fields (#49651)
relate: #49650

## Summary
Skip BM25 sparse vector fields in segcore ShouldLoadField decisions so
BM25 function outputs are not treated as loadable raw field data. Cover
both BM25 function output fields and vector fields whose metric type is
BM25 with unit tests.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-05-20 19:22:30 +08:00
aoiasdandGitHub e2195cced6 fix: avoid panic for non-point WKT validation (#49719)
relate: #49692

## Summary
Return a validation error instead of panicking when ST_DWITHIN point
validation receives valid non-POINT WKT. Add coverage for POLYGON WKT
passed to checkValidPoint.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-05-20 11:13:07 +08:00
aoiasdandGitHub b05ce85630 fix: sync up drop collection ack (#49412)
relate: #48612

## Summary
Enable AckSyncUp for all DropCollection broadcasts so drop
acknowledgement waits for downstream DDL handling instead of using the
default FastAck path.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-05-19 20:00:31 +08:00
aoiasdandGitHub bd828e3ff8 enhance: support user dictionary file for lindera tokenizer (#49124)
relate: #40168

## Summary
Add `user_dict` param to the lindera tokenizer, aligned with other
tokenizers' file resource config — supports both `type: local` (local
path) and `type: remote` (file resource from object storage). Dispatches
by file extension: `.csv` via `load_user_dictionary_from_csv` with the
configured `DictionaryKind`, `.bin` via `load_user_dictionary_from_bin`.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-05-13 20:40:11 +08:00
b908a2dda8 enhance: inject zap logger and gin context into hook plugin (#49097)
## Summary

- Inject Milvus zap logger into hook plugin via `SetZapLogger` type
assertion after plugin load, enabling the plugin to use Milvus's
centralized logging
- Inject connection manager into hook plugin via `SetClientInfoProvider`
type assertion, allowing the plugin to look up SDK info (sdk_type,
sdk_version, host) for non-Connect requests by connection identifier
- Pass `*gin.Context` directly via `GinParamsKey` instead of
`ginCtx.Keys` map, enabling the hook plugin to access `ClientIP()`,
`FullPath()`, `GetHeader()` and other gin context methods for RESTful
requests

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 18:49:46 +08:00
3a4e37ad90 fix: bind file resource refCnt to collection lifecycle to prevent panic (#48893)
relate: https://github.com/milvus-io/milvus/issues/48612
## Summary
- Increment `fileResourceRefCnt` during `validateSchema` instead of in
the async ack callback's `AddCollection`, closing the TOCTOU race where
`RemoveFileResource` could delete a resource between validation and
`AddCollection`
- On failure before `Broadcast`, refCnt is decremented immediately; on
restart, refCnt for pending broadcast tasks is recovered from etcd
before rootcoord becomes Healthy
- Remove refCnt++ from `addCollectionMeta` since it's now done at
validation time (reload path unchanged)

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-22 19:39:44 +08:00
e6070874f8 enhance: make BM25 stats per-entry memory cost configurable, default 20 (#49145)
## Summary
Two improvements to BM25 stats memory accounting in idfOracle:

### 1. Per-entry estimate: 80 → 20 bytes/entry
The previous hardcoded `bm25StatsPerEntryBytes = 80` overestimates
`map[uint32]int32` memory by 4-7x. Empirical measurement on Go 1.24
(median of 5 runs, n ≥ 10K to avoid GC noise):

| n | heap delta | bytes/entry | overestimate vs 80 |
|---|---|---|---|
| 10K | 152 KB | 15.22 | 5.2× |
| 100K | 1.22 MB | 12.18 | 6.6× |
| 1M | 19.4 MB | 19.43 | 4.1× |
| 5M | 77.9 MB | 15.58 | 5.1× |
| 10M | 156 MB | 15.58 | 5.1× |
| 50M | 623 MB | 12.47 | 6.4× |

Steady-state cost oscillates between **12 and 19.5 bytes/entry**
depending on the swiss table fill ratio (peak ~19.5 right after a 2×
capacity grow, trough ~12 when near load factor 7/8).

Root cause: the original comment claimed "bucket overhead ~72B per
entry", but Go map buckets/groups hold 8 entries each, so amortized
overhead is ~10 bytes/entry, not 72.

**Fix**: lower the default to 20 (covers measured upper bound 19.5 with
small safety margin) and expose as
`queryNode.idfOracle.bm25StatsBytesPerEntry` (refreshable) for runtime
tuning.

### 2. Skip cgo Charge/Refund when tiered eviction is disabled
When `queryNode.segcore.tieredStorage.evictionEnabled = false` (the
default), the C++ caching layer's resource accounting is inert — no
eviction will be driven by it. The per-load `C.ChargeLoadedResource` /
`C.RefundLoadedResource` cgo calls are pure overhead in this case.

**Fix**: gate `syncResource` and `checkMemoryResource` on the eviction
flag. Skip entirely when eviction is off.

## Impact
- ~75% reduction in cache budget consumed by BM25 stats (when eviction
enabled)
- Eliminates per-segment cgo overhead in default deployments (eviction
off)
- Tunable per-entry estimate without redeploying

## Test plan
- [x] `TestIDFOracle` passes
- [x] `TestBM25Stats_MemSize` passes with the new configurable value
- [x] Verified memory measurement methodology with multiple sample sizes

issue: #46468

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 19:47:44 +08:00
ab87a3f825 fix: buffer cm.Reader in BM25 streamOneFile to reduce IO syscalls (#48845)
## Summary
- Wraps `cm.Reader` (S3/MinIO HTTP body) with `bufio.NewReader` in
`streamOneFile` before creating the TeeReader
- `DeserializeFromReader` calls `binary.Read` which reads 4/8 bytes per
call; without buffering, each small read hits the remote reader
directly, causing excessive IO operations during preload parsing
- With `bufio.Reader` (default 4KB buffer), small reads are served from
the buffer, reducing remote IO to ~1 per 4KB

## Test plan
- [x] Existing `TestIDFOracle` tests pass
- [x] Verified via profiling that IO syscall count drops significantly
during BM25 preload

issue: #46468

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 10:37:40 +08:00
ddf5557e06 feat: add enhanced Arabic and Thai support to the analyzer (#47909)
relate: https://github.com/milvus-io/milvus/issues/47787
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260403-arabic-thai-analyzer.md
Add arabic_normalization_filter and decimal_digit_filter.
Add arabic and thai dictionary in stop_word filter.
Add thai tokenizer (ICU with lstm).
Add build-in analyzer for arabic and thai.

---------

Signed-off-by: yuezhicheng-zilliz <yuezhicheng-zilliz@yuezhicheng-zillizdeMacBook-Pro.local>
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: yuezhicheng-zilliz <yuezhicheng-zilliz@yuezhicheng-zillizdeMacBook-Pro.local>
2026-04-07 14:31:46 +08:00
bc2132d7e1 enhance: streaming BM25 stats load with disk-first strategy (#48216)
relate: #41424

## Summary
- Stream BM25 stats directly to local disk via TeeReader/io.Copy,
avoiding full in-memory download and re-serialization
- Add caching layer resource tracking (Charge/Refund) for BM25 memory
and disk usage
- Add `queryNode.idfOracle.preload` to defer stats parsing to first
SyncDistribution

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 16:13:42 +08:00
d022c6fff0 enhance: fallback file resource manager to close mode when no storage address configured in yaml (#48631)
## Summary
When DataNode is configured with `sync` mode for file resource manager
but no storage address is set in yaml (i.e., remote storage type with
empty address), the initialization previously attempted to create a
ChunkManager and failed with an error, causing the node to fail to
start. This change detects the missing address upfront and gracefully
falls back to `close` mode instead.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 14:13:32 +08:00
aoiasdandGitHub 0961e17798 fix: return error when get recall from empty result (#48027)
relate: https://github.com/milvus-io/milvus/issues/43443

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-03-27 18:19:30 +08:00
51343a2dd2 enhance: support set mode for lindera tokenizer (#48122)
relate:https://github.com/milvus-io/milvus/issues/48121

Signed-off-by: yuezhicheng-zilliz <yuezhicheng-zilliz@yuezhicheng-zillizdeMacBook-Pro.local>
Co-authored-by: yuezhicheng-zilliz <yuezhicheng-zilliz@yuezhicheng-zillizdeMacBook-Pro.local>
2026-03-26 17:21:30 +08:00
aoiasdandGitHub 9d31bf4f1f fix: add FileResource privileges to RBAC v2 built-in privilege groups (#48126)
## Summary
- Add FileResource privileges to v2 built-in privilege groups in
`pkg/util/constant.go`

issue: #47893

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-03-13 15:33:24 +08:00
aoiasdandGitHub aa3935e68c feat: support use pinyin filter (#45821)
relate: https://github.com/milvus-io/milvus/issues/45811
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260209-pinyin_filter.md

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-03-12 11:03:24 +08:00
aoiasdandGitHub e9a42c4c03 fix: list file resource not work (#47568)
relate: https://github.com/milvus-io/milvus/issues/41424

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-02-11 15:50:41 +08:00
aoiasdandGitHub 664f181f5f enhance: Improve the consistency of file resource sync (#47113)
relate: https://github.com/milvus-io/milvus/issues/41424

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-26 11:45:32 +08:00
aoiasdandGitHub 9be7090d82 enhance: use adapter analyzer for tantivy index writer v5 (#46963)
relate: https://github.com/milvus-io/milvus/issues/46962

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-19 18:01:29 +08:00
aoiasdandGitHub 1178fd1d0e enhance: check resource exist when add or remove file resource (#46620)
relate: https://github.com/milvus-io/milvus/issues/41424

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Pull Request Summary

**Core Invariant**: File resources must physically exist in storage
before being registered in metadata; this PR enforces the invariant at
the entry point (AddFileResource) by validating file existence via a
storageClient abstraction before any metadata mutation.

**Enhancement: Pre-validation of file resource existence**
- Introduces a `storageClient` interface (`Exist(ctx, filePath) (bool,
error)`) that FileResourceManager uses to validate storage presence
before registration
- AddFileResource now checks file existence and returns an InputError if
the file is missing, preventing stale/phantom resource entries in
metadata
- Previously, resources could be registered without verifying the
underlying file existed, creating consistency issues when storage
operations failed or files were deleted externally

**Removes redundant synchronization boilerplate**
- Consolidates QC/DN synchronization logic into FileResourceManager;
AddFileResource and RemoveFileResource methods now internally call
Notify and syncQcFileResource(ctx) instead of repeating this pattern in
services.go
- services.go no longer needs explicit ListFileResource +
SyncQcFileResource calls after add/remove operations; it now simply
delegates to fileManager.AddFileResource/RemoveFileResource
- Proxy layer implementations (AddFileResource, RemoveFileResource,
ListFileResources) now forward to real mixCoord methods instead of "not
implemented" stubs, making the feature fully functional

**No data loss or behavior regression**
- Storage existence check is gated by qnMode == SyncMode (for QC sync)
and dnMode == SyncMode (for DN sync loop startup), preserving backward
compatibility for non-sync deployments
- Resources are only added to metadata after existence confirmation,
ensuring consistency; removal remains symmetric and does not require
existence checks
- The mode guards in Start() and Notify() ensure synchronization only
occurs when configured, preventing spurious sync attempts in disabled
modes

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-15 10:23:28 +08:00
aoiasdandGitHub 88e761adc9 enhance: save BM25 stats to the disk while loading the segment (#46468)
Add a thread pool to load BM25 stats and save them to local disk during
loading, reducing peak memory usage.
relate: https://github.com/milvus-io/milvus/issues/41424

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: sealed-segment BM25 statistics are immutable and may
be persisted to disk independently from growing-segment stats; IDF state
is reconstructed by combining persisted sealed stats (preloaded from
disk) with in-memory growing stats at runtime (preloadSealed +
RegisterGrowing).
- Capability added: asynchronous BM25 loading via a dedicated
BM25LoadPool (config key common.threadCoreCoefficient.bm25Load and param
BM25LoadThreadCoreCoefficient) — delegator.loadBM25Stats is executed on
the pool to load sealed BM25 stats and call idfOracle.RegisterSealed,
reducing peak memory during segment load.
- Logic removed/simplified and why: the previous single Register(segID,
stats, state) + background local-writer/spool loop was split into
RegisterGrowing (in-memory) and RegisterSealed (sealed + on-disk
persistence) and the localloop removed; RegisterSealed writes sealed
stats directly (ToLocal) and uses singleflight to deduplicate,
eliminating redundant spooling and lifecycle complexity while clarifying
sealed vs growing flows.
- Why this does NOT introduce data loss or behavior regression: sealed
stats are still written and reloaded (RegisterSealed persists to
dirPath; preloadSealed merges disk and memory on first load), growing
segments continue to register in-memory via RegisterGrowing,
loadSegments now defers sealed BM25 handling to loadBM25Stats but still
registers sealed candidates after load, and tests were updated to
reflect RegisterSealed/RegisterGrowing usage—so
serialization/deserialization, preload semantics, and test coverage
preserve existing persisted state and runtime behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-09 19:29:26 +08:00
aoiasdandGitHub c0664b78ca fix: inverted index null offset file not compacted (#46775)
relate: https://github.com/milvus-io/milvus/issues/46774

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-07 11:53:24 +08:00
aoiasdandGitHub cc7652327d enhance: optimize jieba and lindera analyzer clone (#46719)
relate: https://github.com/milvus-io/milvus/issues/46718

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Enhancement: Optimize Jieba and Lindera Analyzer Clone

**Core Invariant**: JiebaTokenizer and LinderaTokenizer must be
efficiently cloneable without lifetime constraints to support analyzer
composition in multi-language detection chains.

**What Logic Was Improved**:
- **JiebaTokenizer**: Replaced `Cow<'a, Jieba>` with
`Arc<jieba_rs::Jieba>` and removed the `<'a>` lifetime parameter. The
global JIEBA instance now wraps in Arc, enabling `#[derive(Clone)]` on
the struct. This eliminates lifetime management complexity while
maintaining zero-copy sharing via atomic reference counting.
- **LinderaTokenizer**: Introduced public `LinderaSegmenter` struct
encapsulating dictionary and mode state, and implemented explicit
`Clone` that properly duplicates the segmenter (cloning Arc-wrapped
dictionary), applies `box_clone()` to each boxed token filter, and
clones the token buffer. Previously, Clone was either unavailable or
incompletely handled trait objects.

**Why Previous Implementation Was Limiting**:
- The `Cow::Borrowed` pattern for JiebaTokenizer created explicit
lifetime dependencies that prevented straightforward `#[derive(Clone)]`.
Switching to Arc eliminates borrow checker constraints while providing
the same reference semantics for immutable shared state.
- LinderaTokenizer's token filters are boxed trait objects, which cannot
be auto-derived. Manual Clone implementation with `box_clone()` calls
correctly handles polymorphic filter duplication.

**No Data Loss or Behavior Regression**:
- Arc cloning is semantically equivalent to `Cow::Borrowed` for
read-only access; both efficiently share the underlying Jieba instance
and Dictionary without data duplication.
- The explicit Clone preserves all tokenizer state: segmenter (with
shared Arc dictionary), all token filters (via individual box_clone),
and the token buffer used during tokenization.
- Token stream behavior unchanged—segmentation and filter application
order remain identical.
- New benchmarks (`bench_jieba_tokenizer_clone`,
`bench_lindera_tokenizer_clone`) measure and validate clone performance
for both tokenizers.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-06 21:19:25 +08:00
aoiasdandGitHub ee216877bb enhance: support compaction with file resource in ref mode (#46399)
Add support for DataNode compaction using file resources in ref mode.
SortCompation and StatsJobs will build text indexes, which may use file
resources.
relate: https://github.com/milvus-io/milvus/issues/43687

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: file resources (analyzer binaries/metadata) are only
fetched, downloaded and used when the node is configured in Ref mode
(fileresource.IsRefMode via CommonCfg.QNFileResourceMode /
DNFileResourceMode); Sync now carries a version and managers track
per-resource versions/resource IDs so newer resource sets win and older
entries are pruned (RefManager/SynchManager resource maps).
- Logic removed / simplified: component-specific FileResourceMode flags
and an indirection through a long-lived BinlogIO wrapper were
consolidated — file-resource mode moved to CommonCfg, Sync/Download APIs
became version- and context-aware, and compaction/index tasks accept a
ChunkManager directly (binlog IO wrapper creation inlined). This
eliminates duplicated config checks and wrapper indirection while
preserving the same chunk/IO semantics.
- Why no data loss or behavior regression: all file-resource code paths
are gated by the configured mode (default remains "sync"); when not in
ref-mode or when no resources exist, compaction and stats flows follow
existing code paths unchanged. Versioned Sync + resourceID maps ensure
newly synced sets replace older ones and RefManager prunes stale files;
GetFileResources returns an error if requested IDs are missing (prevents
silent use of wrong resources). Analyzer naming/parameter changes add
analyzer_extra_info but default-callers pass "" so existing analyzers
and index contents remain unchanged.
- New capability: DataNode compaction and StatsJobs can now build text
indexes using external file resources in Ref mode — DataCoord exposes
GetFileResources and populates CompactionPlan.file_resources;
SortCompaction/StatsTask download resources via fileresource.Manager,
produce an analyzer_extra_info JSON (storage + resource->id map) via
analyzer.BuildExtraResourceInfo, and propagate analyzer_extra_info into
BuildIndexInfo so the tantivy bindings can load custom analyzers during
text index creation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2026-01-06 16:31:31 +08:00
aoiasdandGitHub d261034af6 enhance: fix unstable config util unit test (#46702)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: config refresh events must reliably propagate updated
values and evict cached entries within a bounded time window; tests must
observe this deterministically without relying on fixed sleeps.
- Logic simplified: brittle fixed time.Sleep delays and separate error
assertions were replaced by assert.Eventually polling blocks that
combine value checks and cache-eviction verification, and consolidated
checks to reduce redundant assertions.
- Why no data loss / no behavior regression: only test synchronization
and assertions were changed—production config manager code paths (value
propagation, KV puts, cache eviction) are untouched; tests now wait for
the same outcomes more robustly, so no mutation of runtime behavior or
storage occurs.
- Enhancement scope: this is a test-stability improvement (no new
runtime capability); it fixes flaky unit tests (root cause: timing
assumptions) by replacing fixed waits with bounded polling and by using
t.Context for KV puts to align test context usage.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-31 15:59:21 +08:00
aoiasdandGitHub 26c86ec221 enhance: fix unstable unit test (#46626)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: TestWait must deterministically verify that
FixedSizeAllocator.Wait() is notified when virtual resources are
released, so an allocation blocked due to exhausted virtual capacity
eventually succeeds after explicit deallocations.
- Removed/simplified logic: replaced the previous flaky pattern that
spawned 100 concurrent goroutines performing Reallocate with an explicit
channel-synchronized release goroutine that performs 100 sequential
negative Reallocate calls only after the test blocks on allocation. This
eliminates timing-dependent concurrency and the nondeterministic i-based
assertion.
- Why no data loss or behavior regression: only the test changed —
allocator implementation (Allocate/Reallocate/Release/Wait/notify) and
public APIs are unchanged. The test now exercises the same code paths
(Allocate fails, Wait blocks on cond, Reallocate/Release call notify),
but in a deterministic order, so the allocator semantics and resource
accounting (used, allocs map) remain unaffected.
- Change type and intent: Enhancement/refactor of unit test stability —
it tightens test synchronization to remove race-dependent assertions and
ensure the Wait/notify mechanism is reliably exercised without modifying
allocator logic.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-30 17:05:21 +08:00
aoiasdandGitHub 90809d1d86 fix: highlight with multi analyzer failed (#46527)
relate: https://github.com/milvus-io/milvus/issues/46498

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: text fields configured with multi_analyzer_params must
include a "by_field" string that names another field containing per-row
analyzer choices; schemaInfo.GetMultiAnalyzerNameFieldID caches and
returns the dependent field ID (or 0 if none) and relies on that mapping
to make per-row analyzer names available to the highlighter.
- What changed / simplified: the highlighter is now schema-aware —
addTaskWithSearchText accepts *schemaInfo and uses
GetMultiAnalyzerNameFieldID to resolve the analyzer-name field;
resolution and caching moved into schemaInfo.multiAnalyzerFieldMap
(meta_cache.go), eliminating ad-hoc/typeutil-only lookups and duplicated
logic; GetMultiAnalyzerParams now gates on EnableAnalyzer(),
centralizing analyzer enablement checks.
- Why this fixes the bug (root cause): fixes #46498 — previously the
highlighter failed when the analyzer-by-field was not in output_fields.
The change (1) populates task.AnalyzerNames (defaulting missing names to
"default") when multi-analyzer is configured and (2) appends the
analyzer-name field ID to LexicalHighlighter.extraFields so FieldIDs
includes it; the operator then requests the analyzer-name column at
search time, ensuring per-row analyzer selection is available for
highlighting.
- No data-loss or regression: when no multi-analyzer is configured
GetMultiAnalyzerNameFieldID returns 0 and behavior is unchanged; the
patch only adds the analyzer-name field to requested output IDs (no
mutation of stored data). Error handling on malformed params is
preserved (errors are returned instead of silently changing data), and
single-analyzer behavior remains untouched.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-30 11:55:21 +08:00
aoiasdandGitHub 55feb7ded8 feat: set related resource ids in collection schema (#46423)
Support crate analyzer with file resource info, and return used file
resource ids when validate analyzer.
Save the related resource ids in collection schema.
relate: https://github.com/milvus-io/milvus/issues/43687

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: analyzer file-resource resolution is deterministic and
traceable by threading a FileResourcePathHelper (collecting used
resource IDs in a HashSet) through all tokenizer/analyzer construction
and validation paths; validate_analyzer(params, extra_info) returns the
collected Vec<i64) which is propagated through C/Rust/Go layers to
callers (CValidateResult → RustResult::from_vec_i64 → Go []int64 →
querypb.ValidateAnalyzerResponse.ResourceIds →
CollectionSchema.FileResourceIds).

- Logic removed/simplified: ad‑hoc, scattered resource-path lookups and
per-filter file helpers (e.g., read_synonyms_file and other inline
file-reading logic) were consolidated into ResourceInfo +
FileResourcePathHelper and a centralized get_resource_path(helper, ...)
API; filter/tokenizer builder APIs now accept &mut
FileResourcePathHelper so all file path resolution and ID collection use
the same path and bookkeeping logic (redundant duplicated lookups
removed).

- Why no data loss or behavior regression: changes are additive and
default-preserving — existing call sites pass extra_info = "" so
analyzer creation/validation behavior and error paths remain unchanged;
new Collection.FileResourceIds is populated from resp.ResourceIds in
validateSchema and round‑tripped through marshal/unmarshal
(model.Collection ↔ schemapb.CollectionSchema) so schema persistence
uses the new list without overwriting other schema fields; proto change
adds a repeated field (resource_ids) which is wire‑compatible (older
clients ignore extra field). Concrete code paths: analyzer creation
still uses create_analyzer (now with extra_info ""), tokenizer
validation still returns errors as before but now also returns IDs via
CValidateResult/RustResult, and rootcoord.validateSchema assigns
resp.ResourceIds → schema.FileResourceIds.

- New capability added: end‑to‑end discovery, return, and persistence of
file resource IDs used by analyzers — validate flows now return resource
IDs and the system stores them in collection schema (affects tantivy
analyzer binding, canalyzer C bindings, internal/util analyzer APIs,
querynode ValidateAnalyzer response, and rootcoord/create_collection
flow).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-26 22:49:19 +08:00
aoiasdandGitHub 342ba550bf enhance: update highlight ci (#46573)
relate: https://github.com/milvus-io/milvus/issues/46571

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: the LexicalHighlighter API now expects the match
queries under the parameter name highlight_query (not queries); all call
sites must pass highlight_query to supply match data. This PR assumes
the underlying highlighter behavior and processing of those query values
are unchanged.
- Logic simplified/removed: removed the legacy keyword queries in tests
and updated calls to use highlight_query
(tests/python_client/milvus_client/test_milvus_client_highlighter.py).
This eliminates a redundant/incorrect keyword alias and aligns tests
with the consolidated LexicalHighlighter constructor parameter name.
- Why this does NOT introduce data loss or behavior regression: the
change is a parameter-name rename only — no parsing, matching, or
storage logic was modified. Tests now construct LexicalHighlighter with
pre_tags/post_tags/highlight_search_text/fragment_* and pass the query
list under highlight_query; the highlighter execution path
(client.search → highlighter processing → result['highlight']) is
untouched, so existing highlight outputs and stored data remain
unchanged.
- Other changes: bumped pymilvus test dependency to 2.7.0rc93 in
tests/python_client/requirements.txt to match the updated constructor
signature; scope of change is limited to tests and dependency pinning
(no production code changes).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-24 19:07:18 +08:00
aoiasdandGitHub 7c714b0035 enhance: disallow the file resource interface before release (#46362)
relate: https://github.com/milvus-io/milvus/issues/43687

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* File resource operations (add, remove, list) are now unavailable and
return a not-implemented response.
* **Tests**
* Tests updated to expect error responses for those file resource
operations and removed some previous coordination-path assertions.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-24 17:23:19 +08:00
aoiasdandGitHub 0203aefad1 enhance: add concurrency pool for analyzer (#46185)
relate: https://github.com/milvus-io/milvus/issues/42589

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## New Features
- Added `concurrency_per_cpu_core` configuration parameter for the
analyzer component, enabling customizable per-CPU concurrency tuning
(default: 8).

## Tests
- Added test coverage for batch analysis operations.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-23 16:01:18 +08:00
aoiasdandGitHub 5e28f45c5a enhance: change highlight query keyword to highlight_query (#46360)
Instead of `queries`.
relate: https://github.com/milvus-io/milvus/issues/42589

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-22 11:43:18 +08:00
aoiasdandGitHub 7e4f87e351 fix: Init analyzer at delegator for all field with enable analyzer (#46361)
To support text match highlight
relate: https://github.com/milvus-io/milvus/issues/46308

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-19 10:23:18 +08:00
aoiasdandGitHub df80f54151 feat: support use user's file as dictionary for analyzer filter (#46145)
relate: https://github.com/milvus-io/milvus/issues/43687

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-16 11:45:16 +08:00
aoiasdandGitHub 0c54875832 enhance: ValidateAnalyzer return ValidateAnalyzerResponse instead common.Status (#46292)
Prepare for return more info when validate analyzer.
relate: https://github.com/milvus-io/milvus/issues/43687

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-12 10:35:14 +08:00
aoiasdandGitHub 82e1dfc7d0 fix: highlight queries not work when not BM25 search (#46288)
Should aways init highlight queries.
relate: https://github.com/milvus-io/milvus/issues/42589

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-11 20:07:14 +08:00
aoiasdandGitHub c84b6d56f8 fix: char_group tokenizer only support one byte char as delimiters (#46193)
relate: https://github.com/milvus-io/milvus/issues/46192

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-10 14:33:13 +08:00
aoiasdandGitHub d8c9d15c07 fix: highlighter return error when search return empty result (#46107)
relate: https://github.com/milvus-io/milvus/issues/42589

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-05 14:23:10 +08:00
aoiasdandGitHub 354ab2f55e enhance: sync file resource to querynode and datanode (#44480)
relate:https://github.com/milvus-io/milvus/issues/43687
Support use file resource with sync mode.
Auto download or remove file resource to local when user add or remove
file resource.
Sync file resource to node when find new node session.

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-04 16:23:11 +08:00
aoiasdandGitHub 8efe9ccac6 feat: Add support for using highlight without returning the field as the output field. (#45984)
relate: https://github.com/milvus-io/milvus/issues/42589

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-04 10:35:11 +08:00
aoiasdandGitHub b9487cf8e7 enhance: support load stop words file and add chinese default stop words (#45577)
relate: https://github.com/milvus-io/milvus/issues/45576

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-03 14:33:10 +08:00
aoiasdandGitHub f62297db92 feat: support synonym filter in analyzer (#45540)
relate: https://github.com/milvus-io/milvus/issues/45539

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-02 10:23:13 +08:00
aoiasdandGitHub 7d19c40e3c feat: support search highlight with queries (#45736)
Previously, search with highlight only supported using BM25 search text
as the highlight target.
This PR adds support for highlighting with user-defined queries.
relate: https://github.com/milvus-io/milvus/issues/42589

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-12-01 10:17:09 +08:00
aoiasdandGitHub 322caafe18 feat: support file params in analyzer and set jieba dict file (#45206)
relate: https://github.com/milvus-io/milvus/issues/43687
Support use user provice file by file params, in analyzer params.
Could use local file or remote file resource.
Support use file params in jieba extern dict.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-25 11:33:06 +08:00
aoiasdandGitHub 5efb0cedc8 feat: support use fragment config for highlight (#45099)
relate: https://github.com/milvus-io/milvus/issues/42589

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-24 17:07:06 +08:00
aoiasdandGitHub 947c8855f3 feat: support search bm25 with highlight (#44923)
relate: https://github.com/milvus-io/milvus/issues/42589

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-18 16:09:39 +08:00
aoiasdandGitHub 96d0e780ac fix: segcore collection schema update not concurrent safe. (#45337)
relate: https://github.com/milvus-io/milvus/issues/45345

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-14 17:51:37 +08:00
aoiasdandGitHub e82bf0e54f enhance: fix typo of analyzer params (#45299)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-10 14:35:35 +08:00
aoiasdandGitHub a38a0deb43 enhance: prevent panic by adding null pointer check when clearing InsertRecord _pk2offset_ (#45281)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-10 11:37:35 +08:00
aoiasdandGitHub 6102f001a9 enhance: skip check source id (#45377)
relate:https://github.com/milvus-io/milvus/issues/45381

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-07 15:19:34 +08:00
aoiasdandGitHub ed69375f00 enhance: remove resource type from file resource config (#45103)
File resource type was useless till now, remove it before new release.
relate: https://github.com/milvus-io/milvus/issues/43687

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-03 10:15:32 +08:00
aoiasdandGitHub ad9a0cae48 enhance: add global analyzer options (#44684)
relate: https://github.com/milvus-io/milvus/issues/43687
Add global analyzer options, avoid having to merge some milvus params
into user's analyzer params.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-10-28 14:52:10 +08:00
aoiasdandGitHub cfeb095ad7 enhance: forbid build analyzer at proxy (#44067)
relate: https://github.com/milvus-io/milvus/issues/43687
We used to run the temporary analyzer and validate analyzer on the
proxy, but the proxy should not be a computation-heavy node. This PR
move all analyzer calculations to the streaming node.

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-10-23 10:58:12 +08:00
aoiasdandGitHub ac82bad0b3 enhance: optimize idf oracle sync logic (#44628)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-10-20 15:42:08 +08:00
aoiasdandGitHub 754997ac2b enhance: update some annotations (#44769)
relate: https://github.com/milvus-io/milvus/issues/43114

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-10-17 16:22:02 +08:00
aoiasdandGitHub 1b17e16fc7 fix: expr filter return wrong result when skipped (#44778)
relate: https://github.com/milvus-io/milvus/issues/44777
Should return res with false if skipped. But now return vaild[0], it
almost be true.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-10-13 18:33:59 +08:00
aoiasdandGitHub 09865a5da5 fix: BM25 with boost return result not ordered. (#44744)
relate: https://github.com/milvus-io/milvus/issues/44758
Wrong code which should be `(result.seg_offsets_[i] >= 0 &&
result.seg_offsets_[j] < 0)`, but was `(result.seg_offsets_[j] >= 0 &&
result.seg_offsets_[j] < 0) ` now.
But because all placeholder which was offset -1, will fill with worst
distance value.
For IP, L2 or COSIN, it will be +inf or -inf. So sort distance was
enough.
But when use BM25, it will be NAN. Will case sort out of ordered.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-10-11 17:17:58 +08:00
aoiasdandGitHub 78ee76f018 enhance: support preload sealed segment bm25 stats and optimize bm25 stats serialize (#44279)
relate: https://github.com/milvus-io/milvus/issues/41424

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-29 16:35:05 +08:00
aoiasdandGitHub 294282f1d2 enhance: support use nullable field as bm25 function input field (#44586)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-29 10:25:05 +08:00
aoiasdandGitHub 1b20e956be enhance: support random score for boost function score (#44214)
And support set function mode and boost mode when run search with boost.

RandomScore support get random function score between [0, weight).
FunctionMode decide how to calculate boost score for multiple boost
function scores.
BoostMode decide how to calculate final score for origin score and boost
score.
relate: https://github.com/milvus-io/milvus/issues/43867

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-24 17:50:04 +08:00
aoiasdandGitHub 2b2a11afba enhance: use fixed vcpkg version for build image (#44378)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-15 19:33:59 +08:00
aoiasdandGitHub fb58701cbb enhance: update rust version (#44322)
relate: https://github.com/milvus-io/milvus/issues/44321

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-12 10:53:57 +08:00
aoiasdandGitHub 9add663a08 fix: idf oracle use wrong dir (#44266)
relate: https://github.com/milvus-io/milvus/issues/44264

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-10 14:41:56 +08:00
aoiasdandGitHub 92fedb8280 enhance: forbid panic when tantivy index path not exist (#44135)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-08 15:21:56 +08:00
aoiasdandGitHub f98dd84dec fix: add utf8 check before bm25 functoin run (#44220)
relate: https://github.com/milvus-io/milvus/issues/44219

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-08 14:43:56 +08:00
aoiasdandGitHub c71b47b52c enhance: add internal core latency metric for rescore node (#44010)
For fetching latency of boost.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-05 17:37:54 +08:00
aoiasdandGitHub 65ddc38d2f enhance: optimize access log format when print kv params (#43742)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-09-05 17:36:02 +08:00
aoiasdandGitHub 208a345a3d enhance: package analyzer code in Go and fix named analyzer as tokenizer (#43694)
relate: https://github.com/milvus-io/milvus/issues/43687

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-27 10:59:52 +08:00
aoiasdandGitHub e205c30f7d fix: boost panic if search return empty result (#44042)
relate: https://github.com/milvus-io/milvus/issues/44041
Skip rescore node if no valid offsets.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-27 05:01:52 +08:00
aoiasdandGitHub 8d49ffcc8b enhance: report field name when text match or pharse match failed because field not enable match (#43366)
relate: https://github.com/milvus-io/milvus/issues/41953

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-20 10:59:46 +08:00
aoiasdandGitHub dcf04a58b8 feat: support use score function on segment search and use filter (#43868)
relate: https://github.com/milvus-io/milvus/issues/43867
Support boost function score, multiply by the weight if match filter.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-19 16:15:45 +08:00
aoiasdandGitHub 06006939f8 feat: support use cipher hook in streaming node (#40562)
relate: https://github.com/milvus-io/milvus/issues/40321

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-19 10:41:44 +08:00
aoiasdandGitHub eca51ed2c6 enhance: add file resource api (#43766)
relate: https://github.com/milvus-io/milvus/issues/43687

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-08 14:17:41 +08:00
aoiasdandGitHub 4f02b06abc enhance: support set lindera dict build dir and download url in yaml (#43541)
relate: https://github.com/milvus-io/milvus/issues/43120

---------

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-08-04 09:47:38 +08:00
aoiasdandGitHub c9412434c8 enhance: add char group tokenizer (#42793)
relate: https://github.com/milvus-io/milvus/issues/42792
Add char group tokenizer which support use costum char group or use some
build-in char group as delimiters.

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-29 11:11:35 +08:00
aoiasdandGitHub e9fc140eaf fix: jieba tokenizer cause panic when dict word was empty string (#43337)
relate: https://github.com/milvus-io/milvus/issues/42779

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-21 16:34:53 +08:00
aoiasdandGitHub c7b53ed43b enhance: run rust format (#43447)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-21 14:12:53 +08:00
aoiasdandGitHub f7e1f1c382 enhance: support download lindera system dictionary online (#43121)
relate: https://github.com/milvus-io/milvus/issues/43120

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-20 23:24:52 +08:00
aoiasdandGitHub 097f4ce17a fix: rustcheck not work in CI (#43302)
relate: https://github.com/milvus-io/milvus/issues/42806

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-16 14:32:50 +08:00
aoiasdandGitHub 97b1c3ed96 enhance: add warn log if some segment's bm25 stats lacks (#43111)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-09 23:22:47 +08:00
aoiasdandGitHub 54cc0b60f2 fix: dropped segment in excluded segment use wrong excluded ts (#43115)
cause some excluded growing data insert again
relate: https://github.com/milvus-io/milvus/issues/43114

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-07-08 18:04:46 +08:00
aoiasdandGitHub e2566c0e92 enhance: bm25 stats local cache use local storage path (#42923)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-06-25 13:44:46 +08:00
aoiasdandGitHub 43a9f7a79e enhance: Add and run rust format command in makefile (#42807)
relate: https://github.com/milvus-io/milvus/issues/42806

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-06-20 10:22:39 +08:00
aoiasdandGitHub d49989345b enhance: forbid regex filter clone regex for each streamer (#42781)
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
2025-06-18 16:10:39 +08:00