summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-09-19 12:58:46 +0200
committerGitHub <noreply@github.com>2022-09-19 12:58:46 +0200
commit85edf8d495d7f932f6b87c43a2f722bb9bdd268d (patch)
tree8eff7c4c498508211b644d50560f20837aad7cd9 /searchcore
parent43736b2d8f34f1623470fbb93cd92e89852fe20a (diff)
parent2737d0850c5890d87c2842034925029ab88868d4 (diff)
Merge pull request #24118 from vespa-engine/geirst/docsum-field-writer-commands
Put commands for docsum field writers at a common place.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp75
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp33
2 files changed, 62 insertions, 46 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp b/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp
index f2433b2adf6..d7904881e4d 100644
--- a/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp
+++ b/searchcore/src/tests/proton/attribute/attribute_aspect_delayer/attribute_aspect_delayer_test.cpp
@@ -7,6 +7,7 @@
#include <vespa/searchcore/proton/common/i_document_type_inspector.h>
#include <vespa/searchcore/proton/common/indexschema_inspector.h>
#include <vespa/searchcore/proton/test/attribute_utils.h>
+#include <vespa/searchsummary/docsummary/docsum_field_writer_commands.h>
#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/stllike/string.h>
#include <vespa/vespalib/test/insertion_operators.h>
@@ -14,13 +15,15 @@
#include <vespa/log/log.h>
LOG_SETUP("attibute_aspect_delayer_test");
+using search::attribute::Config;
using vespa::config::search::AttributesConfig;
using vespa::config::search::AttributesConfigBuilder;
using vespa::config::search::IndexschemaConfig;
using vespa::config::search::IndexschemaConfigBuilder;
using vespa::config::search::SummaryConfig;
using vespa::config::search::SummaryConfigBuilder;
-using search::attribute::Config;
+
+using namespace search::docsummary;
namespace vespa::config::search::internal {
@@ -192,15 +195,17 @@ TEST_F(DelayerTest, require_that_empty_config_is_ok)
TEST_F(DelayerTest, require_that_simple_attribute_config_is_ok)
{
- setup(attrCfg({make_int32_sv_cfg()}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer", "attribute", "a")}));
+ setup(attrCfg({make_int32_sv_cfg()}), attrCfg({make_int32_sv_cfg()}),
+ sCfg({make_summary_field("a", "integer", command::attribute, "a")}));
assertAttributeConfig({make_int32_sv_cfg()});
- assertSummaryConfig({make_summary_field("a", "integer", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "integer", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_adding_attribute_aspect_is_delayed_if_field_type_is_unchanged)
{
addFields({"a"});
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer", "attribute", "a")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}),
+ sCfg({make_summary_field("a", "integer", command::attribute, "a")}));
assertAttributeConfig({});
assertSummaryConfig({make_summary_field("a", "integer")});
}
@@ -208,24 +213,27 @@ TEST_F(DelayerTest, require_that_adding_attribute_aspect_is_delayed_if_field_typ
TEST_F(DelayerTest, require_that_adding_attribute_aspect_is_delayed_if_field_type_is_unchanged_geopos_override)
{
addFields({"a"});
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer", "geopos", "a")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}),
+ sCfg({make_summary_field("a", "integer", command::geo_position, "a")}));
assertAttributeConfig({});
- assertSummaryConfig({make_summary_field("a", "integer", "geopos", "a")});
+ assertSummaryConfig({make_summary_field("a", "integer", command::geo_position, "a")});
}
TEST_F(DelayerTest, require_that_adding_attribute_aspect_is_delayed_if_field_type_is_unchanged_mapped_summary)
{
addFields({"a"});
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a_mapped", "integer", "attribute", "a")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}),
+ sCfg({make_summary_field("a_mapped", "integer", command::attribute, "a")}));
assertAttributeConfig({});
- assertSummaryConfig({make_summary_field("a_mapped", "integer", "copy", "a")});
+ assertSummaryConfig({make_summary_field("a_mapped", "integer", command::copy, "a")});
}
TEST_F(DelayerTest, require_that_adding_attribute_is_not_delayed_if_field_type_changed)
{
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer", "attribute", "a")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg()}),
+ sCfg({make_summary_field("a", "integer", command::attribute, "a")}));
assertAttributeConfig({make_int32_sv_cfg()});
- assertSummaryConfig({make_summary_field("a", "integer", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "integer", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_removing_attribute_aspect_is_delayed_if_field_type_is_unchanged)
@@ -233,7 +241,7 @@ TEST_F(DelayerTest, require_that_removing_attribute_aspect_is_delayed_if_field_t
addFields({"a"});
setup(attrCfg({make_int32_sv_cfg()}), attrCfg({}), sCfg({make_summary_field("a", "integer")}));
assertAttributeConfig({make_int32_sv_cfg()});
- assertSummaryConfig({make_summary_field("a", "integer", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "integer", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_summary_map_override_is_removed_when_summary_aspect_is_removed_even_if_removing_attribute_aspect_is_delayed)
@@ -272,7 +280,8 @@ TEST_F(DelayerTest, require_that_adding_attribute_aspect_is_delayed_for_tensor_f
{
addFields({"a"});
setup(attrCfg({}),
- attrCfg({make_tensor_cfg("tensor(x[10])")}), sCfg({make_summary_field("a", "tensor", "attribute", "a")}));
+ attrCfg({make_tensor_cfg("tensor(x[10])")}),
+ sCfg({make_summary_field("a", "tensor", command::attribute, "a")}));
assertAttributeConfig({});
assertSummaryConfig({make_summary_field("a", "tensor")});
}
@@ -283,7 +292,7 @@ TEST_F(DelayerTest, require_that_removing_attribute_aspect_is_delayed_for_tensor
setup(attrCfg({make_tensor_cfg("tensor(x[10])")}),
attrCfg({}), sCfg({make_summary_field("a", "tensor")}));
assertAttributeConfig({make_tensor_cfg("tensor(x[10])")});
- assertSummaryConfig({make_summary_field("a", "tensor", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "tensor", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_removing_attribute_aspect_is_not_delayed_for_predicate)
@@ -305,56 +314,63 @@ TEST_F(DelayerTest, require_that_removing_attribute_aspect_is_not_delayed_for_re
TEST_F(DelayerTest, require_that_fast_access_flag_change_is_delayed_false_true_edge)
{
addFields({"a"});
- setup(attrCfg({make_int32_sv_cfg()}), attrCfg({make_fa(make_int32_sv_cfg())}), sCfg({make_summary_field("a", "integer", "attribute", "a")}));
+ setup(attrCfg({make_int32_sv_cfg()}), attrCfg({make_fa(make_int32_sv_cfg())}),
+ sCfg({make_summary_field("a", "integer", command::attribute, "a")}));
assertAttributeConfig({make_int32_sv_cfg()});
- assertSummaryConfig({make_summary_field("a", "integer", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "integer", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_fast_access_flag_change_is_delayed_true_false_edge)
{
addFields({"a"});
- setup(attrCfg({make_fa(make_int32_sv_cfg())}), attrCfg({make_int32_sv_cfg()}), sCfg({make_summary_field("a", "integer", "attribute", "a")}));
+ setup(attrCfg({make_fa(make_int32_sv_cfg())}), attrCfg({make_int32_sv_cfg()}),
+ sCfg({make_summary_field("a", "integer", command::attribute, "a")}));
assertAttributeConfig({make_fa(make_int32_sv_cfg())});
- assertSummaryConfig({make_summary_field("a", "integer", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "integer", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_fast_access_flag_change_is_delayed_false_true_edge_on_tensor_attribute)
{
addFields({"a"});
- setup(attrCfg({make_tensor_cfg("tensor(x[10])")}), attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}), sCfg({make_summary_field("a", "tensor", "attribute", "a")}));
+ setup(attrCfg({make_tensor_cfg("tensor(x[10])")}), attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}),
+ sCfg({make_summary_field("a", "tensor", command::attribute, "a")}));
assertAttributeConfig({make_tensor_cfg("tensor(x[10])")});
- assertSummaryConfig({make_summary_field("a", "tensor", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "tensor", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_fast_access_flag_change_is_delayed_true_false_edge_on_tensor_attribute)
{
addFields({"a"});
setup(attrCfg({make_fa(make_tensor_cfg("tensor(x[10])"))}),
- attrCfg({make_tensor_cfg("tensor(x[10])")}), sCfg({make_summary_field("a", "tensor", "attribute", "a")}));
+ attrCfg({make_tensor_cfg("tensor(x[10])")}),
+ sCfg({make_summary_field("a", "tensor", command::attribute, "a")}));
assertAttributeConfig({make_fa(make_tensor_cfg("tensor(x[10])"))});
- assertSummaryConfig({make_summary_field("a", "tensor", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "tensor", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_fast_access_flag_change_is_not_delayed_true_false_edge_on_string_attribute_indexed_field)
{
addFields({"a"});
addOldIndexField("a");
- setup(attrCfg({make_fa(make_string_sv_cfg())}), attrCfg({make_string_sv_cfg()}), sCfg({make_summary_field("a", "string", "attribute", "a")}));
+ setup(attrCfg({make_fa(make_string_sv_cfg())}), attrCfg({make_string_sv_cfg()}),
+ sCfg({make_summary_field("a", "string", command::attribute, "a")}));
assertAttributeConfig({make_string_sv_cfg()});
- assertSummaryConfig({make_summary_field("a", "string", "attribute", "a")});
+ assertSummaryConfig({make_summary_field("a", "string", command::attribute, "a")});
}
TEST_F(DelayerTest, require_that_adding_attribute_aspect_to_struct_field_is_not_delayed_if_field_type_is_changed)
{
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), sCfg({make_summary_field("array", "jsonstring", "attributecombiner", "array")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg("array.a")}),
+ sCfg({make_summary_field("array", "jsonstring", command::attribute_combiner, "array")}));
assertAttributeConfig({make_int32_sv_cfg("array.a")});
- assertSummaryConfig({make_summary_field("array", "jsonstring", "attributecombiner", "array")});
+ assertSummaryConfig({make_summary_field("array", "jsonstring", command::attribute_combiner, "array")});
}
TEST_F(DelayerTest, require_that_adding_attribute_aspect_to_struct_field_is_delayed_if_field_type_is_unchanged)
{
addFields({"array.a"});
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), sCfg({make_summary_field("array", "jsonstring", "attributecombiner", "array")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg("array.a")}),
+ sCfg({make_summary_field("array", "jsonstring", command::attribute_combiner, "array")}));
assertAttributeConfig({});
assertSummaryConfig({make_summary_field("array", "jsonstring")});
}
@@ -370,9 +386,12 @@ TEST_F(DelayerTest, require_that_removing_attribute_aspect_from_struct_field_is_
TEST_F(DelayerTest, require_that_adding_attribute_aspect_to_struct_field_is_delayed_if_field_type_is_unchanged_with_filtering_docsum)
{
addFields({"array.a"});
- setup(attrCfg({}), attrCfg({make_int32_sv_cfg("array.a")}), sCfg({make_summary_field("array", "jsonstring", "attributecombiner", "array"), make_summary_field("array_filtered", "jsonstring", "matchedattributeelementsfilter", "array")}));
+ setup(attrCfg({}), attrCfg({make_int32_sv_cfg("array.a")}),
+ sCfg({make_summary_field("array", "jsonstring", command::attribute_combiner, "array"),
+ make_summary_field("array_filtered", "jsonstring", command::matched_attribute_elements_filter, "array")}));
assertAttributeConfig({});
- assertSummaryConfig({make_summary_field("array", "jsonstring"), make_summary_field("array_filtered", "jsonstring", "matchedelementsfilter", "array")});
+ assertSummaryConfig({make_summary_field("array", "jsonstring"),
+ make_summary_field("array_filtered", "jsonstring", command::matched_elements_filter, "array")});
}
}
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp
index e25bc4c71d5..1b13e80563a 100644
--- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp
@@ -4,31 +4,28 @@
#include <vespa/config-attributes.h>
#include <vespa/config-summary.h>
#include <vespa/searchcommon/attribute/attribute_utils.h>
+#include <vespa/searchcommon/attribute/config.h>
#include <vespa/searchcore/proton/common/config_hash.hpp>
#include <vespa/searchcore/proton/common/i_document_type_inspector.h>
#include <vespa/searchcore/proton/common/i_indexschema_inspector.h>
#include <vespa/searchlib/attribute/configconverter.h>
-#include <vespa/searchcommon/attribute/config.h>
+#include <vespa/searchsummary/docsummary/docsum_field_writer_commands.h>
#include <vespa/vespalib/stllike/hash_set.hpp>
-using search::attribute::isUpdateableInMemoryOnly;
using search::attribute::BasicType;
using search::attribute::ConfigConverter;
+using search::attribute::isUpdateableInMemoryOnly;
using vespa::config::search::AttributesConfig;
using vespa::config::search::AttributesConfigBuilder;
using vespa::config::search::SummaryConfig;
using vespa::config::search::SummaryConfigBuilder;
+using namespace search::docsummary;
+
namespace proton {
namespace {
-vespalib::string attribute_combiner_dfw_string("attributecombiner");
-vespalib::string matched_attribute_elements_filter_dfw_string("matchedattributeelementsfilter");
-vespalib::string matched_elements_filter_dfw_string("matchedelementsfilter");
-vespalib::string copy_dfw_string("copy");
-vespalib::string attribute_dfw_string("attribute");
-
using AttributesConfigHash = ConfigHash<AttributesConfig::Attribute>;
bool willTriggerReprocessOnAttributeAspectRemoval(const search::attribute::Config &cfg,
@@ -53,7 +50,7 @@ void
remove_docsum_field_rewriter(SummaryConfig::Classes::Fields& summary_field)
{
if (source_field(summary_field) != summary_field.name) {
- summary_field.command = copy_dfw_string;
+ summary_field.command = command::copy;
} else {
summary_field.command = "";
summary_field.source = "";
@@ -225,31 +222,31 @@ AttributeAspectConfigRewriter::build_summary_config(const SummaryConfig& new_sum
summary_config_builder = new_summary_config;
for (auto &summary_class : summary_config_builder.classes) {
for (auto &summary_field : summary_class.fields) {
- if (summary_field.command == attribute_dfw_string) {
+ if (summary_field.command == command::attribute) {
if (is_delayed_add_attribute_aspect(source_field(summary_field))) {
remove_docsum_field_rewriter(summary_field);
}
- } else if (summary_field.command == attribute_combiner_dfw_string) {
+ } else if (summary_field.command == command::attribute_combiner) {
if (is_delayed_add_attribute_aspect_struct(source_field(summary_field))) {
remove_docsum_field_rewriter(summary_field);
}
- } else if (summary_field.command == matched_attribute_elements_filter_dfw_string) {
+ } else if (summary_field.command == command::matched_attribute_elements_filter) {
if (is_delayed_add_attribute_aspect_struct(source_field(summary_field)) ||
is_delayed_add_attribute_aspect(source_field(summary_field))) {
- summary_field.command = matched_elements_filter_dfw_string;
+ summary_field.command = command::matched_elements_filter;
}
- } else if (summary_field.command == matched_elements_filter_dfw_string) {
+ } else if (summary_field.command == command::matched_elements_filter) {
if (is_delayed_remove_attribute_aspect(source_field(summary_field))) {
- summary_field.command = matched_attribute_elements_filter_dfw_string;
+ summary_field.command = command::matched_attribute_elements_filter;
}
} else if (summary_field.command == "") {
if (is_delayed_remove_attribute_aspect(summary_field.name)) {
- summary_field.command = attribute_dfw_string;
+ summary_field.command = command::attribute;
summary_field.source = summary_field.name;
}
- } else if (summary_field.command == copy_dfw_string) {
+ } else if (summary_field.command == command::copy) {
if (is_delayed_remove_attribute_aspect(source_field(summary_field))) {
- summary_field.command = attribute_dfw_string;
+ summary_field.command = command::attribute;
summary_field.source = source_field(summary_field);
}
}