From 9d1bb8497ccf2dfb8b3fe875a0920b8676bddbd7 Mon Sep 17 00:00:00 2001 From: "cai.zhang" Date: Mon, 29 Sep 2025 21:34:54 +0800 Subject: [PATCH] fix: Get R-Tree index correct for growing segment (#44612) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit issue: #43427 R-Tree index is the entire segment, not the chunk. Signed-off-by: Cai Zhang --- internal/core/src/segcore/SegmentGrowingImpl.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/internal/core/src/segcore/SegmentGrowingImpl.h b/internal/core/src/segcore/SegmentGrowingImpl.h index 5d1ec8b5a0..e3b598af80 100644 --- a/internal/core/src/segcore/SegmentGrowingImpl.h +++ b/internal/core/src/segcore/SegmentGrowingImpl.h @@ -397,6 +397,23 @@ class SegmentGrowingImpl : public SegmentGrowing { if (!HasIndex(field_id)) { return {}; } + + auto& field_meta = schema_->operator[](field_id); + + // For geometry fields, return segment-level index (RTree doesn't use chunks) + if (IsGeometryType(field_meta.get_data_type())) { + auto segment_index = indexing_record_.get_field_indexing(field_id) + .get_segment_indexing(); + if (segment_index.get() != nullptr) { + // Convert from PinWrapper to PinWrapper + return { + PinWrapper(segment_index.get())}; + } else { + return {}; + } + } + + // For vector fields, return chunk-level indexes auto num_chunk = num_chunk_index(field_id); std::vector> indexes; for (int64_t i = 0; i < num_chunk; i++) {