Refine logs when search with unsupported metric type (#12185)

Signed-off-by: dragondriver <jiquan.long@zilliz.com>
pull/12196/head
dragondriver 2021-11-23 10:13:14 +08:00 committed by GitHub
parent 7a0d5ed6c4
commit 73f18c564f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 96 additions and 2 deletions

View File

@ -45,7 +45,7 @@ EasyAssertInfo(bool value,
info += " => " + std::string(extra_info);
}
std::cout << info << std::endl;
throw SegcoreError(error_code, std::string(extra_info));
throw SegcoreError(error_code, std::string(info));
}
}

View File

@ -14,7 +14,9 @@
#include <common/Types.h>
#include <boost/dynamic_bitset.hpp>
#include <queue>
#include <string>
#include "SubSearchResult.h"
#include "segcore/Utils.h"
#include <faiss/utils/distances.h>
#include <faiss/utils/BinaryDistance.h>
@ -57,7 +59,9 @@ raw_search(MetricType metric_type,
// only matched ids will be chosen, not to use heap
binary_distance_knn_mc(metric_type, x, xb, n, ntotal, k, code_size, D, labels, bitset);
} else {
PanicInfo("unsupported");
std::string msg = std::string("do binary search with unsupported metric type: ") +
segcore::FaissMetricTypeToString(metric_type);
PanicInfo(msg);
}
}

View File

@ -0,0 +1,54 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
#include <stdlib.h>
#include <string>
#include <exception>
#include <stdexcept>
#include "index/thirdparty/faiss/MetricType.h"
namespace milvus {
namespace segcore {
static inline constexpr const char*
FaissMetricTypeToString(faiss::MetricType metric_type) {
switch (metric_type) {
case faiss::MetricType::METRIC_INNER_PRODUCT:
return "METRIC_INNER_PRODUCT";
case faiss::MetricType::METRIC_L2:
return "METRIC_L2";
case faiss::MetricType::METRIC_L1:
return "METRIC_L1";
case faiss::MetricType::METRIC_Linf:
return "METRIC_Linf";
case faiss::MetricType::METRIC_Lp:
return "METRIC_Lp";
case faiss::MetricType::METRIC_Jaccard:
return "METRIC_Jaccard";
case faiss::MetricType::METRIC_Tanimoto:
return "METRIC_Tanimoto";
case faiss::MetricType::METRIC_Hamming:
return "METRIC_Hamming";
case faiss::MetricType::METRIC_Substructure:
return "METRIC_Substructure";
case faiss::MetricType::METRIC_Superstructure:
return "METRIC_Superstructure";
case faiss::MetricType::METRIC_Canberra:
return "METRIC_Canberra";
case faiss::MetricType::METRIC_BrayCurtis:
return "METRIC_BrayCurtis";
case faiss::MetricType::METRIC_JensenShannon:
return "METRIC_JensenShannon";
default:
return "Unsupported";
}
}
} // namespace segcore
} // namespace milvus

View File

@ -37,6 +37,7 @@ set(MILVUS_TEST_FILES
test_reduce_c.cpp
test_conf_adapter_mgr.cpp
test_similarity_corelation.cpp
test_utils.cpp
)
add_executable(all_tests

View File

@ -0,0 +1,35 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
#include "index/thirdparty/faiss/MetricType.h"
#include "segcore/Utils.h"
#include <string.h>
#include <gtest/gtest.h>
TEST(Util, FaissMetricTypeToString) {
using namespace milvus::segcore;
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_INNER_PRODUCT), "METRIC_INNER_PRODUCT"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_L2), "METRIC_L2"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_L1), "METRIC_L1"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Linf), "METRIC_Linf"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Lp), "METRIC_Lp"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Jaccard), "METRIC_Jaccard"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Tanimoto), "METRIC_Tanimoto"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Hamming), "METRIC_Hamming"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Substructure), "METRIC_Substructure"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Superstructure), "METRIC_Superstructure"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_Canberra), "METRIC_Canberra"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_BrayCurtis), "METRIC_BrayCurtis"));
ASSERT_EQ(0, strcmp(FaissMetricTypeToString(faiss::MetricType::METRIC_JensenShannon), "METRIC_JensenShannon"));
}