diff options
author | Tor Egge <Tor.Egge@online.no> | 2024-03-19 12:28:45 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2024-03-19 12:28:45 +0100 |
commit | 94d55bd32b3395d0dee9eacbc3a0c8573f0f3429 (patch) | |
tree | 45ab83501705b9008f1c50dcd188adfc411c4764 /streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp | |
parent | 2f663bd8757167d9d655f38d0116be4ec77fb266 (diff) |
Add virtual fields to index environment for streaming mode.
Diffstat (limited to 'streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp')
-rw-r--r-- | streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp b/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp index 1dbac859262..1ab1b16cb86 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp @@ -1,6 +1,8 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "fieldsearchspec.h" +#include <vespa/searchlib/fef/fieldinfo.h> +#include <vespa/searchlib/fef/iindexenvironment.h> #include <vespa/searchlib/query/streaming/equiv_query_node.h> #include <vespa/vespalib/stllike/asciistream.h> #include <vespa/vsm/searcher/boolfieldsearcher.h> @@ -284,7 +286,7 @@ normalize_mode(VsmfieldsConfig::Fieldspec::Normalize normalize_mode) { } void -FieldSearchSpecMap::buildFromConfig(const VsmfieldsHandle & conf) +FieldSearchSpecMap::buildFromConfig(const VsmfieldsHandle & conf, const search::fef::IIndexEnvironment& index_env) { LOG(spam, "Parsing %zd fields", conf->fieldspec.size()); for(const VsmfieldsConfig::Fieldspec & cfs : conf->fieldspec) { @@ -295,6 +297,15 @@ FieldSearchSpecMap::buildFromConfig(const VsmfieldsHandle & conf) _nameIdMap.add(cfs.name, fieldId); LOG(spam, "M in %d = %s", fieldId, cfs.name.c_str()); } + /* + * Index env is based on same vsm fields config but has additional + * virtual fields, cf. IndexEnvironment::add_virtual_fields(). + */ + for (uint32_t field_id = specMap().size(); field_id < index_env.getNumFields(); ++field_id) { + auto& field = *index_env.getField(field_id); + assert(field.type() == search::fef::FieldType::VIRTUAL); + _nameIdMap.add(field.name(), field_id); + } LOG(spam, "Parsing %zd document types", conf->documenttype.size()); for(const VsmfieldsConfig::Documenttype & di : conf->documenttype) { |