From f4912fbaab8eb0f0a195c116070c511d77f44776 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 28 Jun 2023 21:50:15 +0000 Subject: Add flag for controling nested multivalue grouping. --- searchcore/src/tests/grouping/grouping.cpp | 2 +- .../vespa/searchcore/grouping/groupingcontext.cpp | 23 ++++++++++++---------- .../vespa/searchcore/grouping/groupingcontext.h | 5 ++++- .../vespa/searchcore/grouping/groupingmanager.cpp | 2 +- .../vespa/searchcore/grouping/groupingmanager.h | 6 ++---- .../vespa/searchcore/proton/matching/matcher.cpp | 2 +- .../vespa/searchlib/expression/expressiontree.h | 11 ++++++++++- .../src/vespa/searchlib/fef/indexproperties.cpp | 9 +++++++++ .../src/vespa/searchlib/fef/indexproperties.h | 7 +++++++ searchlib/src/vespa/searchlib/fef/ranksetup.cpp | 1 + searchlib/src/vespa/searchlib/fef/ranksetup.h | 2 ++ .../src/vespa/searchvisitor/searchvisitor.cpp | 2 +- 12 files changed, 52 insertions(+), 20 deletions(-) diff --git a/searchcore/src/tests/grouping/grouping.cpp b/searchcore/src/tests/grouping/grouping.cpp index 6afaf06b244..a9d3ffe26db 100644 --- a/searchcore/src/tests/grouping/grouping.cpp +++ b/searchcore/src/tests/grouping/grouping.cpp @@ -170,7 +170,7 @@ TEST_F("testGroupingContextInitialization", DoomFixture()) { nos << (uint32_t)1; baseRequest.serialize(nos); - GroupingContext context(f1.clock.clock(), f1.timeOfDoom, os.data(), os.size()); + GroupingContext context(f1.clock.clock(), f1.timeOfDoom, os.data(), os.size(), true); ASSERT_TRUE(!context.empty()); GroupingContext::GroupingList list = context.getGroupingList(); ASSERT_TRUE(list.size() == 1); diff --git a/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp b/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp index a69cc56e6b3..e313b090674 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp +++ b/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp @@ -48,20 +48,23 @@ GroupingContext::setDistributionKey(uint32_t distributionKey) } } -GroupingContext::GroupingContext(const vespalib::Clock & clock, vespalib::steady_time timeOfDoom, const char *groupSpec, uint32_t groupSpecLen) : - _clock(clock), - _timeOfDoom(timeOfDoom), - _os(), - _groupingList() +GroupingContext::GroupingContext(const vespalib::Clock & clock, vespalib::steady_time timeOfDoom, + const char *groupSpec, uint32_t groupSpecLen, bool enableNested) + : _clock(clock), + _timeOfDoom(timeOfDoom), + _os(), + _groupingList(), + _enableNestedMultivalueGrouping(enableNested) { deserialize(groupSpec, groupSpecLen); } -GroupingContext::GroupingContext(const vespalib::Clock & clock, vespalib::steady_time timeOfDoom) : - _clock(clock), - _timeOfDoom(timeOfDoom), - _os(), - _groupingList() +GroupingContext::GroupingContext(const vespalib::Clock & clock, vespalib::steady_time timeOfDoom) + : _clock(clock), + _timeOfDoom(timeOfDoom), + _os(), + _groupingList(), + _enableNestedMultivalueGrouping(true) { } diff --git a/searchcore/src/vespa/searchcore/grouping/groupingcontext.h b/searchcore/src/vespa/searchcore/grouping/groupingcontext.h index e8114c505ed..af71cf30017 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingcontext.h +++ b/searchcore/src/vespa/searchcore/grouping/groupingcontext.h @@ -26,6 +26,7 @@ private: vespalib::steady_time _timeOfDoom; vespalib::nbostream _os; GroupingList _groupingList; + bool _enableNestedMultivalueGrouping; public: /** @@ -41,7 +42,8 @@ public: * @param groupSpec The grouping specification to use for initialization. * @param groupSpecLen The length of the grouping specification, in bytes. **/ - GroupingContext(const vespalib::Clock & clock, vespalib::steady_time timeOfDoom, const char *groupSpec, uint32_t groupSpecLen); + GroupingContext(const vespalib::Clock & clock, vespalib::steady_time timeOfDoom, + const char *groupSpec, uint32_t groupSpecLen, bool enableNestedMultivalueGrouping); /** * Create a new grouping context from a byte buffer. @@ -112,6 +114,7 @@ public: * @return true if ranking is required. */ bool needRanking() const; + bool enableNestedMultivalueGrouping() const { return _enableNestedMultivalueGrouping; } }; } diff --git a/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp b/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp index 02dced3c737..e907f4a7c76 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp +++ b/searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp @@ -56,7 +56,7 @@ GroupingManager::init(const IAttributeContext &attrCtx) an.enableEnumOptimization(true); } } - ConfigureStaticParams stuff(&attrCtx, nullptr); + ConfigureStaticParams stuff(&attrCtx, nullptr, _groupingContext.enableNestedMultivalueGrouping()); grouping.configureStaticStuff(stuff); list.push_back(groupingList[i]); } catch (const std::exception & e) { diff --git a/searchcore/src/vespa/searchcore/grouping/groupingmanager.h b/searchcore/src/vespa/searchcore/grouping/groupingmanager.h index 6941f519afe..c8b25ba7bf4 100644 --- a/searchcore/src/vespa/searchcore/grouping/groupingmanager.h +++ b/searchcore/src/vespa/searchcore/grouping/groupingmanager.h @@ -20,12 +20,10 @@ class GroupingContext; class GroupingManager { private: - GroupingManager(const GroupingManager &); - GroupingManager &operator=(const GroupingManager &); - GroupingContext &_groupingContext; - public: + GroupingManager(const GroupingManager &) = delete; + GroupingManager &operator=(const GroupingManager &) = delete; /** * Create a new grouping manager. * diff --git a/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp b/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp index 800d0d0aed8..6c215ec5d09 100644 --- a/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp +++ b/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp @@ -207,7 +207,7 @@ Matcher::match(const SearchRequest &request, vespalib::ThreadBundle &threadBundl { // we want to measure full set-up and tear-down time as part of // collateral time GroupingContext groupingContext(_clock, request.getTimeOfDoom(), - request.groupSpec.data(), request.groupSpec.size()); + request.groupSpec.data(), request.groupSpec.size(), _rankSetup->enableNestedMultivalueGrouping()); SessionId sessionId(request.sessionId.data(), request.sessionId.size()); bool shouldCacheSearchSession = false; bool shouldCacheGroupingSession = false; diff --git a/searchlib/src/vespa/searchlib/expression/expressiontree.h b/searchlib/src/vespa/searchlib/expression/expressiontree.h index 34184ae4f2d..7617638ff16 100644 --- a/searchlib/src/vespa/searchlib/expression/expressiontree.h +++ b/searchlib/src/vespa/searchlib/expression/expressiontree.h @@ -24,9 +24,18 @@ class ArrayAtLookup; struct ConfigureStaticParams { ConfigureStaticParams (const attribute::IAttributeContext * attrCtx, const document::DocumentType * docType) - : _attrCtx(attrCtx), _docType(docType) { } + : ConfigureStaticParams(attrCtx, docType, true) + {} + ConfigureStaticParams (const attribute::IAttributeContext * attrCtx, + const document::DocumentType * docType, + bool enableNesteddMultivalueGrouping) + : _attrCtx(attrCtx), + _docType(docType), + _enableNestedMultivalueGrouping(enableNesteddMultivalueGrouping) + { } const attribute::IAttributeContext * _attrCtx; const document::DocumentType * _docType; + bool _enableNestedMultivalueGrouping; }; class ExpressionTree : public ExpressionNode diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp index c993cdeb790..8be44ce0a0c 100644 --- a/searchlib/src/vespa/searchlib/fef/indexproperties.cpp +++ b/searchlib/src/vespa/searchlib/fef/indexproperties.cpp @@ -171,6 +171,15 @@ namespace onsummary { } } +namespace temporary { + +const vespalib::string EnableNestedMultivalueGrouping::NAME("vespa.temporary.enable_nested_multivalue_grouping"); +bool EnableNestedMultivalueGrouping::check(const Properties &props) { + return lookupBool(props, NAME, false); +} + +} + namespace mutate { const vespalib::string AllowQueryOverride::NAME("vespa.mutate.allow_query_override"); diff --git a/searchlib/src/vespa/searchlib/fef/indexproperties.h b/searchlib/src/vespa/searchlib/fef/indexproperties.h index 53f1789b2e0..f538e7bef2e 100644 --- a/searchlib/src/vespa/searchlib/fef/indexproperties.h +++ b/searchlib/src/vespa/searchlib/fef/indexproperties.h @@ -175,6 +175,13 @@ namespace mutate { }; } +namespace temporary { + struct EnableNestedMultivalueGrouping { + 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 0908cb0da58..bdb239fdce2 100644 --- a/searchlib/src/vespa/searchlib/fef/ranksetup.cpp +++ b/searchlib/src/vespa/searchlib/fef/ranksetup.cpp @@ -131,6 +131,7 @@ RankSetup::configure() _mutateOnSummary._attribute = mutate::on_summary::Attribute::lookup(_indexEnv.getProperties()); _mutateOnSummary._operation = mutate::on_summary::Operation::lookup(_indexEnv.getProperties()); _mutateAllowQueryOverride = mutate::AllowQueryOverride::check(_indexEnv.getProperties()); + _enableNestedMultivalueGrouping = temporary::EnableNestedMultivalueGrouping::check(_indexEnv.getProperties()); } void diff --git a/searchlib/src/vespa/searchlib/fef/ranksetup.h b/searchlib/src/vespa/searchlib/fef/ranksetup.h index 3d3cb325525..783c1506ff0 100644 --- a/searchlib/src/vespa/searchlib/fef/ranksetup.h +++ b/searchlib/src/vespa/searchlib/fef/ranksetup.h @@ -82,6 +82,7 @@ private: MutateOperation _mutateOnSecondPhase; MutateOperation _mutateOnSummary; bool _mutateAllowQueryOverride; + bool _enableNestedMultivalueGrouping; void compileAndCheckForErrors(BlueprintResolver &bp); public: @@ -466,6 +467,7 @@ public: const MutateOperation & getMutateOnSummary() const { return _mutateOnSummary; } bool allowMutateQueryOverride() const { return _mutateAllowQueryOverride; } + bool enableNestedMultivalueGrouping() const { return _enableNestedMultivalueGrouping; } }; } diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp index 9d62122af87..b34a5f4407c 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp @@ -930,7 +930,7 @@ SearchVisitor::setupGrouping(const std::vector & groupingBlob) grouping.select(attr2Doc, attr2Doc); LOG(debug, "Grouping # %ld with id(%d)", i, grouping.getId()); try { - ConfigureStaticParams stuff(_attrCtx.get(), &_docTypeMapping.getCurrentDocumentType()); + ConfigureStaticParams stuff(_attrCtx.get(), &_docTypeMapping.getCurrentDocumentType(), false); grouping.configureStaticStuff(stuff); HitsResultPreparator preparator(_summaryGenerator); grouping.select(preparator, preparator); -- cgit v1.2.3