summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-09-02 22:51:22 +0200
committerGitHub <noreply@github.com>2022-09-02 22:51:22 +0200
commitef44d786c39c6bb9d172e16ec9e61eaab2d99d6d (patch)
tree89a92424023319844a691c10afd1fefd7d22e66b
parent5efae3a454906bc4697f8b721dc1c9e0238fba9c (diff)
parent4118ba0bfd445b05f9e4dacde02213d374deff1f (diff)
Merge pull request #23912 from vespa-engine/balder/explicit-allow-query-control-of-mutate
Rank-property 'vespa.mutate.allow_query_override: true' must be set i…
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp44
-rw-r--r--searchlib/src/vespa/searchlib/fef/indexproperties.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/fef/indexproperties.h8
-rw-r--r--searchlib/src/vespa/searchlib/fef/ranksetup.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/fef/ranksetup.h3
5 files changed, 47 insertions, 17 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp
index 6fecdbf611c..e29ce5cd4f3 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_tools.cpp
@@ -49,22 +49,22 @@ bool contains_all(const HandleRecorder::HandleMap &old_map,
DegradationParams
extractDegradationParams(const RankSetup &rankSetup, const Properties &rankProperties)
{
- return DegradationParams(DegradationAttribute::lookup(rankProperties, rankSetup.getDegradationAttribute()),
- DegradationMaxHits::lookup(rankProperties, rankSetup.getDegradationMaxHits()),
- !DegradationAscendingOrder::lookup(rankProperties, rankSetup.isDegradationOrderAscending()),
- DegradationMaxFilterCoverage::lookup(rankProperties, rankSetup.getDegradationMaxFilterCoverage()),
- DegradationSamplePercentage::lookup(rankProperties, rankSetup.getDegradationSamplePercentage()),
- DegradationPostFilterMultiplier::lookup(rankProperties, rankSetup.getDegradationPostFilterMultiplier()));
+ return { DegradationAttribute::lookup(rankProperties, rankSetup.getDegradationAttribute()),
+ DegradationMaxHits::lookup(rankProperties, rankSetup.getDegradationMaxHits()),
+ !DegradationAscendingOrder::lookup(rankProperties, rankSetup.isDegradationOrderAscending()),
+ DegradationMaxFilterCoverage::lookup(rankProperties, rankSetup.getDegradationMaxFilterCoverage()),
+ DegradationSamplePercentage::lookup(rankProperties, rankSetup.getDegradationSamplePercentage()),
+ DegradationPostFilterMultiplier::lookup(rankProperties, rankSetup.getDegradationPostFilterMultiplier())};
}
DiversityParams
extractDiversityParams(const RankSetup &rankSetup, const Properties &rankProperties)
{
- return DiversityParams(DiversityAttribute::lookup(rankProperties, rankSetup.getDiversityAttribute()),
- DiversityMinGroups::lookup(rankProperties, rankSetup.getDiversityMinGroups()),
- DiversityCutoffFactor::lookup(rankProperties, rankSetup.getDiversityCutoffFactor()),
- AttributeLimiter::toDiversityCutoffStrategy(DiversityCutoffStrategy::lookup(rankProperties, rankSetup.getDiversityCutoffStrategy())));
+ return { DiversityAttribute::lookup(rankProperties, rankSetup.getDiversityAttribute()),
+ DiversityMinGroups::lookup(rankProperties, rankSetup.getDiversityMinGroups()),
+ DiversityCutoffFactor::lookup(rankProperties, rankSetup.getDiversityCutoffFactor()),
+ AttributeLimiter::toDiversityCutoffStrategy(DiversityCutoffStrategy::lookup(rankProperties, rankSetup.getDiversityCutoffStrategy())) };
}
} // namespace proton::matching::<unnamed>
@@ -267,20 +267,32 @@ MatchToolsFactory::createOnFirstPhaseTask() const {
const auto & op = _rankSetup.getMutateOnFirstPhase();
// Note that combining onmatch in query with first-phase is not a bug.
// It is intentional, as the semantics of onmatch in query are identical to on-first-phase.
- return createTask(execute::onmatch::Attribute::lookup(_queryEnv.getProperties(), op._attribute),
- execute::onmatch::Operation::lookup(_queryEnv.getProperties(), op._operation));
+ if (_rankSetup.allowMutateQueryOverride()) {
+ return createTask(execute::onmatch::Attribute::lookup(_queryEnv.getProperties(), op._attribute),
+ execute::onmatch::Operation::lookup(_queryEnv.getProperties(), op._operation));
+ } else {
+ return createTask(op._attribute, op._operation);
+ }
}
std::unique_ptr<AttributeOperationTask>
MatchToolsFactory::createOnSecondPhaseTask() const {
const auto & op = _rankSetup.getMutateOnSecondPhase();
- return createTask(execute::onrerank::Attribute::lookup(_queryEnv.getProperties(), op._attribute),
- execute::onrerank::Operation::lookup(_queryEnv.getProperties(), op._operation));
+ if (_rankSetup.allowMutateQueryOverride()) {
+ return createTask(execute::onrerank::Attribute::lookup(_queryEnv.getProperties(), op._attribute),
+ execute::onrerank::Operation::lookup(_queryEnv.getProperties(), op._operation));
+ } else {
+ return createTask(op._attribute, op._operation);
+ }
}
std::unique_ptr<AttributeOperationTask>
MatchToolsFactory::createOnSummaryTask() const {
const auto & op = _rankSetup.getMutateOnSummary();
- return createTask(execute::onsummary::Attribute::lookup(_queryEnv.getProperties(), op._attribute),
- execute::onsummary::Operation::lookup(_queryEnv.getProperties(), op._operation));
+ if (_rankSetup.allowMutateQueryOverride()) {
+ return createTask(execute::onsummary::Attribute::lookup(_queryEnv.getProperties(), op._attribute),
+ execute::onsummary::Operation::lookup(_queryEnv.getProperties(), op._operation));
+ } else {
+ return createTask(op._attribute, op._operation);
+ }
}
bool
diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp
index 6ede2eca73c..ce0d73807a0 100644
--- a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp
+++ b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp
@@ -173,6 +173,11 @@ namespace onsummary {
namespace mutate {
+const vespalib::string AllowQueryOverride::NAME("vespa.mutate.allow_query_override");
+bool AllowQueryOverride::check(const Properties &props) {
+ return lookupBool(props, NAME, false);
+}
+
namespace on_match {
const vespalib::string Attribute::NAME("vespa.mutate.on_match.attribute");
diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.h b/searchlib/src/vespa/searchlib/fef/indexproperties.h
index fb6c0e5560b..a2b83fc2193 100644
--- a/searchlib/src/vespa/searchlib/fef/indexproperties.h
+++ b/searchlib/src/vespa/searchlib/fef/indexproperties.h
@@ -167,6 +167,14 @@ namespace execute::onsummary {
};
}
+namespace mutate {
+ //TODO Remove October 2022
+ struct AllowQueryOverride {
+ static const vespalib::string NAME;
+ static bool check(const Properties &props);
+ };
+}
+
namespace mutate::on_match {
struct Attribute {
static const vespalib::string NAME;
diff --git a/searchlib/src/vespa/searchlib/fef/ranksetup.cpp b/searchlib/src/vespa/searchlib/fef/ranksetup.cpp
index f725756c269..a314ce9c5e1 100644
--- a/searchlib/src/vespa/searchlib/fef/ranksetup.cpp
+++ b/searchlib/src/vespa/searchlib/fef/ranksetup.cpp
@@ -71,7 +71,8 @@ RankSetup::RankSetup(const BlueprintFactory &factory, const IIndexEnvironment &i
_mutateOnMatch(),
_mutateOnFirstPhase(),
_mutateOnSecondPhase(),
- _mutateOnSummary()
+ _mutateOnSummary(),
+ _mutateAllowQueryOverride(false)
{ }
RankSetup::~RankSetup() = default;
@@ -129,6 +130,7 @@ RankSetup::configure()
_mutateOnSecondPhase._operation = mutate::on_second_phase::Operation::lookup(_indexEnv.getProperties());
_mutateOnSummary._attribute = mutate::on_summary::Attribute::lookup(_indexEnv.getProperties());
_mutateOnSummary._operation = mutate::on_summary::Operation::lookup(_indexEnv.getProperties());
+ _mutateAllowQueryOverride = mutate::AllowQueryOverride::check(_indexEnv.getProperties());
}
void
diff --git a/searchlib/src/vespa/searchlib/fef/ranksetup.h b/searchlib/src/vespa/searchlib/fef/ranksetup.h
index 866bf2286db..7e08e3c7d17 100644
--- a/searchlib/src/vespa/searchlib/fef/ranksetup.h
+++ b/searchlib/src/vespa/searchlib/fef/ranksetup.h
@@ -82,6 +82,7 @@ private:
MutateOperation _mutateOnFirstPhase;
MutateOperation _mutateOnSecondPhase;
MutateOperation _mutateOnSummary;
+ bool _mutateAllowQueryOverride;
void compileAndCheckForErrors(BlueprintResolver &bp);
public:
@@ -467,6 +468,8 @@ public:
const MutateOperation & getMutateOnFirstPhase() const { return _mutateOnFirstPhase; }
const MutateOperation & getMutateOnSecondPhase() const { return _mutateOnSecondPhase; }
const MutateOperation & getMutateOnSummary() const { return _mutateOnSummary; }
+
+ bool allowMutateQueryOverride() const { return _mutateAllowQueryOverride; }
};
}