aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2019-09-09 08:50:10 +0000
committerHåvard Pettersen <havardpe@oath.com>2019-09-12 08:16:56 +0000
commitd385fbe52c37b1bf896a4e16328349ac756ee4f4 (patch)
tree14714c1dada643e40bb45d5d32d8dc2fcdf5b5a9 /searchlib
parentb741895853fec582fb45dee42b8c78057118d0b8 (diff)
added rank config for split/delay flags
used to control how unpacking iterators are optimized and sorted
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/fef/properties/properties_test.cpp16
-rw-r--r--searchlib/src/vespa/searchlib/fef/indexproperties.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/fef/indexproperties.h22
-rw-r--r--searchlib/src/vespa/searchlib/fef/ranksetup.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/fef/ranksetup.h8
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
*