diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-09-02 22:51:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-02 22:51:22 +0200 |
commit | ef44d786c39c6bb9d172e16ec9e61eaab2d99d6d (patch) | |
tree | 89a92424023319844a691c10afd1fefd7d22e66b | |
parent | 5efae3a454906bc4697f8b721dc1c9e0238fba9c (diff) | |
parent | 4118ba0bfd445b05f9e4dacde02213d374deff1f (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…
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; } }; } |