diff options
Diffstat (limited to 'searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp')
-rw-r--r-- | searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp index 65c103152d3..f937d567588 100644 --- a/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp +++ b/searchlib/src/vespa/searchlib/attribute/postinglistsearchcontext.hpp @@ -127,9 +127,12 @@ PostingListSearchContextT<DataT>::fillBitVector(const ExecuteInfo & exec_info) parts.emplace_back(exec_info.doom(), _posting_store, parts[i-1]._to, num_this_thread, _merger.getDocIdLimit()); } thread_bundle.run(parts); - for (size_t i(1); i < parts.size(); i++) { - master->orWith(*parts[i]._bv); + std::vector<BitVector *> vectors; + vectors.reserve(parts.size()); + for (const auto & part : parts) { + vectors.push_back(part._bv); } + BitVector::parallellOr(thread_bundle, vectors); } template <typename DataT> @@ -167,6 +170,7 @@ PostingListSearchContextT<DataT>::fetchPostings(const ExecuteInfo & exec_info) if (!_merger.merge_done() && _uniqueValues >= 2u && this->_dictionary.get_has_btree_dictionary()) { if (exec_info.is_strict() || use_posting_lists_when_non_strict(exec_info)) { size_t sum = estimated_hits_in_range(); + //TODO Honour soft_doom and forward it to merge code if (sum < (_docIdLimit * threshold_for_using_array)) { _merger.reserveArray(_uniqueValues, sum); fillArray(); |