未验证 提交 cbba2624 编写于 作者: Y yukun 提交者: GitHub

Fix metric_type bug in search (#3155)

* Fix dsl test case nb bug
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Fix dsl test case bug
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Add metric_type judge in search
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Fix test_search.py
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Fix test_db
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Fix search metric_type
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* ci retry
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>
Co-authored-by: NWang Xiangyu <xy.wang@zilliz.com>
上级 38a3fe76
......@@ -269,6 +269,7 @@ ExecutionEngineImpl::VecSearch(milvus::engine::ExecutionEngineContext& context,
milvus::json conf = vector_param->extra_params;
conf[knowhere::meta::TOPK] = topk;
conf[knowhere::Metric::TYPE] = vector_param->metric_type;
auto adapter = knowhere::AdapterMgr::GetInstance().GetAdapter(vec_index->index_type());
if (!adapter->CheckSearch(conf, vec_index->index_type(), vec_index->index_mode())) {
LOG_ENGINE_ERROR_ << LogOut("[%s][%ld] Illegal search params", "search", 0);
......@@ -498,6 +499,7 @@ ExecutionEngineImpl::ProcessTermQuery(faiss::ConcurrentBitsetPtr& bitset, const
std::unordered_map<std::string, DataType>& attr_type) {
auto status = Status::OK();
auto term_query_json = term_query->json_obj;
JSON_NULL_CHECK(term_query_json);
auto term_it = term_query_json.begin();
if (term_it != term_query_json.end()) {
const std::string& field_name = term_it.key();
......@@ -578,6 +580,7 @@ ExecutionEngineImpl::ProcessRangeQuery(const std::unordered_map<std::string, Dat
auto status = Status::OK();
auto range_query_json = range_query->json_obj;
JSON_NULL_CHECK(range_query_json);
auto range_it = range_query_json.begin();
if (range_it != range_query_json.end()) {
const std::string& field_name = range_it.key();
......
......@@ -79,6 +79,7 @@ struct VectorQuery {
milvus::json extra_params = {};
int64_t topk;
int64_t nq;
std::string metric_type = "";
float boost;
VectorRecord query_vector;
};
......
......@@ -1568,6 +1568,7 @@ GrpcRequestHandler::ProcessLeafQueryJson(const nlohmann::json& json, query::Bool
auto leaf_query = std::make_shared<query::LeafQuery>();
auto term_query = std::make_shared<query::TermQuery>();
nlohmann::json json_obj = json["term"];
JSON_NULL_CHECK(json_obj);
term_query->json_obj = json_obj;
nlohmann::json::iterator json_it = json_obj.begin();
field_name = json_it.key();
......@@ -1578,6 +1579,7 @@ GrpcRequestHandler::ProcessLeafQueryJson(const nlohmann::json& json, query::Bool
auto leaf_query = std::make_shared<query::LeafQuery>();
auto range_query = std::make_shared<query::RangeQuery>();
nlohmann::json json_obj = json["range"];
JSON_NULL_CHECK(json_obj);
range_query->json_obj = json_obj;
nlohmann::json::iterator json_it = json_obj.begin();
field_name = json_it.key();
......@@ -1587,9 +1589,12 @@ GrpcRequestHandler::ProcessLeafQueryJson(const nlohmann::json& json, query::Bool
} else if (json.contains("vector")) {
auto leaf_query = std::make_shared<query::LeafQuery>();
auto vector_json = json["vector"];
JSON_NULL_CHECK(vector_json);
leaf_query->vector_placeholder = vector_json.get<std::string>();
query->AddLeafQuery(leaf_query);
} else {
return Status{SERVER_INVALID_ARGUMENT, "Leaf query get wrong key"};
}
return status;
}
......@@ -1704,6 +1709,8 @@ GrpcRequestHandler::DeserializeJsonToBoolQuery(
}
vector_query->topk = topk;
if (vector_json.contains("metric_type")) {
std::string metric_type = vector_json["metric_type"];
vector_query->metric_type = metric_type;
query_ptr->metric_types.insert({field_name, vector_json["metric_type"]});
}
if (!vector_param_it.value()["params"].empty()) {
......@@ -1722,6 +1729,7 @@ GrpcRequestHandler::DeserializeJsonToBoolQuery(
}
if (dsl_json.contains("bool")) {
auto boolean_query_json = dsl_json["bool"];
JSON_NULL_CHECK(boolean_query_json);
status = ProcessBooleanQueryJson(boolean_query_json, boolean_query, query_ptr);
if (!status.ok()) {
return status;
......
......@@ -17,4 +17,11 @@ namespace milvus {
using json = nlohmann::json;
#define JSON_NULL_CHECK(json) \
do { \
if (json.empty()) { \
return Status{SERVER_INVALID_ARGUMENT, "Json is null"}; \
} \
} while (false)
} // namespace milvus
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册