diff options
author | Arne Juul <arnej@yahooinc.com> | 2024-01-17 09:54:55 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2024-01-17 11:18:09 +0000 |
commit | cd6863efb6c39480e2cdf9b96974ac83574541ca (patch) | |
tree | bfa55f41b1e384a7409268595b6434f564e1c4af /streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp | |
parent | 08d00afabe6403b3b630db1455c9ea23abdf4104 (diff) |
refactor for re-use
Diffstat (limited to 'streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp')
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp | 31 |
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)); } - + } |