diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-06-28 21:50:15 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-06-28 21:50:15 +0000 |
commit | f4912fbaab8eb0f0a195c116070c511d77f44776 (patch) | |
tree | 7868dfca1688b0e606785c0b014f6395e33084ae /searchcore | |
parent | 943849d98f9d1d72ec5b1b0fda3a01ae64cb1ada (diff) |
Add flag for controling nested multivalue grouping.
Diffstat (limited to 'searchcore')
6 files changed, 22 insertions, 18 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; |