summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2016-12-13 13:50:03 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2016-12-13 13:50:03 +0000
commit294ee381b4f1cdd5489e5e6c88acbb2c2045aec3 (patch)
tree555ae07faa5e2b7c889ad91ed0a79c5cfb620ec6 /streamingvisitors
parenta96055b2c1053c48c76b6d6845027951393dd327 (diff)
Remove docId from match data.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/tests/hitcollector/hitcollector.cpp7
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp12
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/hitcollector.h14
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp10
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.h2
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp15
6 files changed, 30 insertions, 30 deletions
diff --git a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp
index e362c9f83fe..bed3ae8bc36 100644
--- a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp
+++ b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp
@@ -71,8 +71,7 @@ HitCollectorTest::addHit(HitCollector &hc, uint32_t docId, double score, const c
StorageDocument::SP sdoc(new StorageDocument(std::move(doc)));
ASSERT_TRUE(sdoc->valid());
MatchData md(MatchData::params());
- md.setDocId(docId);
- hc.addHit(sdoc, md, score, sortData, sortDataSize);
+ hc.addHit(sdoc, docId, md, score, sortData, sortDataSize);
}
void
@@ -237,11 +236,9 @@ public:
_fooValue(),
_barValue()
{}
- virtual const search::fef::MatchData &run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &) override {
- _matchData.setDocId(docid);
+ virtual void run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &) override {
_fooValue.as_number = docid + 10;
_barValue.as_number = docid + 30;
- return _matchData;
}
FeatureResolver get_resolver() {
diff --git a/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp b/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp
index 09fa3fd5639..6cb49a77ed2 100644
--- a/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp
@@ -32,17 +32,17 @@ HitCollector::getDocSum(const search::DocumentIdT & docId) const
}
bool
-HitCollector::addHit(const vsm::StorageDocument::SP & doc, const search::fef::MatchData & data, double score)
+HitCollector::addHit(const vsm::StorageDocument::SP & doc, uint32_t docId, const search::fef::MatchData & data, double score)
{
- Hit h(doc, data, score);
+ Hit h(doc, docId, data, score);
return addHit(h);
}
bool
-HitCollector::addHit(const vsm::StorageDocument::SP & doc, const search::fef::MatchData & data,
+HitCollector::addHit(const vsm::StorageDocument::SP & doc, uint32_t docId, const search::fef::MatchData & data,
double score, const void * sortData, size_t sortDataLen)
{
- Hit h(doc, data, score, sortData, sortDataLen);
+ Hit h(doc, docId, data, score, sortData, sortDataLen);
return addHit(h);
}
@@ -139,8 +139,8 @@ HitCollector::getFeatureSet(IRankProgram &rankProgram,
}
FeatureSet::SP retval = FeatureSet::SP(new FeatureSet(names, _hits.size()));
for (HitVector::iterator it(_hits.begin()), mt(_hits.end()); it != mt; ++it) {
- const MatchData &matchData = rankProgram.run(it->getDocId(), it->getMatchData());
- uint32_t docId = matchData.getDocId();
+ rankProgram.run(it->getDocId(), it->getMatchData());
+ uint32_t docId = it->getDocId();
search::feature_t * f = retval->getFeaturesByIndex(retval->addDocId(docId));
for (uint32_t j = 0; j < names.size(); ++j) {
f[j] = *resolver.resolve_number(j);
diff --git a/streamingvisitors/src/vespa/searchvisitor/hitcollector.h b/streamingvisitors/src/vespa/searchvisitor/hitcollector.h
index fc43e748a6d..ea4a20c187b 100644
--- a/streamingvisitors/src/vespa/searchvisitor/hitcollector.h
+++ b/streamingvisitors/src/vespa/searchvisitor/hitcollector.h
@@ -22,9 +22,9 @@ private:
class Hit
{
public:
- Hit(const vsm::StorageDocument::SP & doc, const search::fef::MatchData & matchData,
+ Hit(const vsm::StorageDocument::SP & doc, uint32_t docId, const search::fef::MatchData & matchData,
double score, const void * sortData, size_t sortDataLen) :
- _docid(matchData.getDocId()),
+ _docid(docId),
_score(score),
_document(doc),
_matchData(),
@@ -35,8 +35,8 @@ private:
_matchData.emplace_back(*matchData.resolveTermField(handle));
}
}
- Hit(const vsm::StorageDocument::SP & doc, const search::fef::MatchData & matchData, double score)
- : Hit(doc, matchData, score, nullptr, 0) {}
+ Hit(const vsm::StorageDocument::SP & doc, uint32_t docId, const search::fef::MatchData & matchData, double score)
+ : Hit(doc, docId, matchData, score, nullptr, 0) {}
search::DocumentIdT getDocId() const { return _docid; }
const vsm::StorageDocument::SP & getDocument() const { return _document; }
const std::vector<search::fef::TermFieldMatchData> &getMatchData() const { return _matchData; }
@@ -87,7 +87,7 @@ public:
struct IRankProgram {
virtual ~IRankProgram() {}
- virtual const search::fef::MatchData &run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &matchData) = 0;
+ virtual void run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &matchData) = 0;
};
HitCollector(size_t wantedHits);
@@ -104,7 +104,7 @@ public:
* @param data The match data for the hit.
* @return true if the document was added to the heap
**/
- bool addHit(const vsm::StorageDocument::SP & doc, const search::fef::MatchData & data, double score);
+ bool addHit(const vsm::StorageDocument::SP & doc, uint32_t docId, const search::fef::MatchData & data, double score);
/**
* Adds a hit to this hit collector.
@@ -118,7 +118,7 @@ public:
* @param sortDataLen The length of the sortdata.
* @return true if the document was added to the heap
**/
- bool addHit(const vsm::StorageDocument::SP & doc, const search::fef::MatchData & data,
+ bool addHit(const vsm::StorageDocument::SP & doc, uint32_t docId, const search::fef::MatchData & data,
double score, const void * sortData, size_t sortDataLen);
/**
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
index d6870d485d5..6a028f15719 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
@@ -139,6 +139,7 @@ RankProcessor::RankProcessor(RankManager::Snapshot::SP snapshot,
_queryEnv(location, snapshot->getIndexEnvironment(rankProfile), queryProperties, attrMgr),
_mdLayout(),
_rankProgram(),
+ _docId(TermFieldMatchData::invalidId()),
_score(0.0),
_summaryProgram(),
_rankScorePtr(nullptr),
@@ -188,11 +189,10 @@ private:
public:
RankProgramWrapper(RankProgram &rankProgram) : _rankProgram(rankProgram) {}
- virtual const MatchData &run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &matchData) override {
+ virtual void run(uint32_t docid, const std::vector<search::fef::TermFieldMatchData> &matchData) override {
// Prepare the match data object used by the rank program with earlier unpacked match data.
copyTermFieldMatchData(matchData, _rankProgram.match_data());
_rankProgram.run(docid);
- return _rankProgram.match_data();
}
};
@@ -221,7 +221,7 @@ void
RankProcessor::unpackMatchData(uint32_t docId)
{
MatchData &matchData = _rankProgram->match_data();
- matchData.setDocId(docId);
+ _docId = docId;
unpackMatchData(matchData);
}
@@ -263,8 +263,8 @@ RankProcessor::unpackMatchData(MatchData &matchData)
tmd = matchData.resolveTermField(tfd->getHandle());
tmd->setFieldId(fieldId);
// reset field match data, but only once per docId
- if (tmd->getDocId() != matchData.getDocId()) {
- tmd->reset(matchData.getDocId());
+ if (tmd->getDocId() != _docId) {
+ tmd->reset(_docId);
}
}
// find fieldLen for new field
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h
index 20dd3f5fb88..04b8e798298 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h
@@ -30,6 +30,7 @@ private:
QueryEnvironment _queryEnv;
search::fef::MatchDataLayout _mdLayout;
search::fef::RankProgram::UP _rankProgram;
+ uint32_t _docId;
double _score;
search::fef::RankProgram::UP _summaryProgram;
const search::feature_t *_rankScorePtr;
@@ -69,6 +70,7 @@ public:
void setRankScore(double score) { _score = score; }
double getRankScore() const { return _score; }
HitCollector & getHitCollector() { return *_hitCollector; }
+ uint32_t getDocId() const { return _docId; }
};
} // namespace storage
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
index ff54a506468..cf63c8ef1d1 100644
--- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
@@ -536,7 +536,7 @@ SearchVisitor::RankController::rankMatchedDocument(uint32_t docId)
{
_rankProcessor->runRankProgram(docId);
LOG(debug, "Rank score for matched document %u: %f",
- _rankProcessor->getMatchData().getDocId(),
+ docId,
_rankProcessor->getRankScore());
if (_dumpFeatures) {
_dumpProcessor->runRankProgram(docId);
@@ -560,18 +560,19 @@ SearchVisitor::RankController::collectMatchedDocument(bool hasSorting,
const vsm::StorageDocument::SP & document)
{
bool amongTheBest(false);
+ uint32_t docId = _rankProcessor->getDocId();
if (!hasSorting) {
- amongTheBest = _rankProcessor->getHitCollector().addHit(document, _rankProcessor->getMatchData(), _rankProcessor->getRankScore());
+ amongTheBest = _rankProcessor->getHitCollector().addHit(document, docId, _rankProcessor->getMatchData(), _rankProcessor->getRankScore());
if (amongTheBest && _dumpFeatures) {
- _dumpProcessor->getHitCollector().addHit(vsm::StorageDocument::SP(NULL), _dumpProcessor->getMatchData(), _dumpProcessor->getRankScore());
+ _dumpProcessor->getHitCollector().addHit(vsm::StorageDocument::SP(NULL), docId, _dumpProcessor->getMatchData(), _dumpProcessor->getRankScore());
}
} else {
size_t pos = visitor.fillSortBuffer();
LOG(spam, "SortBlob is %ld bytes", pos);
- amongTheBest = _rankProcessor->getHitCollector().addHit(document, _rankProcessor->getMatchData(), _rankProcessor->getRankScore(),
+ amongTheBest = _rankProcessor->getHitCollector().addHit(document, docId, _rankProcessor->getMatchData(), _rankProcessor->getRankScore(),
&tmpSortBuffer[0], pos);
if (amongTheBest && _dumpFeatures) {
- _dumpProcessor->getHitCollector().addHit(vsm::StorageDocument::SP(NULL), _dumpProcessor->getMatchData(), _dumpProcessor->getRankScore(),
+ _dumpProcessor->getHitCollector().addHit(vsm::StorageDocument::SP(NULL), docId, _dumpProcessor->getMatchData(), _dumpProcessor->getRankScore(),
&tmpSortBuffer[0], pos);
}
}
@@ -950,11 +951,11 @@ SearchVisitor::handleDocument(const vsm::StorageDocument::SP & document)
vespalib::string documentId(document->docDoc().getId().getScheme().toString());
LOG(debug, "Matched document with id '%s'", documentId.c_str());
- document->setDocId(rp.getMatchData().getDocId());
+ document->setDocId(rp.getDocId());
fillAttributeVectors(documentId, *document);
- _rankController.rankMatchedDocument(rp.getMatchData().getDocId());
+ _rankController.rankMatchedDocument(rp.getDocId());
if (_shouldFillRankAttribute) {
_rankAttribute.add(rp.getRankScore());