Tweak locking for filtering.

This commit is contained in:
Kishore Nallan 2021-10-02 09:15:57 +05:30
parent 947a5019d9
commit 4c1dc3a495
3 changed files with 12 additions and 8 deletions

View File

@ -500,6 +500,8 @@ private:
size_t concurrency,
std::set<uint64>& query_hashes) const;
void do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length, const std::vector<filter>& filters) const;
void insert_doc(const int64_t score, art_tree *t, uint32_t seq_id,
const std::unordered_map<std::string, std::vector<uint32_t>> &token_to_offsets) const;
@ -694,7 +696,8 @@ public:
art_leaf* get_token_leaf(const std::string & field_name, const unsigned char* token, uint32_t token_len);
void do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length, const std::vector<filter>& filters) const;
void do_filtering_with_lock(uint32_t*& filter_ids, uint32_t& filter_ids_length,
const std::vector<filter>& filters) const;
void refresh_schemas(const std::vector<field>& new_fields);

View File

@ -1346,7 +1346,7 @@ Option<bool> Collection::get_filter_ids(const std::string & simple_filter_query,
uint32_t* filter_ids = nullptr;
uint32_t filter_ids_len = 0;
index->do_filtering(filter_ids, filter_ids_len, filters);
index->do_filtering_with_lock(filter_ids, filter_ids_len, filters);
index_ids.emplace_back(filter_ids_len, filter_ids);
return Option<bool>(true);

View File

@ -1247,8 +1247,6 @@ void Index::search_candidates(const uint8_t & field_id, bool field_is_array,
void Index::do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length,
const std::vector<filter>& filters) const {
//auto begin = std::chrono::high_resolution_clock::now();
std::shared_lock lock(mutex);
for(size_t i = 0; i < filters.size(); i++) {
const filter & a_filter = filters[i];
@ -1620,6 +1618,13 @@ void Index::do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length,
LOG(INFO) << "Time taken for filtering: " << timeMillis << "ms";*/
}
void Index::do_filtering_with_lock(uint32_t*& filter_ids, uint32_t& filter_ids_length,
const std::vector<filter>& filters) const {
std::shared_lock lock(mutex);
do_filtering(filter_ids, filter_ids_length, filters);
}
void Index::run_search(search_args* search_params) {
search(search_params->field_query_tokens,
search_params->search_fields,
@ -2086,12 +2091,8 @@ void Index::search(std::vector<query_tokens_t>& field_query_tokens,
process_filter_overrides(filter_overrides, field_query_tokens, token_order, filters);
lock.unlock();
do_filtering(filter_ids, filter_ids_length, filters);
lock.lock();
// Order of `fields` are used to sort results
//auto begin = std::chrono::high_resolution_clock::now();
uint32_t* all_result_ids = nullptr;