aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2023-04-21 15:16:39 +0000
committerGeir Storli <geirst@yahooinc.com>2023-04-21 15:16:39 +0000
commite7670d3dd2790574083195068c637d130386c5b6 (patch)
tree4d7f4fe1ed9bac14e612f60773664f2d8907a58a /streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
parent6795d0352a225559efdfd68260a578cba22a5da4 (diff)
Integrate nearest neighbor field searcher in streaming search.
Diffstat (limited to 'streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp')
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
index b41eb041c57..ba97a708cc5 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
@@ -56,24 +56,28 @@ RankProcessor::initQueryEnvironment()
{
QueryWrapper::TermList & terms = _query.getTermList();
- for (uint32_t i = 0; i < terms.size(); ++i) {
- if (terms[i].isGeoPosTerm()) {
- const vespalib::string & fieldName = terms[i].getTerm()->index();
- const vespalib::string & locStr = terms[i].getTerm()->getTermString();
+ for (auto& term : terms) {
+ if (term.isGeoPosTerm()) {
+ const vespalib::string & fieldName = term.getTerm()->index();
+ const vespalib::string & locStr = term.getTerm()->getTermString();
_queryEnv.addGeoLocation(fieldName, locStr);
}
- if (!terms[i].isPhraseTerm() || terms[i].isFirstPhraseTerm()) { // register 1 term data per phrase
- QueryTermData & qtd = dynamic_cast<QueryTermData &>(terms[i].getTerm()->getQueryItem());
+ if (!term.isPhraseTerm() || term.isFirstPhraseTerm()) { // register 1 term data per phrase
+ QueryTermData & qtd = dynamic_cast<QueryTermData &>(term.getTerm()->getQueryItem());
- qtd.getTermData().setWeight(terms[i].getTerm()->weight());
- qtd.getTermData().setUniqueId(terms[i].getTerm()->uniqueId());
- if (terms[i].isFirstPhraseTerm()) {
- qtd.getTermData().setPhraseLength(terms[i].getParent()->width());
+ qtd.getTermData().setWeight(term.getTerm()->weight());
+ qtd.getTermData().setUniqueId(term.getTerm()->uniqueId());
+ if (term.isFirstPhraseTerm()) {
+ qtd.getTermData().setPhraseLength(term.getParent()->width());
} else {
qtd.getTermData().setPhraseLength(1);
}
+ auto* nn_term = term.getTerm()->as_nearest_neighbor_query_node();
+ if (nn_term != nullptr) {
+ qtd.getTermData().set_query_tensor_name(nn_term->get_query_tensor_name());
+ }
- vespalib::string expandedIndexName = vsm::FieldSearchSpecMap::stripNonFields(terms[i].getTerm()->index());
+ vespalib::string expandedIndexName = vsm::FieldSearchSpecMap::stripNonFields(term.getTerm()->index());
const RankManager::View *view = _rankManagerSnapshot->getView(expandedIndexName);
if (view != nullptr) {
RankManager::View::const_iterator iter = view->begin();
@@ -83,17 +87,17 @@ RankProcessor::initQueryEnvironment()
}
} else {
LOG(warning, "Could not find a view for index '%s'. Ranking no fields.",
- getIndexName(terms[i].getTerm()->index(), expandedIndexName).c_str());
+ getIndexName(term.getTerm()->index(), expandedIndexName).c_str());
}
LOG(debug, "Setup query term '%s:%s' (%s)",
- getIndexName(terms[i].getTerm()->index(), expandedIndexName).c_str(),
- terms[i].getTerm()->getTerm(),
- terms[i].isFirstPhraseTerm() ? "phrase" : "term");
+ getIndexName(term.getTerm()->index(), expandedIndexName).c_str(),
+ term.getTerm()->getTerm(),
+ term.isFirstPhraseTerm() ? "phrase" : "term");
_queryEnv.addTerm(&qtd.getTermData());
} else {
LOG(debug, "Ignore query term '%s:%s' (part of phrase)",
- terms[i].getTerm()->index().c_str(), terms[i].getTerm()->getTerm());
+ term.getTerm()->index().c_str(), term.getTerm()->getTerm());
}
}
_rankSetup.prepareSharedState(_queryEnv, _queryEnv.getObjectStore());