Fixed a bug in array exclusion affecting pinned hits.

This commit is contained in:
kishorenc 2020-11-19 23:36:57 +05:30
parent dc25b2684b
commit f52b2597a1
3 changed files with 18 additions and 9 deletions

View File

@ -129,16 +129,11 @@ size_t ArrayUtils::exclude_scalar(const uint32_t *A, const size_t lenA,
results[res_index] = A[indexA];
res_index++;
indexA++;
} else if (A[indexA] == B[indexB]) {
indexA++;
indexB++;
} else {
if (A[indexA] == B[indexB]) {
indexA++;
indexB++;
} else {
results[res_index] = A[indexA];
res_index++;
indexA++;
indexB++;
}
}
}

View File

@ -1574,7 +1574,6 @@ void Index::search_field(const uint8_t & field_id, const std::string & query, co
token_to_costs.erase(token_to_costs.begin()+token_index);
tokens.erase(tokens.begin()+token_index);
costs.erase(costs.begin()+token_index);
token_index--;
}
}

View File

@ -1,5 +1,6 @@
#include <gtest/gtest.h>
#include "array_utils.h"
#include "logger.h"
TEST(SortedArrayTest, AndScalar) {
const size_t size1 = 9;
@ -154,6 +155,20 @@ TEST(SortedArrayTest, FilterArray) {
results_size = ArrayUtils::exclude_scalar(arr1, size1, arr2, vec2.size(), &results);
ASSERT_EQ(0, results_size);
// on a larger array
results = nullptr;
std::vector<uint32_t> vec3 = {58, 118, 185, 260, 322, 334, 353};
std::vector<uint32_t> filter_ids = {58, 103, 116, 117, 137, 154, 191, 210, 211, 284, 299, 302, 306, 309, 332, 334, 360};
std::vector<uint32_t> expected_res = {118, 185, 260, 322, 353};
results_size = ArrayUtils::exclude_scalar(&vec3[0], vec3.size(), &filter_ids[0], filter_ids.size(), &results);
ASSERT_EQ(expected_res.size(), results_size);
for(size_t i=0; i<expected_res.size(); i++) {
ASSERT_EQ(expected_res[i], results[i]);
}
delete[] arr2;
delete[] arr1;
delete[] results;