提交 508da260 编写于 作者: G groot 提交者: JinHai-CN

fix #2578 (#2591)

Signed-off-by: Nyhmo <yihua.mo@zilliz.com>
上级 36d2214f
......@@ -384,14 +384,6 @@ SearchCombineRequest::OnExecute() {
return status;
}
// avoid memcpy crash, check id count = target vector count * topk
if (result_ids.size() != total_count * search_topk_) {
status = Status(DB_ERROR, "Result count doesn't match target vectors count");
// let all request return
FreeRequests(status);
return status;
}
// avoid memcpy crash, check distance count = id count
if (result_distances.size() != result_ids.size()) {
status = Status(DB_ERROR, "Result distance and id count doesn't match");
......@@ -401,18 +393,26 @@ SearchCombineRequest::OnExecute() {
}
// step 5: construct result array
// engine ensure each target vector has same count of id/distance pairs
size_t pair_each_vector = result_ids.size() / vectors_data_.vector_count_;
offset = 0;
for (auto& request : request_list_) {
uint64_t count = request->VectorsData().vector_count_;
int64_t topk = request->TopK();
uint64_t element_cnt = count * topk;
uint64_t pair_cnt = (pair_each_vector > topk) ? topk : pair_each_vector;
TopKQueryResult& result = request->QueryResult();
result.row_num_ = count;
result.id_list_.resize(element_cnt);
result.distance_list_.resize(element_cnt);
memcpy(result.id_list_.data(), result_ids.data() + offset, element_cnt * sizeof(int64_t));
memcpy(result.distance_list_.data(), result_distances.data() + offset, element_cnt * sizeof(float));
offset += (count * search_topk_);
result.id_list_.resize(count * pair_cnt);
result.distance_list_.resize(count * pair_cnt);
for (uint64_t i = 0; i < count; i++) {
uint64_t poz = i * pair_cnt;
memcpy(result.id_list_.data() + poz, result_ids.data() + offset + poz, pair_cnt * sizeof(int64_t));
memcpy(result.distance_list_.data() + poz, result_distances.data() + offset + poz,
pair_cnt * sizeof(float));
}
offset += count * pair_cnt;
// let request return
FreeRequest(request, Status::OK());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册