Skip to content

Commit 305601a

Browse files
authored
Add API SearchOnSealedChunk() to search on sealed segment without index (milvus-io#18830)
Signed-off-by: yudong.cai <[email protected]> Signed-off-by: yudong.cai <[email protected]>
1 parent ef9098f commit 305601a

File tree

4 files changed

+57
-31
lines changed

4 files changed

+57
-31
lines changed

internal/core/src/query/SearchOnSealed.cpp

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,20 @@
1616
#include "knowhere/index/vector_index/ConfAdapterMgr.h"
1717
#include "knowhere/index/vector_index/helpers/IndexParameter.h"
1818
#include "knowhere/index/vector_index/adapter/VectorAdapter.h"
19+
#include "query/SearchBruteForce.h"
1920
#include "query/SearchOnSealed.h"
21+
#include "query/helper.h"
2022

2123
namespace milvus::query {
2224

2325
void
24-
SearchOnSealed(const Schema& schema,
25-
const segcore::SealedIndexingRecord& record,
26-
const SearchInfo& search_info,
27-
const void* query_data,
28-
int64_t num_queries,
29-
const BitsetView& bitset,
30-
SearchResult& result) {
26+
SearchOnSealedIndex(const Schema& schema,
27+
const segcore::SealedIndexingRecord& record,
28+
const SearchInfo& search_info,
29+
const void* query_data,
30+
int64_t num_queries,
31+
const BitsetView& bitset,
32+
SearchResult& result) {
3133
auto topk = search_info.topk_;
3234
auto round_decimal = search_info.round_decimal_;
3335

@@ -77,4 +79,30 @@ SearchOnSealed(const Schema& schema,
7779
std::copy_n(ids, total_num, result.seg_offsets_.data());
7880
std::copy_n(distances, total_num, result.distances_.data());
7981
}
82+
83+
void
84+
SearchOnSealed(const Schema& schema,
85+
const segcore::InsertRecord& record,
86+
const SearchInfo& search_info,
87+
const void* query_data,
88+
int64_t num_queries,
89+
int64_t row_count,
90+
const BitsetView& bitset,
91+
SearchResult& result) {
92+
auto field_id = search_info.field_id_;
93+
auto& field = schema[field_id];
94+
95+
query::dataset::SearchDataset dataset{search_info.metric_type_, num_queries, search_info.topk_,
96+
search_info.round_decimal_, field.get_dim(), query_data};
97+
auto vec_data = record.get_field_data_base(field_id);
98+
AssertInfo(vec_data->num_chunk() == 1, "num chunk not equal to 1 for sealed segment");
99+
auto chunk_data = vec_data->get_chunk_data(0);
100+
auto sub_qr = query::BruteForceSearch(dataset, chunk_data, row_count, bitset);
101+
102+
result.distances_ = std::move(sub_qr.mutable_distances());
103+
result.seg_offsets_ = std::move(sub_qr.mutable_seg_offsets());
104+
result.unity_topK_ = dataset.topk;
105+
result.total_nq_ = dataset.num_queries;
106+
}
107+
80108
} // namespace milvus::query

internal/core/src/query/SearchOnSealed.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,23 @@
1818

1919
namespace milvus::query {
2020

21+
void
22+
SearchOnSealedIndex(const Schema& schema,
23+
const segcore::SealedIndexingRecord& record,
24+
const SearchInfo& search_info,
25+
const void* query_data,
26+
int64_t num_queries,
27+
const BitsetView& view,
28+
SearchResult& result);
29+
2130
void
2231
SearchOnSealed(const Schema& schema,
23-
const segcore::SealedIndexingRecord& record,
32+
const segcore::InsertRecord& record,
2433
const SearchInfo& search_info,
2534
const void* query_data,
2635
int64_t num_queries,
27-
const BitsetView& view,
36+
int64_t row_count,
37+
const BitsetView& bitset,
2838
SearchResult& result);
2939

3040
} // namespace milvus::query

internal/core/src/segcore/SegmentGrowingImpl.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ SegmentGrowingImpl::vector_search(query::SearchInfo& search_info,
184184
SearchResult& output) const {
185185
auto& sealed_indexing = this->get_sealed_indexing_record();
186186
if (sealed_indexing.is_ready(search_info.field_id_)) {
187-
query::SearchOnSealed(this->get_schema(), sealed_indexing, search_info, query_data, query_count, bitset,
188-
output);
187+
query::SearchOnSealedIndex(this->get_schema(), sealed_indexing, search_info, query_data, query_count, bitset,
188+
output);
189189
} else {
190190
query::SearchOnGrowing(*this, search_info, query_data, query_count, timestamp, bitset, output);
191191
}

internal/core/src/segcore/SegmentSealedImpl.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -363,27 +363,15 @@ SegmentSealedImpl::vector_search(query::SearchInfo& search_info,
363363
if (get_bit(index_ready_bitset_, field_id)) {
364364
AssertInfo(vector_indexings_.is_ready(field_id),
365365
"vector indexes isn't ready for field " + std::to_string(field_id.get()));
366-
query::SearchOnSealed(*schema_, vector_indexings_, search_info, query_data, query_count, bitset, output);
367-
return;
368-
} else if (!get_bit(field_data_ready_bitset_, field_id)) {
369-
PanicInfo("Field Data is not loaded");
366+
query::SearchOnSealedIndex(*schema_, vector_indexings_, search_info, query_data, query_count, bitset, output);
367+
} else {
368+
AssertInfo(get_bit(field_data_ready_bitset_, field_id),
369+
"Field Data is not loaded: " + std::to_string(field_id.get()));
370+
AssertInfo(row_count_opt_.has_value(), "Can't get row count value");
371+
auto row_count = row_count_opt_.value();
372+
query::SearchOnSealed(*schema_, insert_record_, search_info, query_data, query_count, row_count, bitset,
373+
output);
370374
}
371-
372-
query::dataset::SearchDataset dataset{search_info.metric_type_, query_count, search_info.topk_,
373-
search_info.round_decimal_, field_meta.get_dim(), query_data};
374-
AssertInfo(get_bit(field_data_ready_bitset_, field_id),
375-
"Can't get bitset element at " + std::to_string(field_id.get()));
376-
AssertInfo(row_count_opt_.has_value(), "Can't get row count value");
377-
auto row_count = row_count_opt_.value();
378-
auto vec_data = insert_record_.get_field_data_base(field_id);
379-
AssertInfo(vec_data->num_chunk() == 1, "num chunk not equal to 1 for sealed segment");
380-
auto chunk_data = vec_data->get_chunk_data(0);
381-
auto sub_qr = query::BruteForceSearch(dataset, chunk_data, row_count, bitset);
382-
383-
output.distances_ = std::move(sub_qr.mutable_distances());
384-
output.seg_offsets_ = std::move(sub_qr.mutable_seg_offsets());
385-
output.unity_topK_ = dataset.topk;
386-
output.total_nq_ = dataset.num_queries;
387375
}
388376

389377
void

0 commit comments

Comments
 (0)