diff options
Diffstat (limited to 'searchlib')
6 files changed, 77 insertions, 18 deletions
diff --git a/searchlib/src/tests/diskindex/fusion/fusion_test.cpp b/searchlib/src/tests/diskindex/fusion/fusion_test.cpp index 8feb7b7e287..b478c8f3ddd 100644 --- a/searchlib/src/tests/diskindex/fusion/fusion_test.cpp +++ b/searchlib/src/tests/diskindex/fusion/fusion_test.cpp @@ -125,11 +125,11 @@ make_doc10(EmptyDocBuilder &b) StringFieldBuilder sfb(b); doc->setValue("f0", sfb.tokenize("a b c d e f z").build()); doc->setValue("f1", sfb.tokenize("w x y z").build()); - ArrayFieldValue string_array(b.get_data_type("Array<String>")); + auto string_array = b.make_array("f2"); string_array.add(sfb.tokenize("ax ay z").build()); string_array.add(sfb.tokenize("ax").build()); doc->setValue("f2", string_array); - WeightedSetFieldValue string_wset(b.get_data_type("WeightedSet<String>")); + auto string_wset = b.make_wset("f3"); string_wset.add(sfb.tokenize("wx z").build(), 4); doc->setValue("f3", string_wset); return doc; @@ -356,7 +356,7 @@ FusionTest::requireThatFusionIsWorking(const vespalib::string &prefix, bool dire doc = b.make_document("id:ns:searchdocument::11"); { - WeightedSetFieldValue string_wset(b.get_data_type("WeightedSet<String>")); + auto string_wset = b.make_wset("f3"); string_wset.add(sfb.word("zz").build(), -27); doc->setValue("f3", string_wset); } @@ -365,7 +365,7 @@ FusionTest::requireThatFusionIsWorking(const vespalib::string &prefix, bool dire doc = b.make_document("id:ns:searchdocument::12"); { - WeightedSetFieldValue string_wset(b.get_data_type("WeightedSet<String>")); + auto string_wset = b.make_wset("f3"); string_wset.add(sfb.word("zz0").build(), 0); doc->setValue("f3", string_wset); } diff --git a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp index 04d1f08db6f..c13ef66a01a 100644 --- a/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp +++ b/searchlib/src/tests/memoryindex/field_index/field_index_test.cpp @@ -992,13 +992,13 @@ TEST_F(BasicInverterTest, require_that_inversion_is_working) doc->setValue("f1", sfb.word("\nw2").tokenize(" w x "). word("\nw3").tokenize(" y z").build()); { - ArrayFieldValue string_array(_b.get_data_type("Array<String>")); + auto string_array = _b.make_array("f2"); string_array.add(sfb.tokenize("w x").build()); string_array.add(sfb.tokenize("y z").build()); doc->setValue("f2", string_array); } { - WeightedSetFieldValue string_wset(_b.get_data_type("WeightedSet<String>")); + auto string_wset = _b.make_wset("f3"); string_wset.add(sfb.tokenize("w x").build(), 6); string_wset.add(sfb.tokenize("y z").build(), 7); doc->setValue("f3", string_wset); @@ -1017,12 +1017,12 @@ TEST_F(BasicInverterTest, require_that_inversion_is_working) word("__a__").tokenize(" few words present in some of the fields").build()); doc->setValue("f1", sfb.tokenize("the other field also has some content").build()); { - ArrayFieldValue string_array(_b.get_data_type("Array<String>")); + auto string_array = _b.make_array("f2"); string_array.add(sfb.tokenize("strange things here has some content").build()); doc->setValue("f2", string_array); } { - WeightedSetFieldValue string_wset(_b.get_data_type("WeightedSet<String>")); + auto string_wset = _b.make_wset("f3"); string_wset.add(sfb.tokenize("not a weighty argument").build(), 3); doc->setValue("f3", string_wset); } @@ -1193,7 +1193,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) Document::UP doc; StringFieldBuilder sfb(_b); sfb.url_mode(true); - StructFieldValue url_value(_b.get_data_type("url")); + auto url_value = _b.make_url(); doc = _b.make_document("id:ns:searchdocument::10"); url_value.setValue("all", sfb.tokenize("http://www.example.com:81/fluke?ab=2#4").build()); @@ -1204,7 +1204,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) url_value.setValue("query", sfb.tokenize("ab=2").build()); url_value.setValue("fragment", sfb.tokenize("4").build()); doc->setValue("iu", url_value); - ArrayFieldValue url_array(_b.get_data_type("Array<url>")); + auto url_array = _b.make_array("iau"); url_value.setValue("all", sfb.tokenize("http://www.example.com:82/fluke?ab=2#8").build()); url_value.setValue("scheme", sfb.tokenize("http").build()); url_value.setValue("host", sfb.tokenize("www.example.com").build()); @@ -1220,7 +1220,7 @@ TEST_F(UriInverterTest, require_that_uri_indexing_is_working) url_value.setValue("fragment", sfb.tokenize("9").build()); url_array.add(url_value); doc->setValue("iau", url_array); - WeightedSetFieldValue url_wset(_b.get_data_type("WeightedSet<url>")); + auto url_wset = _b.make_wset("iwu"); url_value.setValue("all", sfb.tokenize("http://www.example.com:83/fluke?ab=2#12").build()); url_value.setValue("scheme", sfb.tokenize("http").build()); url_value.setValue("host", sfb.tokenize("www.example.com").build()); diff --git a/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp b/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp index bf3a911a579..ef28d8d57a4 100644 --- a/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp +++ b/searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp @@ -101,11 +101,11 @@ makeDoc17(EmptyDocBuilder &b) StringFieldBuilder sfb(b); auto doc = b.make_document("id:ns:searchdocument::17"); doc->setValue("f1", sfb.tokenize("foo0 bar0").build()); - ArrayFieldValue string_array(b.get_data_type("Array<String>")); + auto string_array = b.make_array("f2"); string_array.add(sfb.tokenize("foo bar").build()); string_array.add(sfb.tokenize("bar").build()); doc->setValue("f2", string_array); - WeightedSetFieldValue string_wset(b.get_data_type("WeightedSet<String>")); + auto string_wset = b.make_wset("f3"); string_wset.add(sfb.tokenize("foo2 bar2").build(), 3); string_wset.add(sfb.tokenize("bar2").build(), 4); doc->setValue("f3", string_wset); diff --git a/searchlib/src/tests/memoryindex/url_field_inverter/url_field_inverter_test.cpp b/searchlib/src/tests/memoryindex/url_field_inverter/url_field_inverter_test.cpp index 3995f06628c..a8369f355ff 100644 --- a/searchlib/src/tests/memoryindex/url_field_inverter/url_field_inverter_test.cpp +++ b/searchlib/src/tests/memoryindex/url_field_inverter/url_field_inverter_test.cpp @@ -43,7 +43,7 @@ Document::UP makeDoc10Single(EmptyDocBuilder &b) { auto doc = b.make_document("id:ns:searchdocument::10"); - StructFieldValue url_value(b.get_data_type("url")); + auto url_value = b.make_struct("url"); StringFieldBuilder sfb(b); sfb.url_mode(true); url_value.setValue("all", sfb.tokenize("http://www.example.com:81/fluke?ab=2#4").build()); @@ -63,8 +63,8 @@ makeDoc10Array(EmptyDocBuilder &b) auto doc = b.make_document("id:ns:searchdocument::10"); StringFieldBuilder sfb(b); sfb.url_mode(true); - ArrayFieldValue url_array(b.get_data_type("Array<url>")); - StructFieldValue url_value(b.get_data_type("url")); + auto url_array = b.make_array("url"); + auto url_value = b.make_url(); url_value.setValue("all", sfb.tokenize("http://www.example.com:82/fluke?ab=2#8").build()); url_value.setValue("scheme", sfb.tokenize("http").build()); url_value.setValue("host", sfb.tokenize("www.example.com").build()); @@ -89,8 +89,8 @@ makeDoc10WeightedSet(EmptyDocBuilder &b) auto doc = b.make_document("id:ns:searchdocument::10"); StringFieldBuilder sfb(b); sfb.url_mode(true); - WeightedSetFieldValue url_wset(b.get_data_type("WeightedSet<url>")); - StructFieldValue url_value(b.get_data_type("url")); + auto url_wset = b.make_wset("url"); + auto url_value = b.make_url(); url_value.setValue("all", sfb.tokenize("http://www.example.com:83/fluke?ab=2#12").build()); url_value.setValue("scheme", sfb.tokenize("http").build()); url_value.setValue("host", sfb.tokenize("www.example.com").build()); diff --git a/searchlib/src/vespa/searchlib/index/empty_doc_builder.cpp b/searchlib/src/vespa/searchlib/index/empty_doc_builder.cpp index fabe630432f..32d4caeec4f 100644 --- a/searchlib/src/vespa/searchlib/index/empty_doc_builder.cpp +++ b/searchlib/src/vespa/searchlib/index/empty_doc_builder.cpp @@ -2,17 +2,25 @@ #include "empty_doc_builder.h" #include <vespa/document/datatype/documenttype.h> +#include <vespa/document/fieldvalue/arrayfieldvalue.h> #include <vespa/document/fieldvalue/document.h> +#include <vespa/document/fieldvalue/mapfieldvalue.h> +#include <vespa/document/fieldvalue/structfieldvalue.h> +#include <vespa/document/fieldvalue/weightedsetfieldvalue.h> #include <vespa/document/repo/documenttyperepo.h> #include <vespa/document/repo/document_type_repo_factory.h> #include <vespa/document/repo/configbuilder.h> #include <cassert> +using document::ArrayFieldValue; using document::DataType; using document::Document; using document::DocumentId; using document::DocumentTypeRepo; using document::DocumentTypeRepoFactory; +using document::MapFieldValue; +using document::StructFieldValue; +using document::WeightedSetFieldValue; namespace search::index { @@ -64,4 +72,46 @@ EmptyDocBuilder::get_data_type(const vespalib::string &name) const return *type; } +ArrayFieldValue +EmptyDocBuilder::make_array(vespalib::stringref field_name) +{ + auto& field = _document_type->getField(field_name); + auto& field_type = field.getDataType(); + assert(field_type.isArray()); + return {field_type}; +} +MapFieldValue +EmptyDocBuilder::make_map(vespalib::stringref field_name) +{ + auto& field = _document_type->getField(field_name); + auto& field_type = field.getDataType(); + assert(field_type.isMap()); + return {field_type}; + +} + +WeightedSetFieldValue +EmptyDocBuilder::make_wset(vespalib::stringref field_name) +{ + auto& field = _document_type->getField(field_name); + auto& field_type = field.getDataType(); + assert(field_type.isWeightedSet()); + return {field_type}; +} + +StructFieldValue +EmptyDocBuilder::make_struct(vespalib::stringref field_name) +{ + auto& field = _document_type->getField(field_name); + auto& field_type = field.getDataType(); + assert(field_type.isStructured()); + return {field_type}; +} + +StructFieldValue +EmptyDocBuilder::make_url() +{ + return {get_data_type("url")}; +} + } diff --git a/searchlib/src/vespa/searchlib/index/empty_doc_builder.h b/searchlib/src/vespa/searchlib/index/empty_doc_builder.h index 18b6543bea1..57803993aa3 100644 --- a/searchlib/src/vespa/searchlib/index/empty_doc_builder.h +++ b/searchlib/src/vespa/searchlib/index/empty_doc_builder.h @@ -8,10 +8,14 @@ #include <memory> namespace document { +class ArrayFieldValue; class DataType; class Document; class DocumentType; class DocumentTypeRepo; +class MapFieldValue; +class StructFieldValue; +class WeightedSetFieldValue; } namespace document::config::internal { class InternalDocumenttypesType; } namespace document::config_builder { struct Struct; } @@ -37,6 +41,11 @@ public: std::unique_ptr<document::Document> make_document(vespalib::string document_id); const document::DataType &get_data_type(const vespalib::string &name) const; const DocumenttypesConfig& get_documenttypes_config() const noexcept { return *_document_types_config; } + document::ArrayFieldValue make_array(vespalib::stringref field_name); + document::MapFieldValue make_map(vespalib::stringref field_name); + document::WeightedSetFieldValue make_wset(vespalib::stringref field_name); + document::StructFieldValue make_struct(vespalib::stringref field_name); + document::StructFieldValue make_url(); }; } |