aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-03-20 11:10:54 +0100
committerTor Egge <Tor.Egge@online.no>2024-03-20 11:10:54 +0100
commitcaed98d39b292eece8e950fad9b0662d1e2a04d4 (patch)
tree129b8af0dfb683d031e47cef086fe673e0bb09f7 /streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
parent7938460dd3b3d72ec1900febe29c1a94db964648 (diff)
Reapply 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) {