Fix ids init in value based faceting.

This commit is contained in:
Kishore Nallan 2023-08-24 17:15:25 +05:30
parent 03c5918030
commit f8f9eb89dc
3 changed files with 16 additions and 1 deletions

View File

@ -102,6 +102,8 @@ public:
static void to_expanded_id_lists(const std::vector<void*>& raw_id_lists, std::vector<id_list_t*>& id_lists,
std::vector<id_list_t*>& expanded_id_lists);
static void* create(const std::vector<uint32_t>& ids);
};
template<class T>

View File

@ -55,7 +55,7 @@ void facet_index_t::insert(const std::string& field_name, bool is_string,
if(facet_index.has_value_index) {
count_list.emplace_back(fvalue.facet_value, seq_ids.size(), facet_id);
fis.facet_count_it = std::prev(count_list.end());
fis.seq_ids = SET_COMPACT_IDS(compact_id_list_t::create(seq_ids.size(), seq_ids));
fis.seq_ids = ids_t::create(seq_ids);
}
fvalue_index.emplace(fvalue.facet_value, fis);

View File

@ -375,6 +375,19 @@ size_t ids_t::intersect_count(void*& obj, const uint32_t* result_ids, size_t res
}
}
void* ids_t::create(const std::vector<uint32_t>& ids) {
if(ids.size() < COMPACT_LIST_THRESHOLD_LENGTH) {
return SET_COMPACT_IDS(compact_id_list_t::create(ids.size(), ids));
} else {
id_list_t* pl = new id_list_t(ids_t::MAX_BLOCK_ELEMENTS);
for(auto id: ids) {
pl->upsert(id);
}
return pl;
}
}
void ids_t::block_intersector_t::split_lists(size_t concurrency,
std::vector<std::vector<id_list_t::iterator_t>>& partial_its_vec) {
const size_t num_blocks = this->id_lists[0]->num_blocks();