100 Commits
Author SHA1 Message Date
Spade AandGitHub 149903e0fd fix: fix three-values nullbility and race in growing segmentArrayOffets (#51415)
issue: https://github.com/milvus-io/milvus/issues/51381

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
2026-07-20 00:22:41 +08:00
Spade AandGitHub dc3c0a9617 fix: bind template values in Struct MATCH and element_filter (#51521)
issue: https://github.com/milvus-io/milvus/issues/51416

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-07-17 19:52:39 +08:00
Spade AandGitHub 9cef600b7d fix: correct nullable vector array row IDs in sealed bf search (#51508)
issue: https://github.com/milvus-io/milvus/issues/51414

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-07-17 17:50:40 +08:00
Spade AandGitHub 9e11bdae4e fix: fix ngram index UTF-8 literal length checks (#51238)
issue: https://github.com/milvus-io/milvus/issues/42053

This PR fixes ngram index eligibility checks for UTF-8 literals by using
character count instead of byte length in the C++ gate and phase1
validation. It also adds regression coverage for short multibyte
literals to ensure they correctly fall back instead of being sent to
Tantivy ngram queries.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-07-14 16:38:36 +08:00
Spade AandGitHub 9a0d7f2956 test: fix TextMatchIndex fuzzy test constructor (#51169)
issue: https://github.com/milvus-io/milvus/issues/51054

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-07-08 17:52:55 +08:00
b1bbaafc88 fix: skip index raw data for array output (#51109)
issue: https://github.com/milvus-io/milvus/issues/51033
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Co-authored-by: zhuwenxing <wxzhuyeah@gmail.com>
2026-07-08 11:22:33 +08:00
Spade AandGitHub 8764b71bba feat: impl StructArray -- support partial update for struct (#51010)
issue: https://github.com/milvus-io/milvus/issues/49995
ref: https://github.com/milvus-io/milvus/issues/42148
design doc: docs/design-docs/design_docs/20260306-struct.md

Missing parts of sub-fields in struct is not supported in this PR.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-07-03 11:46:28 +08:00
Spade AandGitHub 481ed46d76 feat: impl StructArray -- support csv/json import on more types of vector array (#50753)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc: docs/design-docs/design_docs/20260306-struct.md

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-25 15:34:32 +08:00
Spade AandGitHub f0609ac4d3 feat: impl StructArray -- support bitmap index (#50728)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc: docs/design-docs/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-24 15:22:26 +08:00
Spade AandGitHub 6dc84c51bb enhance: support range search and group-by for element-level hybrid search (#50383)
issue: https://github.com/milvus-io/milvus/issues/42148

  1. Support range search in hybrid search
Enable element-level vector fields to participate in hybrid range search
while preserving element identity and offsets.

  2. Support group-by in hybrid search, with constraints
Enable element-level hybrid search with PK group-by and preserve element
offsets. For group-by, sub-searches that need element identity merging
must stay within the same struct array semantic scope.

  Also, it fixes 2 related bugs:

  1. Fix group-by related issues
Fix lost element indices and incorrect merging behavior in query/search
group-by paths, so multiple matching elements under the same PK can
still be returned with correct offsets.

  2. Fix aggregation output issues
Fix aggregation/count output corruption when a collection contains
struct array fields. Proxy struct-field reconstruction now preserves
virtual aggregation fields such as `count(*)` instead of treating
`field_id=0` as a struct sub-field. As a result, `id + count(*)`,
element-level `count(*)`, and group-by `count(*)` return correctly named
fields.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-24 14:44:26 +08:00
Spade AandGitHub 947bff28ca fix: support array length on struct array parent field (#50681)
issue: https://github.com/milvus-io/milvus/issues/50510
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-23 11:08:26 +08:00
Spade AandGitHub 3a94b08c95 fix: require sufficient rows and vectors before building ArrayOfVector EmbList indexes (#50625)
issue: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-23 11:06:31 +08:00
Spade AandGitHub b71e0b8f2e fix: handle empty element-level vector search bitset (#50581)
issue: https://github.com/milvus-io/milvus/issues/50044
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-22 19:50:25 +08:00
Spade AandGitHub 8ad86bd133 enhance: optimize null predicate for sealed chunked fields (#50558)
issue: https://github.com/milvus-io/milvus/issues/50556

https://github.com/milvus-io/milvus/pull/50436 uses BulkIsValid to
replace get_batch_views in hoping to avoid cost of constructing views
such as StringViews. However, BulkIsValid is random access where the
cost of other staff exceed the benefits which leads to performance
regression.

Constructing any kind of views is still unnecessary, and this PR uses
valid data in Chunk directly. Here benchmarks:
1 million rows of string data, `is null` expression

StringView: ~4300us
BulkIsValid: ~8340us
This PR: 1440us

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-17 10:16:24 +08:00
Spade AandGitHub 282329caab fix: handle nullable vector array offsets by logical rows (#50480)
issue: https://github.com/milvus-io/milvus/issues/50461
ref: https://github.com/milvus-io/milvus/issues/42148

Issue: nullable VectorArray chunks store non-null rows in a compact
physical layout, so logical row indexes can diverge from physical row
indexes when missing/null rows exist. Some access paths use
logical-to-physical translation when reading the vector-array data, but
the offsets returned by VectorArrayOffsets() were still indexed by the
compact physical layout. Sealed segment vector search used logical row
indexes to read those offsets directly, without applying the same
logical-to-physical translation. This could make it read the wrong row
span or read past the valid offsets range, resulting in empty search
results or std::bad_alloc.

Fix: build VectorArrayChunk offsets by logical row count instead of
physical row count. The offsets array now has row_nums + 1 entries and
can be indexed directly by logical row id. Null rows and empty rows both
have a zero-length span, while the existing Chunk valid bitmap preserves
the distinction between null and non-null empty rows.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-12 11:12:20 +08:00
Spade AandGitHub 3521a0633a fix: preserve element indices schema for empty element-level search results (#50417)
issue: https://github.com/milvus-io/milvus/issues/50010
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-12 11:10:26 +08:00
Spade AandGitHub f3b89c72c1 fix: support null predicates on struct array parent fields (#50436)
issue: https://github.com/milvus-io/milvus/issues/50081
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-11 18:08:22 +08:00
Spade AandGitHub 65f248bd73 fix: prevent growing element-level filter from reading past active rows (#50467)
issue: https://github.com/milvus-io/milvus/issues/50333
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-11 17:30:20 +08:00
Spade AandGitHub 49648e8e25 fix: reject invalid ArrayOfVector metric types (#50363)
issue:  https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-11 15:50:20 +08:00
Spade AandGitHub a32026fe62 fix: reject element_filter for row-level vector search (#50301)
issue: https://github.com/milvus-io/milvus/issues/49438
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-10 19:30:20 +08:00
Spade AandGitHub bc95b2ded6 fix: advance MatchExpr child cursor on conjunct short-circuit (#50298)
issue: https://github.com/milvus-io/milvus/issues/49755
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-06-09 14:46:20 +08:00
Spade AandGitHub d7f0751365 fix: fix missing handling of raw index when loading muvera/lemur (#49835)
issue: https://github.com/milvus-io/milvus/issues/49748
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-05-21 15:02:31 +08:00
Spade AandGitHub b944be4a31 feat: impl StructArray -- support dynamic add struct field (#49807)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc: docs/design-docs/design_docs/20260306-struct.md

this PR also fixes https://github.com/milvus-io/milvus/issues/49693

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-05-17 01:02:29 +08:00
Spade AandGitHub de98a6b52d feat: impl StructArray -- support hybrid search for element-level search (#49799)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

For hybrid search, we now support:
- plain topk emblist search
- plain topk element-level search where the search results will dedup
with row id and rerank with others

Not yet support:
- range search
- iterator search
- group by

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-05-15 10:55:12 +08:00
Spade AandGitHub 3fb7c9d63b feat: impl StructArray --- support null for struct array and vector array (#48553)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-05-13 19:34:16 +08:00
Spade AandGitHub 3942b0cc90 fix: deduplicate element-level search results by pk and element offset (#49411)
issue: https://github.com/milvus-io/milvus/issues/49357
ref: https://github.com/milvus-io/milvus/issues/42148

- Fix element-level search reduce to deduplicate by `(pk,
element_index)` instead of `pk` only.
- Apply the same semantics in C++ reduce, group-by reduce, and Go search
result reduce paths.
- Reject legacy search iterator for element-level ArrayOfVector search;
require search iterator v2.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-05-08 14:14:08 +08:00
Spade AandGitHub ed44081b30 fix: record cursor for query iterator in element-level query (#49394)
issue: https://github.com/milvus-io/milvus/issues/49355
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-28 17:01:51 +08:00
Spade AandGitHub 345a7725fe fix: handle empty doc hits in ElementFilterBitsNode offset mode (#49296)
issue: https://github.com/milvus-io/milvus/issues/49260

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-24 14:05:45 +08:00
Spade AandGitHub 568446dfec enhance: optimize memory usage for ArrayOffsets (#49093)
issue: https://github.com/milvus-io/milvus/issues/42148

This PR remove `element_row_ids_` in ArrayOffsets to reduce memory usage
whose memory is O(total element count). Instead, use binary search on
`row_to_element_start_` to calculate the element id.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-23 15:57:44 +08:00
Spade AandGitHub f531b405d2 feat: impl StructArray --- get raw data from index when index has raw data (#48889)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-22 19:13:44 +08:00
Spade AandGitHub 753c1f5825 fix: preserve temp text index state across sealed segment Reopen (#49192)
issue: https://github.com/milvus-io/milvus/issues/49076

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-22 10:41:44 +08:00
Spade AandGitHub a55019d504 feat: impl StructArray --- support range search and iterator search for element-level (#49182)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-22 10:17:44 +08:00
Spade AandGitHub 7d0b8df0c3 feat: impl StructArray -- support index access (#48987)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-16 18:01:42 +08:00
Spade AandGitHub ddd14094ff fix: persist bitmap index valid bitset for nullable array fields (#49008)
issue: https://github.com/milvus-io/milvus/issues/48901

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-16 14:21:41 +08:00
Spade AandGitHub f2f15aa786 feat: impl StructArray -- support ARRAY_LENGTH (#48985)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-14 19:23:48 +08:00
Spade AandGitHub edc5217d41 fix: use binlog memory size for ArrayOfVector field data size estimation in index build (#48843)
issue: https://github.com/milvus-io/milvus/issues/48743,
https://github.com/milvus-io/milvus/issues/49014

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-14 16:55:44 +08:00
Spade AandGitHub e7e321c0a1 fix: fix corruption of offsets between milvus and knowhere (#48754)
issue: https://github.com/milvus-io/milvus/issues/48743

---------

Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-07 21:05:42 +08:00
Spade AandGitHub b1d7b7427a feat: impl StructArray -- support group by primary key for element-level search (#48417)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

This PR:
- Allow element-level search to use group by primary key for doc-level
dedup (non pk is not allowed yet)
- Block embedding list (multi-search-multi) with group by; hybrid search
with ArrayOfVector group by remains blocked

TODO:
- support element-level query to use group by

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-07 14:55:38 +08:00
Spade AandGitHub 4404d822ac fix: more accurate error processing for not element_filter (#48447)
issue: https://github.com/milvus-io/milvus/issues/48413
ref: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-02 15:01:36 +08:00
Spade AandGitHub 74f09d7ace fix: backfill nil ElementIndices for empty search results in element-level reduce (#48683)
issue: https://github.com/milvus-io/milvus/issues/48602
ref: https://github.com/milvus-io/milvus/issues/42148

This PR fixes issue: When performing element_filter search across
multiple segments, if one segment returns 0 hits, C++ reduce creates an
empty `LongArray` for `ElementIndices` which proto3 serializes as absent
(nil). The Go-side reduce then sees inconsistent `ElementIndices` (nil
vs non-nil) across segment results and returns an "inconsistent
element-level flag" error.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-02 14:25:35 +08:00
Spade AandGitHub c7cfe6b8f8 fix: fix missing handling of offsets in QueryResults (#48678)
issue: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-04-02 14:23:42 +08:00
Spade AandGitHub 08cdd63f68 fix: miscellaneous struct array fixes (#48349)
issue: https://github.com/milvus-io/milvus/issues/42148

Correctness:
- JSON/CSV import: reject struct array elements with mismatched field
count
- Parquet import: error on type assertion failure in scalar and vector
paths instead of silent zero-fill/data loss
- JSON import: validate per-vector dimension in ArrayOfVector
FloatVector path
- Move element_level inference from pymilvus into C++
ParsePlaceholderGroup: pymilvus cannot reliably infer if it's
elelment_level as which kinds of search on ArrayOfVector are supported
are determined by metric type but pymilvus does not have this info.
- Fix element-level search returning wrong row IDs on growing segments
with multiple chunks by using cumulative element offset instead of row
offset as begin_id in brute-force search.
https://github.com/milvus-io/milvus/issues/48617
Performance:
- Replace proto.Clone with in-place FieldName mutation in
reconstructStructFieldData

Nested index:
- field name is missing in CreateIndexInfo which is needed to determine
whether the index should be nested or not


Tests: added for all above fixes

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-03-31 17:19:32 +08:00
Spade AandGitHub 786bb24288 fix: change IO related rust unwrap to ? (#48333)
issue: https://github.com/milvus-io/milvus/issues/48320

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-03-23 17:55:28 +08:00
Spade AandGitHub 5bcdbd1573 feat: impl StructArray -- support group by for element-level search (#47252)
issue: https://github.com/milvus-io/milvus/issues/42148

design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-03-15 19:35:24 +08:00
Spade AandGitHub f163e94ff1 feat: impl StructArray -- support element-level query (#47906)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-03-13 17:55:29 +08:00
Spade AandGitHub 076637db5e fix: fix index type error for element-level index in struct array (#48183)
issue: https://github.com/milvus-io/milvus/issues/47622

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-03-12 10:19:24 +08:00
Spade AandGitHub ce9ea20342 feat: impl StructArray -- support ARRAY_CONTAINS* (#47172)
issue: https://github.com/milvus-io/milvus/issues/42148
design doc:
https://github.com/milvus-io/milvus-design-docs/blob/main/design_docs/20260306-struct.md

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-03-06 14:35:21 +08:00
Spade AandGitHub 7a5fd48259 fix: update tantivy release build config (#47723)
issue: https://github.com/milvus-io/milvus/issues/42879

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-02-10 21:18:41 +08:00
Spade AandGitHub ba29e0ba48 fix: stl-sort allows struct scalar fields (#47626)
issue: https://github.com/milvus-io/milvus/issues/47620

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-02-09 10:31:52 +08:00
Spade AandGitHub 1737f94c48 feat: impl StructArray -- support creating index sort stl (#47053)
issue: https://github.com/milvus-io/milvus/issues/42148

1. This PR enable nested index to support stl sort index.
2. In addition, this PR makes element-level filter support full mode as
well as index.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-29 12:07:33 +08:00
Spade AandGitHub f022540ccc enhance: optimize ngram inverted index by executing phase 1/2 in batch expressions (#46999)
issue: https://github.com/milvus-io/milvus/issues/46813

After this PR, if there are some LIKE exprs connected by `and` and ngram
index is enabled, all phase 1 of them will be executed before phase 2.

This PR significantly improve the performance of ngram index in the
situation of multiple LIKE.
Before this PR, LIKE in ngram index is under performed in the case of
multiple LIKE connected with `and` when the intersection of these
results are small. This is because brute force can take advantage of
rows that are filtered while ngram always do all the things which is
solved by this PR.

The following test shows the effect where the dataset is wiki with 20k
rows, and there are 4, 6, 8 LIKE with `and`:
Before this PR
<img width="805" height="678" alt="image"
src="https://github.com/user-attachments/assets/202ea67d-2ed0-400a-b128-529695e438ab"
/>
After this PR
<img width="720" height="707" alt="image"
src="https://github.com/user-attachments/assets/1865e2ad-f1d6-498c-aaf3-652445e7fc6e"
/>

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-21 15:21:30 +08:00
Spade AandGitHub 06aa0440ad fix: handle empty vector array in deserialize (#47128)
issue: https://github.com/milvus-io/milvus/issues/47126

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-20 13:01:30 +08:00
Spade AandGitHub b39de6391b feat: impl StructArray -- add more tests for non-float embedding lists (#46686)
issue: https://github.com/milvus-io/milvus/issues/42148

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: StructArray now accepts only fixed-dimension vector
element types (typeutil.IsFixDimVectorType) for array/struct vector
fields — i.e., dense/quantized fixed-dim vectors (FloatVector,
Float16Vector, BFloat16Vector, Int8Vector, BinaryVector) are supported
while sparse vectors remain rejected at validation
(internal/proxy/util.go → ValidateFieldsInStruct).
- Logic removed / simplified: the previous FloatVector-only special-case
was removed and replaced by a single, generic fixed-dimension check;
numerous duplicated test branches were collapsed into parameterized
fixtures (internal/core/src/common/ChunkWriterTest.cpp: GetByteWidth +
TEST_P/INSTANTIATE_TEST_SUITE_P) and ElementFilter tests were unified
under CreatePlaceholderGroupForType()/ElementFilterSealedParam,
eliminating repetitive type-specific code.
- No data loss / regression rationale (concrete code paths): existing
VECTOR_FLOAT code paths and behavior are preserved — tests explicitly
instantiate VECTOR_FLOAT cases in ChunkWriterTest and ElementFilter;
deserialization now explicitly handles empty ArrayOfVector cases and
returns the correct VectorField by elementType
(internal/storage/serde.go: deserializeArrayOfVector), and StructArray
readers were extended with byte-based branches for
float16/bfloat16/int8/binary without altering FloatVector logic
(internal/util/importutilv2/parquet/struct_field_reader.go), making all
additions additive and failing unsupported sparse vectors early at proxy
validation rather than silently.
- New capability added: full StructArray support for additional
fixed-dimension vector element types (Float16Vector, BFloat16Vector,
Int8Vector, BinaryVector) across import, serde, parquet struct readers,
test generators, and end-to-end tests (files touched include
internal/util/importutilv2/parquet/struct_field_reader.go,
internal/storage/serde.go, pkg/util/testutils/gen_data.go, various
tests), enabling non-float embedding-list and byte-based vector
workflows.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-15 10:13:27 +08:00
Spade AandGitHub 24c87e93c0 feat: impl StructArray -- support creating index for scalar fields (#46599)
issue: https://github.com/milvus-io/milvus/issues/42148

This PR enable struct sub scalar fields to create nested index. The
nested means treating elements in array (we know that all fields in
array of struct are actually array) as separate documents.

The index is used by Struct to speed up Match expression as well as
Element-filter expression. This PR only enable Match expression to be
optmized by index and leave Element-filter expression in the following
PR.
Now, MatchExpr executes sub-expr by using offset inputs. To make it
support index, it also needs to support brute force without offset
inputs, so this PR:
1. enable struct scalar fields to create nested index
2. enable match expr to support brute force without offset input
3. enable match expr to support index

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
2026-01-14 16:53:27 +08:00
Spade AandGitHub a8e3d65851 enhance: optimize ngram inverted index by iterative ngram phase 1 execution (#46917)
issue: https://github.com/milvus-io/milvus/issues/46813

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-14 14:11:27 +08:00
Spade AandGitHub fc1b77c734 fix: change error log to info (#46955)
issue: https://github.com/milvus-io/milvus/issues/45590

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-12 17:13:27 +08:00
Spade AandGitHub c86ea98b8b fix: revert pre-filter bitset usage for ngram (#46987)
issue: https://github.com/milvus-io/milvus/issues/46813
Pre-filter bitset is for batch size while ngram used it as segment size
bitset.
Revert it first.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-12 17:01:27 +08:00
Spade AandGitHub e8aeaf4a75 enhance: optimize ngram inverted index by using previous filter expression result (#46814)
https://github.com/milvus-io/milvus/issues/46813

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2026-01-07 20:07:25 +08:00
Spade AandGitHub 1a6f3c4305 enhance: batch processing for ngram (#46648)
issue: https://github.com/milvus-io/milvus/issues/42053
Process ngram in batch rather than all by once.

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

## Batch Processing for N-gram Queries

**Core Invariant:** All data iteration is now driven by `batch_size_` as
the fundamental unit; for sealed chunked segments processing string/JSON
data, processing is strictly stateless to allow specialized batched
algorithms.

**Simplified Logic:**
- Removed the `process_all_chunks` boolean flag from
`ProcessMultipleChunksCommon` (renamed to
`ProcessDataChunksForMultipleChunk`) as it was redundant—all iteration
paths now converge on the same `batch_size_`-driven chunking strategy
with unified data size clamping (`std::min(chunk_size, batch_size_ -
processed_size)`).
- Eliminated wrapper delegation methods
(`ProcessDataChunksForMultipleChunk` and
`ProcessAllChunksForMultipleChunk` old wrappers) that pointed to a
single common implementation with a conditional flag.

**No Data Loss or Behavior Regression:**
- The new `ProcessAllDataChunkBatched<T>` is an additional stateless
public path (requires sealed + chunked segments, type constraints:
`std::string_view|Json|ArrayView`) that iterates all `num_data_chunk_`
chunks in `batch_size_` granularity without mutating cursor state
(`current_data_chunk_`, `current_data_chunk_pos_`), ensuring
deterministic re-entrant processing.
- Existing cursor-based APIs (`ProcessDataChunksForMultipleChunk`,
`ProcessChunkForSealedSeg`) remain unchanged for standard expression
evaluation—no segment state is corrupted.
- N-gram query execution now routes through
`ExecuteQueryWithPredicate<T, Predicate>(literal, segment, predicate,
need_post_filter)` which forwards generic predicates and delegates to
`segment->ProcessAllDataChunkBatched<T>(execute_batch, res)` for
post-filtering, avoiding per-chunk single-pass traversal.

**Enhancement:** Generic predicate template `template <typename T,
typename Predicate>` with perfect forwarding (`Predicate&& predicate`)
replaces the fixed `std::function<bool(const T&)>` signature,
eliminating function wrapper overhead for n-gram matcher closures and
enabling efficient batch processing callbacks.

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

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-12-30 16:57:22 +08:00
Spade AandGitHub 0114bd1dc9 feat: support match operator family (#46518)
issue: https://github.com/milvus-io/milvus/issues/46517
ref: https://github.com/milvus-io/milvus/issues/42148

This PR supports match operator family with struct array and brute force
search only.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
- Core invariant: match operators only target struct-array element-level
predicates and assume callers provide a correct row_start so element
indices form a contiguous range; IArrayOffsets implementations convert
row-level bitmaps/rows (starting at row_start) into element-level
bitmaps or a contiguous element-offset vector used by brute-force
evaluation.

- New capability added: end-to-end support for MATCH_* semantics
(match_any, match_all, match_least, match_most, match_exact) — parser
(grammar + proto), planner (ParseMatchExprs), expr model
(expr::MatchExpr), compilation (Expr→PhyMatchFilterExpr), execution
(PhyMatchFilterExpr::Eval uses element offsets/bitmaps), and unit tests
(MatchExprTest + parser tests). Implementation currently works for
struct-array inputs and uses brute-force element counting via
RowBitsetToElementOffsets/RowBitsetToElementBitset.

- Logic removed or simplified and why: removed the ad-hoc
DocBitsetToElementOffsets helper and consolidated offset/bitset
derivation into IArrayOffsets::RowBitsetToElementOffsets and a
row_start-aware RowBitsetToElementBitset, and removed EvalCtx overloads
that embedded ExprSet (now EvalCtx(exec_ctx, offset_input)). This
centralizes array-layout logic in ArrayOffsets and removes duplicated
offset conversion and EvalCtx variants that were redundant for
element-level evaluation.

- No data loss / no behavior regression: persistent formats are
unchanged (no proto storage or on-disk layout changed); callers were
updated to supply row_start and now route through the centralized
ArrayOffsets APIs which still use the authoritative
row_to_element_start_ mapping, preserving exact element index mappings.
Eval logic changes are limited to in-memory plumbing (how
offsets/bitmaps are produced and how EvalCtx is constructed); expression
evaluation still invokes exprs_->Eval where needed, so existing behavior
and stored data remain intact.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
2025-12-29 11:03:26 +08:00
Spade AandGitHub ab9bec0a6d fix: some fixes for ngram index (#46405)
issue: https://github.com/milvus-io/milvus/issues/42053

The splitted literals in `match` execution should be handled in `and`
manner rather than `or`.

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-12-19 16:13:19 +08:00
Spade AandGitHub ad8aba7cb4 feat: impl ComputePhraseMatchSlop for compute min slop for phrase match query (#45892)
issue: https://github.com/milvus-io/milvus/issues/45890

ComputePhraseMatchSlop accepts three pararms:
1. A string: query text
2. Some trings: data texts
3. Analyzer params,

Slop will be calculated for the query text with each data text in the
context of phrase match where they are tokenized with tokenizer with
analyzer params.

So two array will be returned:
1. is_match: is phrase match can sucess
2. slop: the related slop if phrase match can sucess, or -1 is cannot.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-12-19 16:03:18 +08:00
Spade AandGitHub f6f716bcfd feat: impl StructArray -- support embedding searches embeddings in embedding list with element level filter expression (#45830)
issue: https://github.com/milvus-io/milvus/issues/42148

For a vector field inside a STRUCT, since a STRUCT can only appear as
the element type of an ARRAY field, the vector field in STRUCT is
effectively an array of vectors, i.e. an embedding list.
Milvus already supports searching embedding lists with metrics whose
names start with the prefix MAX_SIM_.

This PR allows Milvus to search embeddings inside an embedding list
using the same metrics as normal embedding fields. Each embedding in the
list is treated as an independent vector and participates in ANN search.

Further, since STRUCT may contain scalar fields that are highly related
to the embedding field, this PR introduces an element-level filter
expression to refine search results.
The grammar of the element-level filter is:

element_filter(structFieldName, $[subFieldName] == 3)

where $[subFieldName] refers to the value of subFieldName in each
element of the STRUCT array structFieldName.

It can be combined with existing filter expressions, for example:

"varcharField == 'aaa' && element_filter(struct_field, $[struct_int] ==
3)"

A full example:
```
struct_schema = milvus_client.create_struct_field_schema()
struct_schema.add_field("struct_str", DataType.VARCHAR, max_length=65535)
struct_schema.add_field("struct_int", DataType.INT32)
struct_schema.add_field("struct_float_vec", DataType.FLOAT_VECTOR, dim=EMBEDDING_DIM)

schema.add_field(
    "struct_field",
    datatype=DataType.ARRAY,
    element_type=DataType.STRUCT,
    struct_schema=struct_schema,
    max_capacity=1000,
)
...

filter = "varcharField == 'aaa' && element_filter(struct_field, $[struct_int] == 3 && $[struct_str] == 'abc')"
res = milvus_client.search(
    COLLECTION_NAME,
    data=query_embeddings,
    limit=10,
    anns_field="struct_field[struct_float_vec]",
    filter=filter,
    output_fields=["struct_field[struct_int]", "varcharField"],
)

```
TODO:
1. When an `element_filter` expression is used, a regular filter
expression must also be present. Remove this restriction.
2. Implement `element_filter` expressions in the `query`.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-12-15 12:01:15 +08:00
Spade AandGitHub 253449ea18 fix: add timeout for TestArrayStructDataNodeUtil to avoid blocking (#45867)
issue: https://github.com/milvus-io/milvus/issues/45866

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-12-08 14:41:12 +08:00
Spade AandGitHub 3fc309bdfc fix: add more logs related to tantivy upload/cache (#46019)
issue: https://github.com/milvus-io/milvus/issues/45590

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-12-03 10:47:09 +08:00
Spade AandGitHub 08142a4854 fix: fix false negative panic on missing fields (#45902)
issue: https://github.com/milvus-io/milvus/issues/45834

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-11-28 18:05:08 +08:00
Spade AandGitHub 0454cdaab3 fix: remove validateFieldName in dropIndex (#45460)
issue: https://github.com/milvus-io/milvus/issues/45459

This check is unnecessary when dropping index.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-11-14 10:17:37 +08:00
Spade AandGitHub 929dc65882 fix: fix index compatibility after upgrade (#45373)
issue: https://github.com/milvus-io/milvus/issues/45380

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-11-13 12:59:38 +08:00
Spade AandGitHub 6f4abab6c8 fix: nextFieldID does not consider STRUCT (#45437)
issue: https://github.com/milvus-io/milvus/issues/45362

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-11-11 10:31:36 +08:00
c0029b788d fix: alter collection failed with MMAP setting for STRUCT (#45173)
issue: https://github.com/milvus-io/milvus/issues/45001
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
Co-authored-by: aoiasd <zhicheng.yue@zilliz.com>
2025-11-04 20:19:33 +08:00
Spade AandGitHub 2b5241fe5a fix: allow "[" and "]" in index name (#45193)
issue: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
2025-11-04 11:59:34 +08:00
Spade AandGitHub cd0b36c39e feat: impl StructArray -- support diskann index (#45223)
issue: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-11-04 11:57:33 +08:00
Spade AandGitHub ae03dee116 feat: implement ngram tokenizer with token_chars and custom_token_chars (#45040)
issue: https://github.com/milvus-io/milvus/issues/45039

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-11-03 18:09:33 +08:00
Spade AandGitHub ce2862d325 fix: fix parquet import bug in STRUCT (#45028)
issue: https://github.com/milvus-io/milvus/issues/45006
ref: https://github.com/milvus-io/milvus/issues/42148

Previsouly, the parquet import is implemented based on that the STRUCT
in the parquet files is hanlded in the way that each field in struct is
stored in a single column.
However, in the user's perspective, the array of STRUCT contains data is
something like STRUCT_A:
for one row, [struct{field1_1, field2_1, field3_1}, struct{field1_2,
field2_2, field3_2}, ...], rather than {[field1_1, field1_2, ...],
[field2_1, field2_2, ...], [field3_1, field3_2, field3_3, ...]}.

This PR fixes this.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-27 10:26:06 +08:00
Spade AandGitHub 17ab2ac622 fix: fix alter collection failed for STRUCT sub-fields (#45041)
issue: https://github.com/milvus-io/milvus/issues/45001
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-24 10:24:06 +08:00
Spade AandGitHub d8591f9548 fix: csv/json import with STRUCT adapts concatenated struct name (#45000)
After https://github.com/milvus-io/milvus/pull/44557, the field name in
STRUCT field becomes STRUCT_NAME[FIELD_NAME]
This PR make import consider the change.

issue: https://github.com/milvus-io/milvus/issues/45006
ref: https://github.com/milvus-io/milvus/issues/42148

TODO: parquet is much more complex than csv/json, and I will leave it to
a separate PR.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-24 10:22:15 +08:00
Spade AandGitHub 6494c75d31 fix: collection level MMAP does not take effect for STRUCT (#44996)
issue: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-23 19:52:05 +08:00
Spade AandGitHub 6077178553 enhance: enable STL_SORT to support VARCHAR (#44401)
issue: https://github.com/milvus-io/milvus/issues/44399

This PR implements STL_SORT for VARCHAR data type for both RAM and MMAP
mode.
The general idea is that we deduplicate field values and maintains a
posting list for each unique value.

The serialization format of the index is:
```
[unique_count][string_offsets][string_data][post_list_offsets][post_list_data][magic_code]
string_offsets: array of offsets into string_data section
string_data: str_len1, str1, str_len2, str2, ...
post_list_offsets: array of offsets into post_list_data section
post_list_data: post_list_len1, row_id1, row_id2, ..., post_list_len2, row_id1, row_id2, ...
```

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-23 11:00:05 +08:00
Spade AandGitHub b6261f0282 fix: fix "at most one distinct index is allowed per field" in STRUCT index (#44969)
issue: https://github.com/milvus-io/milvus/issues/42148

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-22 19:50:04 +08:00
Spade AandGitHub 34f54da155 fix: reject GEOMETRY and TIMESTAMPTZ in STRUCT (#44937)
issue: https://github.com/milvus-io/milvus/issues/44930

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-20 11:32:05 +08:00
Spade AandGitHub 9c2aeaa258 fix: empty internal InsertMsg caues panic (#44903)
fix: https://github.com/milvus-io/milvus/issues/44901

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-17 10:28:01 +08:00
Spade AandGitHub 6c8e353439 feat: impl StructArray -- ban non-float-vector for now (#44875)
ref https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-17 10:26:09 +08:00
Spade AandGitHub c4f3f0ce4c feat: impl StructArray -- support more types of vector in STRUCT (#44736)
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
2025-10-15 10:25:59 +08:00
Spade AandGitHub b8df1c0cc5 enhance: improve observability in trace for segcore scalar expression (#44260)
Ref https://github.com/milvus-io/milvus/issues/44259

This PR connects the trace between go and segcore, and add full traces
for scalar expression calling chain:
<img width="2418" height="960" alt="image"
src="https://github.com/user-attachments/assets/8cad69d7-bcb7-4002-a4e3-679a3641e229"
/>
<img width="2452" height="850" alt="image"
src="https://github.com/user-attachments/assets/8b44aed0-0f03-48a7-baa0-b022fee994ce"
/>
<img width="2403" height="707" alt="image"
src="https://github.com/user-attachments/assets/cd6f0601-0d5c-4087-8ed8-2385f1bc740b"
/>

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-14 17:15:59 +08:00
Spade AandGitHub 208481a070 feat: impl StructArray -- support same names in different STRUCT (#44557)
ref: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-10-10 15:53:56 +08:00
Spade AandGitHub eb793531b9 feat: impl StructArray -- support import for CSV/JSON/PARQUET/BINLOG (#44201)
Ref https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-15 20:41:59 +08:00
Spade AandGitHub 45adf2d426 fix: load resource considers ngram index (#44237)
fix https://github.com/milvus-io/milvus/issues/44236

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-10 10:27:56 +08:00
Spade AandGitHub 575d490af6 fix: ngram index is mistakenly used for unsopported operations 2 (#44142)
issue: https://github.com/milvus-io/milvus/issues/44020
https://github.com/milvus-io/milvus/pull/43955 only fixed unary
expression
This fixes all expressions and add more tests.

---------

Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-09 19:05:56 +08:00
Spade AandGitHub ba4cd68edb fix: adjust params to make CPP UT run faster (#44223)
fix: https://github.com/milvus-io/milvus/issues/44224

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-06 14:13:54 +08:00
Spade AandGitHub 825a134739 feat: impl StructArray -- reject json types for struct (#44190)
issue: https://github.com/milvus-io/milvus/issues/42148

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-03 19:33:53 +08:00
Spade AandGitHub 03c46e686f fix: ngram index for json rejects type of non-varchar field (#44157)
issue: https://github.com/milvus-io/milvus/issues/43934

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-03 16:45:54 +08:00
Spade AandGitHub 7cb15ef141 feat: impl StructArray -- optimize vector array serialization (#44035)
issue: https://github.com/milvus-io/milvus/issues/42148

Optimized from
Go VectorArray → VectorArray Proto → Binary → C++ VectorArray Proto →
C++ VectorArray local impl → Memory
to
Go VectorArray → Arrow ListArray  → Memory

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-03 16:39:53 +08:00
Spade AandGitHub 1b583e4b54 fix: fixing ngram index rejecting mmap (#44175)
issue: https://github.com/milvus-io/milvus/issues/44164

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-09-03 14:35:53 +08:00
Spade AandGitHub 90a7e63665 enhance: collect doc_id from posting list directly for text match (#43899)
issue: https://github.com/milvus-io/milvus/issues/43898

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-08-27 10:39:52 +08:00
Spade AandGitHub 8456f824be feat: impl StructArray -- miscellaneous staffs for struct array (#43960)
Ref https://github.com/milvus-io/milvus/issues/42148

1. enable storage v2
2. implement some missing staffs
3. fix some bugs and add tests

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-08-26 21:35:53 +08:00
Spade AandGitHub 8e1ce15146 fix: ngram index is mistakenly used for unsopported operations (#43955)
issue: https://github.com/milvus-io/milvus/issues/43917

1. fix ngrma index to be mistakenly used for unsopported operation
2. fix potential uaf problem

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-08-21 14:41:46 +08:00
Spade AandGitHub d6a428e880 feat: impl StructArray -- support create index for vector array (embedding list) and search on it (#43726)
Ref https://github.com/milvus-io/milvus/issues/42148

This PR supports create index for vector array (now, only for
`DataType.FLOAT_VECTOR`) and search on it.
The index type supported in this PR is `EMB_LIST_HNSW` and the metric
type is `MAX_SIM` only.

The way to use it:
```python
milvus_client = MilvusClient("xxx:19530")
schema = milvus_client.create_schema(enable_dynamic_field=True, auto_id=True)
...
struct_schema = milvus_client.create_struct_array_field_schema("struct_array_field")
...
struct_schema.add_field("struct_float_vec", DataType.ARRAY_OF_VECTOR, element_type=DataType.FLOAT_VECTOR, dim=128, max_capacity=1000)
...
schema.add_struct_array_field(struct_schema)
index_params = milvus_client.prepare_index_params()
index_params.add_index(field_name="struct_float_vec", index_type="EMB_LIST_HNSW", metric_type="MAX_SIM", index_params={"nlist": 128})
...
milvus_client.create_index(COLLECTION_NAME, schema=schema, index_params=index_params)
```

Note: This PR uses `Lims` to convey offsets of the vector array to
knowhere where vectors of multiple vector arrays are concatenated and we
need offsets to specify which vectors belong to which vector array.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
2025-08-20 10:27:46 +08:00
Spade AandGitHub 864d1b93b1 enhance: enable stlsort with mmap support (#43359)
issue: https://github.com/milvus-io/milvus/issues/43358

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-07-28 15:32:55 +08:00
Spade AandGitHub faeb7fd410 feat: impl StructArray -- create schema, insert, and retrieve data (#42855)
Ref https://github.com/milvus-io/milvus/issues/42148

https://github.com/milvus-io/milvus/pull/42406 impls the segcore part of
storage for handling with VectorArray.
This PR:
1. impls the go part of storage for VectorArray
2. impls the collection creation with StructArrayField and VectorArray
3. insert and retrieve data from the collection.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <tangchenjie1210@gmail.com>
Signed-off-by: SpadeA-Tang <u6748471@anu.edu.au>
2025-07-27 01:30:55 +08:00
Spade AandGitHub 10fe53ff59 feat: support json for ngram (#43170)
Ref https://github.com/milvus-io/milvus/issues/42053

This PR enable ngram to support json data type.

---------

Signed-off-by: SpadeA <tangchenjie1210@gmail.com>
2025-07-25 10:28:54 +08:00