未验证 提交 cf999b68 编写于 作者: S smellthemoon 提交者: GitHub

Fix range search can not get status from knowhere (#22384)

Signed-off-by: Nlixinguo <xinguo.li@zilliz.com>
Co-authored-by: Nlixinguo <xinguo.li@zilliz.com>
上级 fcd8f7a4
......@@ -19,6 +19,8 @@
#include <stdint.h>
#include "Types.h"
#include "knowhere/comp/index_param.h"
const int64_t INVALID_FIELD_ID = -1;
const int64_t INVALID_SEG_OFFSET = -1;
const milvus::PkType INVALID_PK; // of std::monostate if not set.
......@@ -44,5 +46,5 @@ const int64_t DEFAULT_INDEX_FILE_SLICE_SIZE = 4; // megabytes
const int DEFAULT_CPU_NUM = 1;
constexpr const char* RADIUS = "radius";
constexpr const char* RANGE_FILTER = "range_filter";
constexpr const char* RADIUS = knowhere::meta::RADIUS;
constexpr const char* RANGE_FILTER = knowhere::meta::RANGE_FILTER;
......@@ -157,6 +157,11 @@ VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset, const SearchInfo& search_
CheckRangeSearchParam(search_config[RADIUS], search_config[RANGE_FILTER], GetMetricType());
}
auto res = index_.RangeSearch(*dataset, search_config, bitset);
if (!res.has_value()) {
PanicCodeInfo(ErrorCodeEnum::UnexpectedError,
"failed to range search, " + MatchKnowhereError(res.error()));
}
return SortRangeSearchResult(res.value(), topk, num_queries, GetMetricType());
} else {
auto res = index_.Search(*dataset, search_config, bitset);
......
......@@ -90,6 +90,10 @@ VectorMemIndex::Query(const DatasetPtr dataset, const SearchInfo& search_info, c
CheckRangeSearchParam(search_conf[RADIUS], search_conf[RANGE_FILTER], GetMetricType());
}
auto res = index_.RangeSearch(*dataset, search_conf, bitset);
if (!res.has_value()) {
PanicCodeInfo(ErrorCodeEnum::UnexpectedError,
"failed to range search, " + MatchKnowhereError(res.error()));
}
return SortRangeSearchResult(res.value(), topk, num_queries, GetMetricType());
} else {
auto res = index_.Search(*dataset, search_conf, bitset);
......
......@@ -57,14 +57,18 @@ BruteForceSearch(const dataset::SearchDataset& dataset,
sub_result.mutable_distances().resize(nq * topk);
if (conf.contains(RADIUS)) {
config[RADIUS] = conf[RADIUS];
config[RADIUS] = conf[RADIUS].get<float>();
if (conf.contains(RANGE_FILTER)) {
config[RANGE_FILTER] = conf[RANGE_FILTER];
config[RANGE_FILTER] = conf[RANGE_FILTER].get<float>();
CheckRangeSearchParam(config[RADIUS], config[RANGE_FILTER], dataset.metric_type);
}
auto result = SortRangeSearchResult(
knowhere::BruteForce::RangeSearch(base_dataset, query_dataset, config, bitset).value(), topk, nq,
dataset.metric_type);
auto res = knowhere::BruteForce::RangeSearch(base_dataset, query_dataset, config, bitset);
if (!res.has_value()) {
PanicCodeInfo(ErrorCodeEnum::UnexpectedError,
"failed to range search, " + MatchKnowhereError(res.error()));
}
auto result = SortRangeSearchResult(res.value(), topk, nq, dataset.metric_type);
std::copy_n(GetDatasetIDs(result), nq * topk, sub_result.get_seg_offsets());
std::copy_n(GetDatasetDistance(result), nq * topk, sub_result.get_distances());
} else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册