diff options
author | Geir Storli <geirst@yahooinc.com> | 2023-12-18 16:18:11 +0000 |
---|---|---|
committer | Geir Storli <geirst@yahooinc.com> | 2023-12-18 16:18:11 +0000 |
commit | adb37ca418c465d07bc0d04be522bf49e4964cbe (patch) | |
tree | 8cf4842ee382594f2bf89e4b9215fe15a53f004d /searchlib | |
parent | ee6bc94776a8998ce78353bbf685c8c121b3b41b (diff) |
Rename DocumentWeightOrFilterSearch to MultiTermOrFilterSearch.
Diffstat (limited to 'searchlib')
11 files changed, 62 insertions, 61 deletions
diff --git a/searchlib/CMakeLists.txt b/searchlib/CMakeLists.txt index 219439a1224..d46d9b57789 100644 --- a/searchlib/CMakeLists.txt +++ b/searchlib/CMakeLists.txt @@ -78,7 +78,6 @@ vespa_define_module( src/tests/attribute/dfa_fuzzy_matcher src/tests/attribute/direct_multi_term_blueprint src/tests/attribute/document_weight_iterator - src/tests/attribute/document_weight_or_filter_search src/tests/attribute/enum_attribute_compaction src/tests/attribute/enum_comparator src/tests/attribute/enumeratedsave @@ -87,6 +86,7 @@ vespa_define_module( src/tests/attribute/guard src/tests/attribute/imported_attribute_vector src/tests/attribute/imported_search_context + src/tests/attribute/multi_term_or_filter_search src/tests/attribute/multi_value_mapping src/tests/attribute/multi_value_read_view src/tests/attribute/posting_list_merger diff --git a/searchlib/src/tests/attribute/direct_multi_term_blueprint/direct_multi_term_blueprint_test.cpp b/searchlib/src/tests/attribute/direct_multi_term_blueprint/direct_multi_term_blueprint_test.cpp index 0245af828dd..67b73f459c9 100644 --- a/searchlib/src/tests/attribute/direct_multi_term_blueprint/direct_multi_term_blueprint_test.cpp +++ b/searchlib/src/tests/attribute/direct_multi_term_blueprint/direct_multi_term_blueprint_test.cpp @@ -300,7 +300,7 @@ TEST_P(DirectMultiTermBlueprintTest, filter_iterator_used_for_filter_field_and_r add_term(1); add_term(3); auto itr = create_leaf_search(); - EXPECT_THAT(itr->asString(), StartsWith("search::attribute::DocumentWeightOrFilterSearchImpl")); + EXPECT_THAT(itr->asString(), StartsWith("search::attribute::MultiTermOrFilterSearchImpl")); expect_hits({10, 30, 31}, *itr); } @@ -315,7 +315,7 @@ TEST_P(DirectMultiTermBlueprintTest, bitvectors_and_filter_iterator_used_for_fil expect_or_iterator(*itr, 3); expect_or_child(*itr, 0, "search::BitVectorIteratorStrictT"); expect_or_child(*itr, 1, "search::BitVectorIteratorStrictT"); - expect_or_child(*itr, 2, "search::attribute::DocumentWeightOrFilterSearchImpl"); + expect_or_child(*itr, 2, "search::attribute::MultiTermOrFilterSearchImpl"); expect_hits(concat({10, 30, 31}, concat(range(100, 128), range(300, 128))), *itr); } diff --git a/searchlib/src/tests/attribute/document_weight_or_filter_search/CMakeLists.txt b/searchlib/src/tests/attribute/document_weight_or_filter_search/CMakeLists.txt deleted file mode 100644 index b2f86a9ddec..00000000000 --- a/searchlib/src/tests/attribute/document_weight_or_filter_search/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -vespa_add_executable(searchlib_document_weight_or_filter_search_test_app TEST - SOURCES - document_weight_or_filter_search_test.cpp - DEPENDS - searchlib - searchlib_test - GTest::GTest -) -vespa_add_test(NAME searchlib_document_weight_or_filter_search_test_app COMMAND searchlib_document_weight_or_filter_search_test_app) diff --git a/searchlib/src/tests/attribute/multi_term_or_filter_search/CMakeLists.txt b/searchlib/src/tests/attribute/multi_term_or_filter_search/CMakeLists.txt new file mode 100644 index 00000000000..4ec5d849ad3 --- /dev/null +++ b/searchlib/src/tests/attribute/multi_term_or_filter_search/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchlib_multi_term_or_filter_search_test_app TEST + SOURCES + multi_term_or_filter_search_test.cpp + DEPENDS + searchlib + searchlib_test + GTest::GTest +) +vespa_add_test(NAME searchlib_multi_term_or_filter_search_test_app COMMAND searchlib_multi_term_or_filter_search_test_app) diff --git a/searchlib/src/tests/attribute/document_weight_or_filter_search/document_weight_or_filter_search_test.cpp b/searchlib/src/tests/attribute/multi_term_or_filter_search/multi_term_or_filter_search_test.cpp index ae4812b5437..dea2702ef0d 100644 --- a/searchlib/src/tests/attribute/document_weight_or_filter_search/document_weight_or_filter_search_test.cpp +++ b/searchlib/src/tests/attribute/multi_term_or_filter_search/multi_term_or_filter_search_test.cpp @@ -1,10 +1,10 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/gtest/gtest.h> #include <vespa/searchlib/attribute/i_direct_posting_store.h> -#include <vespa/searchlib/attribute/document_weight_or_filter_search.h> -#include <vespa/searchlib/queryeval/searchiterator.h> +#include <vespa/searchlib/attribute/multi_term_or_filter_search.h> #include <vespa/searchlib/common/bitvector.h> +#include <vespa/searchlib/queryeval/searchiterator.h> +#include <vespa/vespalib/gtest/gtest.h> #define ENABLE_GTEST_MIGRATION #include <vespa/searchlib/test/searchiteratorverifier.h> @@ -12,19 +12,19 @@ using PostingList = search::attribute::PostingListTraits<int32_t>::PostingStoreB using Iterator = search::attribute::PostingListTraits<int32_t>::const_iterator; using KeyData = PostingList::KeyDataType; using search::BitVector; -using search::attribute::DocumentWeightOrFilterSearch; +using search::attribute::MultiTermOrFilterSearch; using search::queryeval::SearchIterator; using vespalib::datastore::EntryRef; -class DocumentWeightOrFilterSearchTest : public ::testing::Test { +class MultiTermOrFilterSearchTest : public ::testing::Test { PostingList _postings; vespalib::GenerationHandler _gens; std::vector<EntryRef> _trees; uint32_t _range_start; uint32_t _range_end; public: - DocumentWeightOrFilterSearchTest(); - ~DocumentWeightOrFilterSearchTest() override; + MultiTermOrFilterSearchTest(); + ~MultiTermOrFilterSearchTest() override; void inc_generation(); size_t num_trees() const { return _trees.size(); } Iterator get_tree(size_t idx) const { @@ -62,7 +62,7 @@ public: for (size_t i = 0; i < num_trees(); ++i) { iterators.emplace_back(get_tree(i)); } - auto result = DocumentWeightOrFilterSearch::create(std::move(iterators)); + auto result = MultiTermOrFilterSearch::create(std::move(iterators)); result->initRange(_range_start, _range_end); return result; }; @@ -121,7 +121,7 @@ public: } }; -DocumentWeightOrFilterSearchTest::DocumentWeightOrFilterSearchTest() +MultiTermOrFilterSearchTest::MultiTermOrFilterSearchTest() : _postings(true), _gens(), _range_start(1), @@ -129,7 +129,7 @@ DocumentWeightOrFilterSearchTest::DocumentWeightOrFilterSearchTest() { } -DocumentWeightOrFilterSearchTest::~DocumentWeightOrFilterSearchTest() +MultiTermOrFilterSearchTest::~MultiTermOrFilterSearchTest() { for (auto& tree : _trees) { _postings.clear(tree); @@ -140,7 +140,7 @@ DocumentWeightOrFilterSearchTest::~DocumentWeightOrFilterSearchTest() } void -DocumentWeightOrFilterSearchTest::inc_generation() +MultiTermOrFilterSearchTest::inc_generation() { _postings.freeze(); _postings.assign_generation(_gens.getCurrentGeneration()); @@ -148,19 +148,19 @@ DocumentWeightOrFilterSearchTest::inc_generation() _postings.reclaim_memory(_gens.get_oldest_used_generation()); } -TEST_F(DocumentWeightOrFilterSearchTest, daat_or) +TEST_F(MultiTermOrFilterSearchTest, daat_or) { make_sample_data(); expect_result(eval_daat(*make_iterator()), { 3, 10, 11, 14, 17, 20 }); } -TEST_F(DocumentWeightOrFilterSearchTest, taat_get_hits) +TEST_F(MultiTermOrFilterSearchTest, taat_get_hits) { make_sample_data(); expect_result(frombv(*make_iterator()->get_hits(get_range_start())), { 3, 10, 11, 14, 17, 20 }); } -TEST_F(DocumentWeightOrFilterSearchTest, taat_or_hits_into) +TEST_F(MultiTermOrFilterSearchTest, taat_or_hits_into) { make_sample_data(); auto bv = tobv({13, 14}); @@ -168,7 +168,7 @@ TEST_F(DocumentWeightOrFilterSearchTest, taat_or_hits_into) expect_result(frombv(*bv), { 3, 10, 11, 13, 14, 17, 20 }); } -TEST_F(DocumentWeightOrFilterSearchTest, taat_and_hits_into) +TEST_F(MultiTermOrFilterSearchTest, taat_and_hits_into) { make_sample_data(); auto bv = tobv({13, 14}); @@ -176,21 +176,21 @@ TEST_F(DocumentWeightOrFilterSearchTest, taat_and_hits_into) expect_result(frombv(*bv), { 14 }); } -TEST_F(DocumentWeightOrFilterSearchTest, daat_or_ranged) +TEST_F(MultiTermOrFilterSearchTest, daat_or_ranged) { make_sample_data(); set_range(4, 15); expect_result(eval_daat(*make_iterator()), {10, 11, 14 }); } -TEST_F(DocumentWeightOrFilterSearchTest, taat_get_hits_ranged) +TEST_F(MultiTermOrFilterSearchTest, taat_get_hits_ranged) { make_sample_data(); set_range(4, 15); expect_result(frombv(*make_iterator()->get_hits(get_range_start())), { 10, 11, 14 }); } -TEST_F(DocumentWeightOrFilterSearchTest, taat_or_hits_into_ranged) +TEST_F(MultiTermOrFilterSearchTest, taat_or_hits_into_ranged) { make_sample_data(); set_range(4, 15); @@ -199,7 +199,7 @@ TEST_F(DocumentWeightOrFilterSearchTest, taat_or_hits_into_ranged) expect_result(frombv(*bv), { 10, 11, 13, 14 }); } -TEST_F(DocumentWeightOrFilterSearchTest, taat_and_hits_into_ranged) +TEST_F(MultiTermOrFilterSearchTest, taat_and_hits_into_ranged) { make_sample_data(); set_range(4, 15); @@ -211,9 +211,9 @@ TEST_F(DocumentWeightOrFilterSearchTest, taat_and_hits_into_ranged) namespace { class Verifier : public search::test::SearchIteratorVerifier { - DocumentWeightOrFilterSearchTest &_test; + MultiTermOrFilterSearchTest &_test; public: - Verifier(DocumentWeightOrFilterSearchTest &test, int num_trees) + Verifier(MultiTermOrFilterSearchTest &test, int num_trees) : _test(test) { std::vector<std::vector<uint32_t>> trees(num_trees); @@ -239,7 +239,7 @@ public: }; -TEST_F(DocumentWeightOrFilterSearchTest, iterator_conformance) +TEST_F(MultiTermOrFilterSearchTest, iterator_conformance) { { Verifier verifier(*this, 1); diff --git a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt index f80e8dbe7be..96bd07bc5a3 100644 --- a/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/attribute/CMakeLists.txt @@ -43,7 +43,6 @@ vespa_add_library(searchlib_attribute OBJECT direct_multi_term_blueprint.cpp distance_metric_utils.cpp diversity.cpp - document_weight_or_filter_search.cpp empty_search_context.cpp enum_store_compaction_spec.cpp enum_store_dictionary.cpp @@ -84,6 +83,7 @@ vespa_add_library(searchlib_attribute OBJECT multi_numeric_search_context.cpp multi_string_enum_hint_search_context.cpp multi_string_enum_search_context.cpp + multi_term_or_filter_search.cpp multi_value_mapping.cpp multi_value_mapping_base.cpp multienumattribute.cpp diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp index 3a5f79ef665..b9adcf3b093 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_blueprint_factory.cpp @@ -5,9 +5,8 @@ #include "attribute_object_visitor.h" #include "attribute_weighted_set_blueprint.h" #include "direct_multi_term_blueprint.h" -#include "document_weight_or_filter_search.h" #include "i_direct_posting_store.h" -#include "posting_iterator_pack.h" +#include "multi_term_or_filter_search.h" #include "predicate_attribute.h" #include <vespa/eval/eval/value.h> #include <vespa/searchlib/common/location.h> @@ -468,7 +467,7 @@ DirectWandBlueprint::createFilterSearch(bool, FilterConstraint constraint) const for (const IDirectPostingStore::LookupResult &r : _terms) { _attr.create(r.posting_idx, iterators); } - return attribute::DocumentWeightOrFilterSearch::create(std::move(iterators)); + return attribute::MultiTermOrFilterSearch::create(std::move(iterators)); } else { return std::make_unique<queryeval::EmptySearch>(); } diff --git a/searchlib/src/vespa/searchlib/attribute/direct_multi_term_blueprint.hpp b/searchlib/src/vespa/searchlib/attribute/direct_multi_term_blueprint.hpp index 5ca943a356d..bb6804f22f1 100644 --- a/searchlib/src/vespa/searchlib/attribute/direct_multi_term_blueprint.hpp +++ b/searchlib/src/vespa/searchlib/attribute/direct_multi_term_blueprint.hpp @@ -3,7 +3,7 @@ #pragma once #include "direct_multi_term_blueprint.h" -#include "document_weight_or_filter_search.h" +#include "multi_term_or_filter_search.h" #include <vespa/searchlib/fef/termfieldmatchdata.h> #include <vespa/searchlib/queryeval/emptysearch.h> #include <vespa/searchlib/queryeval/filter_wrapper.h> @@ -101,7 +101,7 @@ DirectMultiTermBlueprint<PostingStoreType, SearchType>::create_search_helper(con bool use_bit_vector_when_available = is_filter_search || !_attr.has_always_btree_iterator(); auto weights = create_iterators(btree_iterators, bitvectors, use_bit_vector_when_available, *tfmda[0], strict); if (is_filter_search) { - auto filter = !btree_iterators.empty() ? attribute::DocumentWeightOrFilterSearch::create(std::move(btree_iterators)) : std::unique_ptr<SearchIterator>(); + auto filter = !btree_iterators.empty() ? attribute::MultiTermOrFilterSearch::create(std::move(btree_iterators)) : std::unique_ptr<SearchIterator>(); return combine_iterators(std::move(filter), std::move(bitvectors), strict); } bool field_is_filter = getState().fields()[0].isFilter(); diff --git a/searchlib/src/vespa/searchlib/attribute/document_weight_or_filter_search.cpp b/searchlib/src/vespa/searchlib/attribute/multi_term_or_filter_search.cpp index b910e64b665..19668522e17 100644 --- a/searchlib/src/vespa/searchlib/attribute/document_weight_or_filter_search.cpp +++ b/searchlib/src/vespa/searchlib/attribute/multi_term_or_filter_search.cpp @@ -1,6 +1,6 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include "document_weight_or_filter_search.h" +#include "multi_term_or_filter_search.h" #include "posting_iterator_pack.h" #include <vespa/searchlib/fef/matchdata.h> #include <vespa/searchlib/queryeval/iterator_pack.h> @@ -12,13 +12,13 @@ using search::queryeval::SearchIteratorPack; namespace search::attribute { template<typename IteratorPack> -class DocumentWeightOrFilterSearchImpl : public DocumentWeightOrFilterSearch +class MultiTermOrFilterSearchImpl : public MultiTermOrFilterSearch { IteratorPack _children; void seek_all(uint32_t docId); public: - explicit DocumentWeightOrFilterSearchImpl(IteratorPack&& children); - ~DocumentWeightOrFilterSearchImpl() override; + explicit MultiTermOrFilterSearchImpl(IteratorPack&& children); + ~MultiTermOrFilterSearchImpl() override; void doSeek(uint32_t docId) override; @@ -46,18 +46,18 @@ public: }; template<typename IteratorPack> -DocumentWeightOrFilterSearchImpl<IteratorPack>::DocumentWeightOrFilterSearchImpl(IteratorPack&& children) - : DocumentWeightOrFilterSearch(), +MultiTermOrFilterSearchImpl<IteratorPack>::MultiTermOrFilterSearchImpl(IteratorPack&& children) + : MultiTermOrFilterSearch(), _children(std::move(children)) { } template<typename IteratorPack> -DocumentWeightOrFilterSearchImpl<IteratorPack>::~DocumentWeightOrFilterSearchImpl() = default; +MultiTermOrFilterSearchImpl<IteratorPack>::~MultiTermOrFilterSearchImpl() = default; template<typename IteratorPack> void -DocumentWeightOrFilterSearchImpl<IteratorPack>::seek_all(uint32_t docId) { +MultiTermOrFilterSearchImpl<IteratorPack>::seek_all(uint32_t docId) { for (uint16_t i = 0; i < _children.size(); ++i) { uint32_t next = _children.get_docid(i); if (next < docId) { @@ -68,7 +68,7 @@ DocumentWeightOrFilterSearchImpl<IteratorPack>::seek_all(uint32_t docId) { template<typename IteratorPack> void -DocumentWeightOrFilterSearchImpl<IteratorPack>::doSeek(uint32_t docId) +MultiTermOrFilterSearchImpl<IteratorPack>::doSeek(uint32_t docId) { uint32_t min_doc_id = endDocId; for (uint16_t i = 0; i < _children.size(); ++i) { @@ -96,7 +96,7 @@ create_helper(std::vector<IteratorType>&& children) } else { std::sort(children.begin(), children.end(), [](const auto & a, const auto & b) { return a.size() > b.size(); }); - using OrFilter = DocumentWeightOrFilterSearchImpl<IteratorPackType>; + using OrFilter = MultiTermOrFilterSearchImpl<IteratorPackType>; return std::make_unique<OrFilter>(IteratorPackType(std::move(children))); } } @@ -104,25 +104,25 @@ create_helper(std::vector<IteratorType>&& children) } std::unique_ptr<queryeval::SearchIterator> -DocumentWeightOrFilterSearch::create(std::vector<DocidIterator>&& children) +MultiTermOrFilterSearch::create(std::vector<DocidIterator>&& children) { return create_helper<DocidIterator, DocidIteratorPack>(std::move(children)); } std::unique_ptr<queryeval::SearchIterator> -DocumentWeightOrFilterSearch::create(std::vector<DocidWithWeightIterator>&& children) +MultiTermOrFilterSearch::create(std::vector<DocidWithWeightIterator>&& children) { return create_helper<DocidWithWeightIterator, DocidWithWeightIteratorPack>(std::move(children)); } std::unique_ptr<queryeval::SearchIterator> -DocumentWeightOrFilterSearch::create(const std::vector<SearchIterator *>& children, +MultiTermOrFilterSearch::create(const std::vector<SearchIterator *>& children, std::unique_ptr<fef::MatchData> md) { if (children.empty()) { return std::make_unique<queryeval::EmptySearch>(); } else { - using OrFilter = DocumentWeightOrFilterSearchImpl<SearchIteratorPack>; + using OrFilter = MultiTermOrFilterSearchImpl<SearchIteratorPack>; return std::make_unique<OrFilter>(SearchIteratorPack(children, std::move(md))); } } diff --git a/searchlib/src/vespa/searchlib/attribute/document_weight_or_filter_search.h b/searchlib/src/vespa/searchlib/attribute/multi_term_or_filter_search.h index 5ed0dd16d83..42eb33d2eed 100644 --- a/searchlib/src/vespa/searchlib/attribute/document_weight_or_filter_search.h +++ b/searchlib/src/vespa/searchlib/attribute/multi_term_or_filter_search.h @@ -7,13 +7,15 @@ namespace search::fef { class MatchData; } namespace search::attribute { /** - * Filter iterator on top of document weight iterators with OR semantics used during - * calculation of global filter for weighted set terms, wand terms and dot product terms. + * Filter iterator on top of low-level posting list iterators or regular search iterators with OR semantics. + * + * Used during calculation of global filter for InTerm, WeightedSetTerm, DotProduct and WandTerm, + * or when ranking is not needed for InTerm and WeightedSetTerm. */ -class DocumentWeightOrFilterSearch : public queryeval::SearchIterator +class MultiTermOrFilterSearch : public queryeval::SearchIterator { protected: - DocumentWeightOrFilterSearch() = default; + MultiTermOrFilterSearch() = default; public: static std::unique_ptr<SearchIterator> create(std::vector<DocidIterator>&& children); static std::unique_ptr<SearchIterator> create(std::vector<DocidWithWeightIterator>&& children); diff --git a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp index 1cecbca7660..0929f80a8f0 100644 --- a/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/weighted_set_term_search.cpp @@ -2,7 +2,7 @@ #include "weighted_set_term_search.h" #include <vespa/searchlib/common/bitvector.h> -#include <vespa/searchlib/attribute/document_weight_or_filter_search.h> +#include <vespa/searchlib/attribute/multi_term_or_filter_search.h> #include <vespa/vespalib/objects/visit.h> #include <vespa/searchcommon/attribute/i_search_context.h> @@ -175,7 +175,7 @@ WeightedSetTermSearch::create(const std::vector<SearchIterator *> &children, using HeapImpl = WeightedSetTermSearchImpl<vespalib::LeftHeap, SearchIteratorPack>; if (tmd.isNotNeeded()) { - return attribute::DocumentWeightOrFilterSearch::create(children, std::move(match_data)); + return attribute::MultiTermOrFilterSearch::create(children, std::move(match_data)); } if (children.size() < 128) { |