From f8f9eb89dc24f585cc5e1a3c8c8717804129b7cf Mon Sep 17 00:00:00 2001 From: Kishore Nallan Date: Thu, 24 Aug 2023 17:15:25 +0530 Subject: [PATCH] Fix ids init in value based faceting. --- include/ids_t.h | 2 ++ src/facet_index.cpp | 2 +- src/ids_t.cpp | 13 +++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/ids_t.h b/include/ids_t.h index cec677f7..80380557 100644 --- a/include/ids_t.h +++ b/include/ids_t.h @@ -102,6 +102,8 @@ public: static void to_expanded_id_lists(const std::vector& raw_id_lists, std::vector& id_lists, std::vector& expanded_id_lists); + + static void* create(const std::vector& ids); }; template diff --git a/src/facet_index.cpp b/src/facet_index.cpp index 7af3a4da..e51f204c 100644 --- a/src/facet_index.cpp +++ b/src/facet_index.cpp @@ -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); diff --git a/src/ids_t.cpp b/src/ids_t.cpp index 7ee463a3..24ea8541 100644 --- a/src/ids_t.cpp +++ b/src/ids_t.cpp @@ -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& 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>& partial_its_vec) { const size_t num_blocks = this->id_lists[0]->num_blocks();