mirror of
https://github.com/typesense/typesense.git
synced 2025-05-17 20:22:32 +08:00
Fix ids init in value based faceting.
This commit is contained in:
parent
03c5918030
commit
f8f9eb89dc
@ -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>
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user