summaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2024-01-17 09:54:55 +0000
committerArne Juul <arnej@yahooinc.com>2024-01-17 11:18:09 +0000
commitcd6863efb6c39480e2cdf9b96974ac83574541ca (patch)
treebfa55f41b1e384a7409268595b6434f564e1c4af /streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
parent08d00afabe6403b3b630db1455c9ea23abdf4104 (diff)
refactor for re-use
Diffstat (limited to 'streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp')
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp b/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
index 6f2e77d30cb..cdaf14eef9b 100644
--- a/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp
@@ -52,16 +52,23 @@ to_data_type(VsmfieldsConfig::Fieldspec::Searchmethod search_method)
return FieldInfo::DataType::DOUBLE;
}
-void
-RankManager::Snapshot::detectFields(const VsmfieldsHandle & fields)
+IndexEnvPrototype::IndexEnvPrototype()
+ : _tableManager(),
+ _prototype(_tableManager)
{
- for (uint32_t i = 0; i < fields->fieldspec.size(); ++i) {
- const VsmfieldsConfig::Fieldspec & fs = fields->fieldspec[i];
+ auto tableFactory = std::make_shared<search::fef::FunctionTableFactory>(256);
+ _tableManager.addFactory(tableFactory);
+}
+
+void
+IndexEnvPrototype::detectFields(const vespa::config::search::vsm::VsmfieldsConfig &fields) {
+ for (uint32_t i = 0; i < fields.fieldspec.size(); ++i) {
+ const VsmfieldsConfig::Fieldspec & fs = fields.fieldspec[i];
bool isAttribute = (fs.fieldtype == VsmfieldsConfig::Fieldspec::Fieldtype::ATTRIBUTE);
LOG(debug, "Adding field of type '%s' and name '%s' with id '%u' the index environment.",
isAttribute ? "ATTRIBUTE" : "INDEX", fs.name.c_str(), i);
// This id must match the vsm specific field id
- _protoEnv.addField(fs.name, isAttribute, to_data_type(fs.searchmethod));
+ _prototype.addField(fs.name, isAttribute, to_data_type(fs.searchmethod));
}
}
@@ -96,14 +103,14 @@ buildFieldSet(const VsmfieldsConfig::Documenttype::Index & ci, const search::fef
}
}
-
+
void
RankManager::Snapshot::buildFieldMappings(const VsmfieldsHandle & fields)
{
for(const VsmfieldsConfig::Documenttype & di : fields->documenttype) {
LOG(debug, "Looking through indexes for documenttype '%s'", di.name.c_str());
for(const VsmfieldsConfig::Documenttype::Index & ci : di.index) {
- FieldIdTList view = buildFieldSet(ci, _protoEnv, di.index);
+ FieldIdTList view = buildFieldSet(ci, _protoEnv.current(), di.index);
if (_views.find(ci.name) == _views.end()) {
std::sort(view.begin(), view.end()); // lowest field id first
_views[ci.name] = view;
@@ -119,7 +126,7 @@ RankManager::Snapshot::initRankSetup(const BlueprintFactory & factory)
{
// set up individual index environments per rank profile
for (uint32_t i = 0; i < _properties.size(); ++i) {
- _indexEnv.push_back(_protoEnv);
+ _indexEnv.push_back(_protoEnv.current());
IndexEnvironment & ie = _indexEnv.back();
ie.getProperties().import(_properties[i].second);
}
@@ -151,15 +158,13 @@ RankManager::Snapshot::initRankSetup(const BlueprintFactory & factory)
}
RankManager::Snapshot::Snapshot() :
- _tableManager(),
- _protoEnv(_tableManager),
+ _protoEnv(),
_properties(),
_indexEnv(),
_rankSetup(),
_rpmap(),
_views()
{
- _tableManager.addFactory(search::fef::ITableFactory::SP(new search::fef::FunctionTableFactory(256)));
}
RankManager::Snapshot::~Snapshot() = default;
@@ -168,7 +173,7 @@ bool
RankManager::Snapshot::setup(const RankManager & rm)
{
VsmfieldsHandle fields = rm._vsmAdapter->getFieldsConfig();
- detectFields(fields);
+ _protoEnv.detectFields(*fields);
buildFieldMappings(fields);
if (!initRankSetup(rm._blueprintFactory)) {
return false;
@@ -223,5 +228,5 @@ RankManager::configure(const vsm::VSMConfigSnapshot & snap, std::shared_ptr<cons
{
notify(snap, std::move(ranking_assets_repo));
}
-
+
}