Parameterize filter short circuit + enable only for search.

This commit is contained in:
Kishore Nallan 2021-10-17 11:34:09 +05:30
parent 9db05986d7
commit 0c459609c0
2 changed files with 9 additions and 5 deletions

View File

@ -507,7 +507,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 do_filtering(uint32_t*& filter_ids, uint32_t& filter_ids_length, const std::vector<filter>& 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<std::string, std::vector<uint32_t>> &token_to_offsets) const;

View File

@ -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<filter>& filters) const {
const std::vector<filter>& 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<filter>& 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<query_tokens_t>& 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();