summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-07-04 09:43:32 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-07-04 09:43:32 +0000
commit60cf91de5ef6e329d0341d70dffa71a0240713b9 (patch)
tree501d4d403052cb5971e9d776a586b369e9d05b2e /searchcore
parentecaf9bd3a532ac937895fb7bc861174a583f874b (diff)
- Move shared_ptr
- Refactor for readability.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp55
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingcontext.h12
-rw-r--r--searchcore/src/vespa/searchcore/grouping/groupingsession.cpp9
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/result_processor.h1
4 files changed, 43 insertions, 34 deletions
diff --git a/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp b/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp
index 08bbf422674..da33c43eca7 100644
--- a/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp
+++ b/searchcore/src/vespa/searchcore/grouping/groupingcontext.cpp
@@ -32,7 +32,7 @@ size_t
GroupingContext::countFS4Hits()
{
size_t numFs4Hits(0);
- for (GroupingPtr & g : _groupingList) {
+ for (auto & g : _groupingList) {
CountFS4Hits counter;
g->select(counter, counter);
numFs4Hits += counter.getHitCount();
@@ -43,7 +43,7 @@ GroupingContext::countFS4Hits()
void
GroupingContext::setDistributionKey(uint32_t distributionKey)
{
- for (GroupingPtr & g : _groupingList) {
+ for (auto & g : _groupingList) {
FS4HitSetDistributionKey updater(distributionKey);
g->select(updater, updater);
}
@@ -77,9 +77,9 @@ GroupingContext::GroupingContext(const GroupingContext & rhs) :
{ }
void
-GroupingContext::addGrouping(const GroupingPtr & g)
+GroupingContext::addGrouping(std::shared_ptr<Grouping> g)
{
- _groupingList.push_back(g);
+ _groupingList.push_back(std::move(g));
}
void
@@ -88,9 +88,8 @@ GroupingContext::serialize()
vespalib::NBOSerializer nos(_os);
nos << (uint32_t)_groupingList.size();
- for (size_t i = 0; i < _groupingList.size(); i++) {
- search::aggregation::Grouping & grouping(*_groupingList[i]);
- grouping.serialize(nos);
+ for (const auto & grouping : _groupingList) {
+ grouping->serialize(nos);
}
}
@@ -105,25 +104,39 @@ GroupingContext::needRanking() const
using DocId = uint32_t;
+unsigned int
+GroupingContext::aggregateRanked(Grouping &grouping, const RankedHit *rankedHit, unsigned int len) const {
+ unsigned int i(0);
+ for(; (i < len) && !hasExpired(); i++) {
+ grouping.aggregate(rankedHit[i].getDocId(), rankedHit[i].getRank());
+ }
+ return i;
+}
+
+void
+GroupingContext::aggregate(Grouping & grouping, const BitVector * bVec, unsigned int lidLimit) const {
+ for (DocId d(bVec->getFirstTrueBit()); (d < lidLimit) && !hasExpired(); d = bVec->getNextTrueBit(d+1)) {
+ grouping.aggregate(d, 0.0);
+ }
+}
+void
+GroupingContext::aggregate(Grouping & grouping, const BitVector * bVec, unsigned int lidLimit, unsigned int topN) const {
+ for(DocId d(bVec->getFirstTrueBit()), i(0); (d < lidLimit) && (i < topN) && !hasExpired(); d = bVec->getNextTrueBit(d+1), i++) {
+ grouping.aggregate(d, 0.0);
+ }
+}
+
void
GroupingContext::aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len, const BitVector * bVec) const
{
grouping.preAggregate(false);
-
- for(unsigned int i(0), m(grouping.getMaxN(len)); (i < m) && !hasExpired(); i++) {
- grouping.aggregate(rankedHit[i].getDocId(), rankedHit[i].getRank());
- }
+ uint32_t count = aggregateRanked(grouping, rankedHit, grouping.getMaxN(len));
if (bVec != nullptr) {
- unsigned int sz(bVec->size());
int64_t topN = grouping.getTopN();
- if (topN > 0) {
- for(DocId d(bVec->getFirstTrueBit()), i(0), m(grouping.getMaxN(sz)); (d < sz) && (i < m) && !hasExpired(); d = bVec->getNextTrueBit(d+1), i++) {
- grouping.aggregate(d, 0.0);
- }
+ if (topN > count) {
+ aggregate(grouping, bVec, bVec->size(), topN - count);
} else {
- for(DocId d(bVec->getFirstTrueBit()); (d < sz) && !hasExpired(); d = bVec->getNextTrueBit(d+1)) {
- grouping.aggregate(d, 0.0);
- }
+ aggregate(grouping, bVec, bVec->size());
}
}
grouping.postProcess();
@@ -136,9 +149,7 @@ GroupingContext::aggregate(Grouping & grouping, const RankedHit * rankedHit, uns
grouping.preAggregate(isOrdered);
search::aggregation::HitsAggregationResult::SetOrdered pred;
grouping.select(pred, pred);
- for(unsigned int i(0), m(grouping.getMaxN(len)); (i < m) && !hasExpired(); i++) {
- grouping.aggregate(rankedHit[i].getDocId(), rankedHit[i].getRank());
- }
+ aggregateRanked(grouping, rankedHit, grouping.getMaxN(len));
grouping.postProcess();
}
diff --git a/searchcore/src/vespa/searchcore/grouping/groupingcontext.h b/searchcore/src/vespa/searchcore/grouping/groupingcontext.h
index cbbe78a1019..880ffe5f767 100644
--- a/searchcore/src/vespa/searchcore/grouping/groupingcontext.h
+++ b/searchcore/src/vespa/searchcore/grouping/groupingcontext.h
@@ -3,10 +3,8 @@
#include <vespa/searchlib/aggregation/grouping.h>
#include <vespa/vespalib/objects/nbostream.h>
-#include <vespa/vespalib/util/time.h>
#include <vespa/vespalib/util/clock.h>
#include <vector>
-#include <memory>
namespace search::grouping {
@@ -20,8 +18,7 @@ class GroupingContext
public:
using UP = std::unique_ptr<GroupingContext>;
using Grouping = search::aggregation::Grouping;
- using GroupingPtr = std::shared_ptr<Grouping>;
- using GroupingList = std::vector<GroupingPtr>;
+ using GroupingList = std::vector<std::shared_ptr<Grouping>>;
/**
* Deserialize a grouping spec into this context.
@@ -57,7 +54,7 @@ public:
* Add another grouping to this context.
* @param g Pointer to the grouping object to become part of this context.
**/
- void addGrouping(const GroupingPtr & g);
+ void addGrouping(std::shared_ptr<Grouping> g);
/**
* Reset the context to an empty state.
@@ -111,9 +108,12 @@ public:
bool needRanking() const;
bool enableNestedMultivalueGrouping() const noexcept { return _enableNestedMultivalueGrouping; }
- void aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len, const BitVector * bVec) const;
+ void aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len, const BitVector * bv) const;
void aggregate(Grouping & grouping, const RankedHit * rankedHit, unsigned int len) const;
private:
+ unsigned int aggregateRanked(Grouping & grouping, const RankedHit * rankedHit, unsigned int len) const;
+ void aggregate(Grouping & grouping, const BitVector * bv, unsigned int lidLimit) const;
+ void aggregate(Grouping & grouping, const BitVector * bv, unsigned int , unsigned int topN) const;
const vespalib::Clock & _clock;
vespalib::steady_time _timeOfDoom;
vespalib::nbostream _os;
diff --git a/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp b/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp
index fe476039ab8..fa63b0c97c6 100644
--- a/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp
+++ b/searchcore/src/vespa/searchcore/grouping/groupingsession.cpp
@@ -44,9 +44,9 @@ GroupingSession::init(GroupingContext & groupingContext, const IAttributeContext
auto gp = std::make_shared<Grouping>(*g);
gp->setLastLevel(gp->levels().size());
_groupingMap[gp->getId()] = gp;
- g = gp;
+ g = std::move(gp);
}
- _mgrContext->addGrouping(g);
+ _mgrContext->addGrouping(std::move(g));
}
_groupingManager->init(attrCtx);
}
@@ -64,9 +64,8 @@ GroupingSession::createThreadContext(size_t thread_id, const IAttributeContext &
{
auto ctx = std::make_unique<GroupingContext>(*_mgrContext);
if (thread_id == 0) {
- GroupingContext::GroupingList &groupingList = _mgrContext->getGroupingList();
- for (size_t i = 0; i < groupingList.size(); ++i) {
- ctx->addGrouping(groupingList[i]);
+ for (const auto & grouping : _mgrContext->getGroupingList()) {
+ ctx->addGrouping(grouping);
}
} else {
ctx->deserialize(_mgrContext->getResult().peek(), _mgrContext->getResult().size());
diff --git a/searchcore/src/vespa/searchcore/proton/matching/result_processor.h b/searchcore/src/vespa/searchcore/proton/matching/result_processor.h
index 4a59609da5c..54b9adc4723 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/result_processor.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/result_processor.h
@@ -100,7 +100,6 @@ public:
size_t offset, size_t hits);
~ResultProcessor();
- size_t countFS4Hits();
void prepareThreadContextCreation(size_t num_threads);
Context::UP createThreadContext(const vespalib::Doom & hardDoom, size_t thread_id, uint32_t distributionKey);
std::vector<std::pair<uint32_t,uint32_t>> extract_docid_ordering(const PartialResult &result) const;