diff --git a/include/art.h b/include/art.h index 9c6276d0..b4e4eba0 100644 --- a/include/art.h +++ b/include/art.h @@ -96,9 +96,9 @@ typedef struct { * of arbitrary size, as they include the key. */ typedef struct { - art_values* values; - int32_t max_score; uint32_t key_len; + int64_t max_score; + art_values* values; unsigned char key[]; } art_leaf; diff --git a/include/index.h b/include/index.h index 470e320a..ee2d3f4b 100644 --- a/include/index.h +++ b/include/index.h @@ -154,30 +154,30 @@ private: size_t & all_result_ids_len, const size_t typo_tokens_threshold); - void insert_doc(const uint32_t score, art_tree *t, uint32_t seq_id, + void insert_doc(const int64_t score, art_tree *t, uint32_t seq_id, const std::unordered_map> &token_to_offsets) const; - void index_string_field(const std::string & text, const uint32_t score, art_tree *t, uint32_t seq_id, + void index_string_field(const std::string & text, const int64_t score, art_tree *t, uint32_t seq_id, int facet_id, const field & a_field); - void index_string_array_field(const std::vector & strings, const uint32_t score, art_tree *t, + void index_string_array_field(const std::vector & strings, const int64_t score, art_tree *t, uint32_t seq_id, int facet_id, const field & a_field); - void index_int32_field(const int32_t value, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_int32_field(const int32_t value, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_int64_field(const int64_t value, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_int64_field(const int64_t value, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_float_field(const float value, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_float_field(const float value, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_bool_field(const bool value, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_bool_field(const bool value, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_int32_array_field(const std::vector & values, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_int32_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_int64_array_field(const std::vector & values, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_int64_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_float_array_field(const std::vector & values, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_float_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const; - void index_bool_array_field(const std::vector & values, const uint32_t score, art_tree *t, uint32_t seq_id) const; + void index_bool_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const; void remove_and_shift_offset_index(sorted_array &offset_index, const uint32_t *indices_sorted, const uint32_t indices_length); @@ -238,7 +238,7 @@ public: spp::sparse_hash_set& groups_processed, const uint32_t *result_ids, const size_t result_size); - static int32_t get_points_from_doc(const nlohmann::json &document, const std::string & default_sorting_field); + static int64_t get_points_from_doc(const nlohmann::json &document, const std::string & default_sorting_field); Option index_in_memory(const nlohmann::json & document, uint32_t seq_id, const std::string & default_sorting_field); diff --git a/src/index.cpp b/src/index.cpp index 21262d01..459f69a3 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -56,8 +56,8 @@ Index::~Index() { sort_index.clear(); } -int32_t Index::get_points_from_doc(const nlohmann::json &document, const std::string & default_sorting_field) { - int32_t points = 0; +int64_t Index::get_points_from_doc(const nlohmann::json &document, const std::string & default_sorting_field) { + int64_t points = 0; if(!default_sorting_field.empty()) { if(document[default_sorting_field].is_number_float()) { @@ -86,7 +86,7 @@ int64_t Index::float_to_in64_t(float f) { Option Index::index_in_memory(const nlohmann::json &document, uint32_t seq_id, const std::string & default_sorting_field) { - int32_t points = get_points_from_doc(document, default_sorting_field); + int64_t points = get_points_from_doc(document, default_sorting_field); std::unordered_map facet_to_id; size_t i_facet = 0; @@ -344,7 +344,7 @@ size_t Index::batch_memory_index(Index *index, std::vector & iter_ return num_indexed; } -void Index::insert_doc(const uint32_t score, art_tree *t, uint32_t seq_id, +void Index::insert_doc(const int64_t score, art_tree *t, uint32_t seq_id, const std::unordered_map> &token_to_offsets) const { for(auto & kv: token_to_offsets) { art_document art_doc; @@ -375,7 +375,7 @@ void Index::insert_doc(const uint32_t score, art_tree *t, uint32_t seq_id, } } -void Index::index_int32_field(const int32_t value, uint32_t score, art_tree *t, uint32_t seq_id) const { +void Index::index_int32_field(const int32_t value, int64_t score, art_tree *t, uint32_t seq_id) const { const int KEY_LEN = 8; unsigned char key[KEY_LEN]; @@ -398,7 +398,7 @@ void Index::index_int32_field(const int32_t value, uint32_t score, art_tree *t, art_insert(t, key, KEY_LEN, &art_doc, num_hits); } -void Index::index_int64_field(const int64_t value, uint32_t score, art_tree *t, uint32_t seq_id) const { +void Index::index_int64_field(const int64_t value, int64_t score, art_tree *t, uint32_t seq_id) const { const int KEY_LEN = 8; unsigned char key[KEY_LEN]; @@ -421,7 +421,7 @@ void Index::index_int64_field(const int64_t value, uint32_t score, art_tree *t, art_insert(t, key, KEY_LEN, &art_doc, num_hits); } -void Index::index_bool_field(const bool value, const uint32_t score, art_tree *t, uint32_t seq_id) const { +void Index::index_bool_field(const bool value, const int64_t score, art_tree *t, uint32_t seq_id) const { const int KEY_LEN = 1; unsigned char key[KEY_LEN]; key[0] = value ? '1' : '0'; @@ -443,7 +443,7 @@ void Index::index_bool_field(const bool value, const uint32_t score, art_tree *t art_insert(t, key, KEY_LEN, &art_doc, num_hits); } -void Index::index_float_field(const float value, uint32_t score, art_tree *t, uint32_t seq_id) const { +void Index::index_float_field(const float value, int64_t score, art_tree *t, uint32_t seq_id) const { const int KEY_LEN = 8; unsigned char key[KEY_LEN]; @@ -484,7 +484,7 @@ uint64_t Index::facet_token_hash(const field & a_field, const std::string &token return hash; } -void Index::index_string_field(const std::string & text, const uint32_t score, art_tree *t, +void Index::index_string_field(const std::string & text, const int64_t score, art_tree *t, uint32_t seq_id, int facet_id, const field & a_field) { std::vector tokens; StringUtils::split(text, tokens, " "); @@ -513,7 +513,7 @@ void Index::index_string_field(const std::string & text, const uint32_t score, a } } -void Index::index_string_array_field(const std::vector & strings, const uint32_t score, art_tree *t, +void Index::index_string_array_field(const std::vector & strings, const int64_t score, art_tree *t, uint32_t seq_id, int facet_id, const field & a_field) { std::unordered_map> token_positions; @@ -565,28 +565,28 @@ void Index::index_string_array_field(const std::vector & strings, c insert_doc(score, t, seq_id, token_positions); } -void Index::index_int32_array_field(const std::vector & values, const uint32_t score, art_tree *t, +void Index::index_int32_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const { for(const int32_t value: values) { index_int32_field(value, score, t, seq_id); } } -void Index::index_int64_array_field(const std::vector & values, const uint32_t score, art_tree *t, +void Index::index_int64_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const { for(const int64_t value: values) { index_int64_field(value, score, t, seq_id); } } -void Index::index_bool_array_field(const std::vector & values, const uint32_t score, art_tree *t, +void Index::index_bool_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const { for(const bool value: values) { index_bool_field(value, score, t, seq_id); } } -void Index::index_float_array_field(const std::vector & values, const uint32_t score, art_tree *t, +void Index::index_float_array_field(const std::vector & values, const int64_t score, art_tree *t, uint32_t seq_id) const { for(const float value: values) { index_float_field(value, score, t, seq_id);