From 0c459609c00fe5229ca8f7f834ea03fcfa7cd4b7 Mon Sep 17 00:00:00 2001 From: Kishore Nallan Date: Sun, 17 Oct 2021 11:34:09 +0530 Subject: [PATCH] Parameterize filter short circuit + enable only for search. --- include/index.h | 3 ++- src/index.cpp | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/index.h b/include/index.h index 7743ea28..24a68154 100644 --- a/include/index.h +++ b/include/index.h @@ -507,7 +507,8 @@ private: size_t concurrency, std::set& query_hashes) const; - void do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length, const std::vector& filters) const; + void do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length, const std::vector& filters, + const bool enable_short_circuit) const; void insert_doc(const int64_t score, art_tree *t, uint32_t seq_id, const std::unordered_map> &token_to_offsets) const; diff --git a/src/index.cpp b/src/index.cpp index b6bbbaf0..5321f532 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1247,12 +1247,15 @@ 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& filters) const { + const std::vector& filters, + const bool enable_short_circuit) const { //auto begin = std::chrono::high_resolution_clock::now(); for(size_t i = 0; i < filters.size(); i++) { const filter & a_filter = filters[i]; - RETURN_CIRCUIT_BREAKER + if(enable_short_circuit) { + RETURN_CIRCUIT_BREAKER + } if(a_filter.field_name == "id") { // we handle `ids` separately @@ -1638,7 +1641,7 @@ void Index::do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length, void Index::do_filtering_with_lock(uint32_t*& filter_ids, uint32_t& filter_ids_length, const std::vector& filters) const { std::shared_lock lock(mutex); - do_filtering(filter_ids, filter_ids_length, filters); + do_filtering(filter_ids, filter_ids_length, filters, false); } void Index::run_search(search_args* search_params) { @@ -2086,7 +2089,7 @@ void Index::search(std::vector& field_query_tokens, process_filter_overrides(filter_overrides, field_query_tokens, token_order, filters); - do_filtering(filter_ids, filter_ids_length, filters); + do_filtering(filter_ids, filter_ids_length, filters, true); // Order of `fields` are used to sort results //auto begin = std::chrono::high_resolution_clock::now();