summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2016-12-08 16:24:52 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2016-12-08 16:24:52 +0000
commit482d7c852053566798bc4909bf89398091cc3313 (patch)
tree3c6e1de6401d74969500209d6531d1fc91e28588 /streamingvisitors
parenteaed14310982d37fba4da1bbde6c386226626768 (diff)
Use feature resolver instead of resolving directly on match data.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/tests/hitcollector/hitcollector.cpp18
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp13
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/hitcollector.h8
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp8
4 files changed, 26 insertions, 21 deletions
diff --git a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp
index 4e008211223..2cb65040486 100644
--- a/streamingvisitors/src/tests/hitcollector/hitcollector.cpp
+++ b/streamingvisitors/src/tests/hitcollector/hitcollector.cpp
@@ -5,6 +5,7 @@
#include <vespa/document/fieldvalue/fieldvalues.h>
#include <vespa/searchlib/fef/matchdata.h>
+#include <vespa/searchlib/fef/feature_resolver.h>
#include <vespa/searchvisitor/hitcollector.h>
#include <vespa/vdslib/container/searchresult.h>
#include <vespa/vsm/common/storagedocument.h>
@@ -237,6 +238,13 @@ public:
*_matchData.resolveFeature(2) = docid + 30;
return _matchData;
}
+
+ FeatureResolver get_resolver() {
+ FeatureResolver resolver(2);
+ resolver.add("foo", _matchData.resolve_raw(0), false);
+ resolver.add("bar", _matchData.resolve_raw(2), false);
+ return resolver;
+ }
};
void
@@ -250,15 +258,9 @@ HitCollectorTest::testFeatureSet()
addHit(hc, 3, 40); // on heap
addHit(hc, 4, 30); // on heap
- std::vector<vespalib::string> names;
- std::vector<FeatureHandle> handles;
- names.push_back("foo");
- names.push_back("bar");
- handles.push_back(0);
- handles.push_back(2);
-
MyRankProgram rankProgram;
- search::FeatureSet::SP sf = hc.getFeatureSet(rankProgram, names, handles);
+ FeatureResolver resolver(rankProgram.get_resolver());
+ search::FeatureSet::SP sf = hc.getFeatureSet(rankProgram, resolver);
EXPECT_EQUAL(sf->getNames().size(), 2u);
EXPECT_EQUAL(sf->getNames()[0], "foo");
diff --git a/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp b/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp
index 10b752adf9e..09fa3fd5639 100644
--- a/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/hitcollector.cpp
@@ -4,6 +4,7 @@
#include <vespa/log/log.h>
LOG_SETUP(".searchvisitor.hitcollector");
#include "hitcollector.h"
+#include <vespa/searchlib/fef/feature_resolver.h>
#include <stdexcept>
using search::FeatureSet;
@@ -125,20 +126,24 @@ HitCollector::fillSearchResult(vdslib::SearchResult & searchResult)
FeatureSet::SP
HitCollector::getFeatureSet(IRankProgram &rankProgram,
- const std::vector<vespalib::string> & names,
- const std::vector<search::fef::FeatureHandle> & handles)
+ const search::fef::FeatureResolver &resolver)
{
- if (names.empty() || _hits.empty()) {
+ if (resolver.num_features() == 0 || _hits.empty()) {
return FeatureSet::SP(new FeatureSet());
}
sortByDocId();
+ std::vector<vespalib::string> names;
+ names.reserve(resolver.num_features());
+ for (size_t i = 0; i < resolver.num_features(); ++i) {
+ names.emplace_back(resolver.name_of(i));
+ }
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();
search::feature_t * f = retval->getFeaturesByIndex(retval->addDocId(docId));
for (uint32_t j = 0; j < names.size(); ++j) {
- f[j] = *matchData.resolveFeature(handles[j]);
+ f[j] = *resolver.resolve_number(j);
LOG(debug, "getFeatureSet: lDocId(%u), '%s': %f", docId, names[j].c_str(), f[j]);
}
}
diff --git a/streamingvisitors/src/vespa/searchvisitor/hitcollector.h b/streamingvisitors/src/vespa/searchvisitor/hitcollector.h
index 11c799f1c06..fc43e748a6d 100644
--- a/streamingvisitors/src/vespa/searchvisitor/hitcollector.h
+++ b/streamingvisitors/src/vespa/searchvisitor/hitcollector.h
@@ -9,6 +9,8 @@
#include <vespa/vsm/common/storagedocument.h>
#include <vespa/vespalib/stllike/string.h>
+namespace search { namespace fef { class FeatureResolver; } }
+
namespace storage {
/**
@@ -132,12 +134,10 @@ public:
*
* @return features for all hits on the heap.
* @param rankProgram the rank program used to calculate all features.
- * @param names names of all features.
- * @param handles handles of all features.
+ * @param resolver feature resolver, gives feature names and values
**/
search::FeatureSet::SP getFeatureSet(IRankProgram &rankProgram,
- const std::vector<vespalib::string> & names,
- const std::vector<search::fef::FeatureHandle> & handles);
+ const search::fef::FeatureResolver &resolver);
};
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
index aa42ec40bb9..d6870d485d5 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
@@ -202,13 +202,11 @@ FeatureSet::SP
RankProcessor::calculateFeatureSet()
{
LOG(debug, "Calculate feature set");
- std::vector<vespalib::string> names;
- std::vector<FeatureHandle> handles;
RankProgram &rankProgram = *(_summaryProgram.get() != nullptr ? _summaryProgram : _rankProgram);
- rankProgram.get_seed_handles(names, handles);
- LOG(debug, "Feature handles: numNames(%ld), numHandles(%ld)", names.size(), handles.size());
+ search::fef::FeatureResolver resolver(rankProgram.get_seeds());
+ LOG(debug, "Feature handles: numNames(%ld)", resolver.num_features());
RankProgramWrapper wrapper(rankProgram);
- FeatureSet::SP sf = _hitCollector->getFeatureSet(wrapper, names, handles);
+ FeatureSet::SP sf = _hitCollector->getFeatureSet(wrapper, resolver);
LOG(debug, "Feature set: numFeatures(%u), numDocs(%u)", sf->numFeatures(), sf->numDocs());
return sf;
}