mirror of
https://github.com/typesense/typesense.git
synced 2025-05-20 05:32:30 +08:00
Parameterize filter short circuit + enable only for search.
This commit is contained in:
parent
9db05986d7
commit
0c459609c0
@ -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;
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user