summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-06-28 21:50:15 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-06-28 21:50:15 +0000
commitf4912fbaab8eb0f0a195c116070c511d77f44776 (patch)
tree7868dfca1688b0e606785c0b014f6395e33084ae /searchcore
parent943849d98f9d1d72ec5b1b0fda3a01ae64cb1ada (diff)
Add flag for controling nested multivalue grouping.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/grouping/grouping.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp23
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingcontext.h5
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingmanager.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingmanager.h6
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/matcher.cpp2
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;