aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--searchlib/src/vespa/searchlib/expression/expressiontree.h11
-rw-r--r--searchlib/src/vespa/searchlib/fef/indexproperties.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/fef/indexproperties.h7
-rw-r--r--searchlib/src/vespa/searchlib/fef/ranksetup.cpp1
-rw-r--r--searchlib/src/vespa/searchlib/fef/ranksetup.h2
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp2
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<char> & 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);