diff options
Diffstat (limited to 'searchlib/src')
5 files changed, 59 insertions, 0 deletions
diff --git a/searchlib/src/tests/fef/properties/properties_test.cpp b/searchlib/src/tests/fef/properties/properties_test.cpp index 380bbcfce5f..df868de3a97 100644 --- a/searchlib/src/tests/fef/properties/properties_test.cpp +++ b/searchlib/src/tests/fef/properties/properties_test.cpp @@ -262,6 +262,22 @@ TEST("test stuff") { p.add("vespa.dump.ignoredefaultfeatures", "true"); EXPECT_TRUE(dump::IgnoreDefaultFeatures::check(p)); } + { // vespa.matching.split_unpacking_iterators + EXPECT_EQUAL(matching::SplitUnpackingIterators::NAME, vespalib::string("vespa.matching.split_unpacking_iterators")); + EXPECT_EQUAL(matching::SplitUnpackingIterators::DEFAULT_VALUE, false); + Properties p; + EXPECT_EQUAL(matching::SplitUnpackingIterators::check(p), false); + p.add("vespa.matching.split_unpacking_iterators", "true"); + EXPECT_EQUAL(matching::SplitUnpackingIterators::check(p), true); + } + { // vespa.matching.delay_unpacking_iterators + EXPECT_EQUAL(matching::DelayUnpackingIterators::NAME, vespalib::string("vespa.matching.delay_unpacking_iterators")); + EXPECT_EQUAL(matching::DelayUnpackingIterators::DEFAULT_VALUE, false); + Properties p; + EXPECT_EQUAL(matching::DelayUnpackingIterators::check(p), false); + p.add("vespa.matching.delay_unpacking_iterators", "true"); + EXPECT_EQUAL(matching::DelayUnpackingIterators::check(p), true); + } { // vespa.matching.termwise_limit EXPECT_EQUAL(matching::TermwiseLimit::NAME, vespalib::string("vespa.matching.termwise_limit")); EXPECT_EQUAL(matching::TermwiseLimit::DEFAULT_VALUE, 1.0); diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp index dfe0e17c33d..a7df39faf2f 100644 --- a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp +++ b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp @@ -202,6 +202,14 @@ IgnoreDefaultFeatures::check(const Properties &props) namespace matching { +const vespalib::string SplitUnpackingIterators::NAME("vespa.matching.split_unpacking_iterators"); +const bool SplitUnpackingIterators::DEFAULT_VALUE(false); +bool SplitUnpackingIterators::check(const Properties &props) { return lookupBool(props, NAME, DEFAULT_VALUE); } + +const vespalib::string DelayUnpackingIterators::NAME("vespa.matching.delay_unpacking_iterators"); +const bool DelayUnpackingIterators::DEFAULT_VALUE(false); +bool DelayUnpackingIterators::check(const Properties &props) { return lookupBool(props, NAME, DEFAULT_VALUE); } + const vespalib::string TermwiseLimit::NAME("vespa.matching.termwise_limit"); const double TermwiseLimit::DEFAULT_VALUE(1.0); diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.h b/searchlib/src/vespa/searchlib/fef/indexproperties.h index 23efe514d68..9adf4487ec5 100644 --- a/searchlib/src/vespa/searchlib/fef/indexproperties.h +++ b/searchlib/src/vespa/searchlib/fef/indexproperties.h @@ -135,6 +135,28 @@ namespace execute::onsummary { namespace matching { /** + * When enabled, iterators that unpack posting information as part + * of matching may be split into multiple parts (some cheap, some + * expensive). + **/ + struct SplitUnpackingIterators { + static const vespalib::string NAME; + static const bool DEFAULT_VALUE; + static bool check(const Properties &props); + }; + + /** + * When enabled, iterators that unpack posting information as part + * of matching will be tagged as expensive, in order to delay + * their execution within the iterator tree. + **/ + struct DelayUnpackingIterators { + static const vespalib::string NAME; + static const bool DEFAULT_VALUE; + static bool check(const Properties &props); + }; + + /** * A number in the range [0,1] indicating how much of the corpus * the query must match for termwise evaluation to be enabled. 1 * means never allowed. 0 means always allowed. The default value diff --git a/searchlib/src/vespa/searchlib/fef/ranksetup.cpp b/searchlib/src/vespa/searchlib/fef/ranksetup.cpp index eea9188632d..440ea3e0ea1 100644 --- a/searchlib/src/vespa/searchlib/fef/ranksetup.cpp +++ b/searchlib/src/vespa/searchlib/fef/ranksetup.cpp @@ -34,6 +34,9 @@ RankSetup::RankSetup(const BlueprintFactory &factory, const IIndexEnvironment &i _firstPhaseRankFeature(), _secondPhaseRankFeature(), _degradationAttribute(), + _split_unpacking_iterators(false), + _delay_unpacking_iterators(false), + _termwise_limit(1.0), _numThreads(0), _minHitsPerThread(0), _numSearchPartitions(0), @@ -76,6 +79,8 @@ RankSetup::configure() for (uint32_t i = 0; i < dumpFeatures.size(); ++i) { addDumpFeature(dumpFeatures[i]); } + split_unpacking_iterators(matching::SplitUnpackingIterators::check(_indexEnv.getProperties())); + delay_unpacking_iterators(matching::DelayUnpackingIterators::check(_indexEnv.getProperties())); set_termwise_limit(matching::TermwiseLimit::lookup(_indexEnv.getProperties())); setNumThreadsPerSearch(matching::NumThreadsPerSearch::lookup(_indexEnv.getProperties())); setMinHitsPerThread(matching::MinHitsPerThread::lookup(_indexEnv.getProperties())); diff --git a/searchlib/src/vespa/searchlib/fef/ranksetup.h b/searchlib/src/vespa/searchlib/fef/ranksetup.h index ef869c87740..d543794b347 100644 --- a/searchlib/src/vespa/searchlib/fef/ranksetup.h +++ b/searchlib/src/vespa/searchlib/fef/ranksetup.h @@ -31,6 +31,8 @@ private: vespalib::string _firstPhaseRankFeature; vespalib::string _secondPhaseRankFeature; vespalib::string _degradationAttribute; + bool _split_unpacking_iterators; + bool _delay_unpacking_iterators; double _termwise_limit; uint32_t _numThreads; uint32_t _minHitsPerThread; @@ -115,6 +117,12 @@ public: **/ const vespalib::string &getSecondPhaseRank() const { return _secondPhaseRankFeature; } + bool split_unpacking_iterators() const { return _split_unpacking_iterators; } + void split_unpacking_iterators(bool value) { _split_unpacking_iterators = value; } + + bool delay_unpacking_iterators() const { return _delay_unpacking_iterators; } + void delay_unpacking_iterators(bool value) { _delay_unpacking_iterators = value; } + /** * Set the termwise limit * |