summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp16
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp11
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/indexenvironment.h2
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp1
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp6
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankprocessor.h2
6 files changed, 28 insertions, 10 deletions
diff --git a/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp b/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp
index a4a4b4e696f..ee9a08f3ecd 100644
--- a/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp
+++ b/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp
@@ -1,6 +1,7 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/searchvisitor/rankprocessor.h>
+#include <vespa/searchlib/fef/test/indexenvironment.h>
#include <vespa/searchlib/query/streaming/query.h>
#include <vespa/searchlib/query/streaming/nearest_neighbor_query_node.h>
#include <vespa/searchlib/query/tree/querybuilder.h>
@@ -12,6 +13,7 @@
using search::fef::MatchData;
using search::fef::TermFieldHandle;
using search::fef::TermFieldMatchData;
+using search::fef::test::IndexEnvironment;
using search::query::Weight;
using search::query::QueryBuilder;
using search::query::SimpleQueryNodeTypes;
@@ -82,13 +84,14 @@ RankProcessorTest::test_unpack_match_data_for_term_node(bool interleaved_feature
tfmd->setNeedInterleavedFeatures(interleaved_features);
auto invalid_id = TermFieldMatchData::invalidId();
EXPECT_EQ(invalid_id, tfmd->getDocId());
- RankProcessor::unpack_match_data(1, *md, *_query_wrapper);
+ IndexEnvironment ie;
+ RankProcessor::unpack_match_data(1, *md, *_query_wrapper, ie);
EXPECT_EQ(invalid_id, tfmd->getDocId());
node->add(field_id, 0, 1, 0);
node->add(field_id, 0, 1, 1);
auto& field_info = node->getFieldInfo(field_id);
field_info.setFieldLength(mock_field_length);
- RankProcessor::unpack_match_data(2, *md, *_query_wrapper);
+ RankProcessor::unpack_match_data(2, *md, *_query_wrapper, ie);
EXPECT_EQ(2, tfmd->getDocId());
if (interleaved_features) {
EXPECT_EQ(mock_num_occs, tfmd->getNumOccs());
@@ -99,7 +102,7 @@ RankProcessorTest::test_unpack_match_data_for_term_node(bool interleaved_feature
}
EXPECT_EQ(2, tfmd->size());
node->reset();
- RankProcessor::unpack_match_data(3, *md, *_query_wrapper);
+ RankProcessor::unpack_match_data(3, *md, *_query_wrapper, ie);
EXPECT_EQ(2, tfmd->getDocId());
}
@@ -145,15 +148,16 @@ TEST_F(RankProcessorTest, unpack_match_data_for_nearest_neighbor_query_node)
auto tfmd = md->resolveTermField(handle);
auto invalid_id = TermFieldMatchData::invalidId();
EXPECT_EQ(invalid_id, tfmd->getDocId());
- RankProcessor::unpack_match_data(1, *md, *_query_wrapper);
+ IndexEnvironment ie;
+ RankProcessor::unpack_match_data(1, *md, *_query_wrapper, ie);
EXPECT_EQ(invalid_id, tfmd->getDocId());
constexpr double distance = 1.5;
node->set_distance(distance);
- RankProcessor::unpack_match_data(2, *md, *_query_wrapper);
+ RankProcessor::unpack_match_data(2, *md, *_query_wrapper, ie);
EXPECT_EQ(2, tfmd->getDocId());
EXPECT_EQ(distance * 2, tfmd->getRawScore());
node->reset();
- RankProcessor::unpack_match_data(3, *md, *_query_wrapper);
+ RankProcessor::unpack_match_data(3, *md, *_query_wrapper, ie);
EXPECT_EQ(2, tfmd->getDocId());
}
diff --git a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp
index 25c8d982f0f..726afcc959b 100644
--- a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp
@@ -2,6 +2,7 @@
#include "indexenvironment.h"
#include <vespa/searchlib/fef/i_ranking_assets_repo.h>
+#include <vespa/searchlib/fef/indexproperties.h>
using namespace search::fef;
@@ -39,6 +40,16 @@ IndexEnvironment::addField(const vespalib::string& name,
}
void
+IndexEnvironment::fixup_fields()
+{
+ for (auto& field : _fields) {
+ if (indexproperties::IsFilterField::check(_properties, field.name())) {
+ field.setFilter(true);
+ }
+ }
+}
+
+void
IndexEnvironment::set_ranking_assets_repo(std::shared_ptr<const IRankingAssetsRepo> ranking_assets_repo)
{
_ranking_assets_repo = std::move(ranking_assets_repo);
diff --git a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h
index eed38b3c922..50e6898262d 100644
--- a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h
+++ b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h
@@ -78,6 +78,8 @@ public:
bool isAttribute,
search::fef::FieldInfo::DataType data_type);
+ void fixup_fields();
+
search::fef::Properties & getProperties() { return _properties; }
void set_ranking_assets_repo(std::shared_ptr<const search::fef::IRankingAssetsRepo> ranking_assets_repo);
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp b/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
index 7b248faaa51..3efeb8ef168 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
@@ -135,6 +135,7 @@ RankManager::Snapshot::initRankSetup(const BlueprintFactory & factory)
_indexEnv.push_back(_protoEnv.current());
IndexEnvironment & ie = _indexEnv.back();
ie.getProperties().import(_properties[i].second);
+ ie.fixup_fields();
}
// set up individual rank setups per rank profile
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
index 825630f057b..2a95bf8251b 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp
@@ -292,16 +292,16 @@ void
RankProcessor::unpackMatchData(uint32_t docId)
{
_docId = docId;
- unpack_match_data(docId, *_match_data, _query);
+ unpack_match_data(docId, *_match_data, _query, _queryEnv.getIndexEnvironment());
}
void
-RankProcessor::unpack_match_data(uint32_t docid, MatchData &matchData, QueryWrapper& query)
+RankProcessor::unpack_match_data(uint32_t docid, MatchData &matchData, QueryWrapper& query, const search::fef::IIndexEnvironment& index_env)
{
for (auto& term : query.getTermList()) {
auto & qtd = static_cast<QueryTermData &>(term->getQueryItem());
const ITermData &td = qtd.getTermData();
- term->unpack_match_data(docid, td, matchData);
+ term->unpack_match_data(docid, td, matchData, index_env);
}
}
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h
index 476ed013d23..f384f7d7acf 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h
+++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h
@@ -74,7 +74,7 @@ public:
void initForRanking(size_t wantedHitCount, bool use_sort_blob);
void initForDumping(size_t wantedHitCount, bool use_sort_blob);
void unpackMatchData(uint32_t docId);
- static void unpack_match_data(uint32_t docid, search::fef::MatchData& matchData, QueryWrapper& query);
+ static void unpack_match_data(uint32_t docid, search::fef::MatchData& matchData, QueryWrapper& query, const search::fef::IIndexEnvironment& index_env);
void runRankProgram(uint32_t docId);
vespalib::FeatureSet::SP calculateFeatureSet();
vespalib::FeatureSet::SP calculateFeatureSet(search::DocumentIdT docId);