aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-03-19 12:28:45 +0100
committerTor Egge <Tor.Egge@online.no>2024-03-19 12:28:45 +0100
commit94d55bd32b3395d0dee9eacbc3a0c8573f0f3429 (patch)
tree45ab83501705b9008f1c50dcd188adfc411c4764 /streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
parent2f663bd8757167d9d655f38d0116be4ec77fb266 (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.cpp13
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) {