summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-10-13 12:34:35 +0200
committerTor Egge <Tor.Egge@online.no>2022-10-13 12:34:35 +0200
commit2b309b0a16f2867509040080face61cfae14f902 (patch)
tree917c78167aa7b0b053ee87571da872bacf9e2d7b /searchlib
parent55273728967bc6edea0185f062c93a3e61e6cf66 (diff)
Add field value builders to EmptyDocBuilder.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/diskindex/fusion/fusion_test.cpp8
-rw-r--r--searchlib/src/tests/memoryindex/field_index/field_index_test.cpp14
-rw-r--r--searchlib/src/tests/memoryindex/field_inverter/field_inverter_test.cpp4
-rw-r--r--searchlib/src/tests/memoryindex/url_field_inverter/url_field_inverter_test.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/index/empty_doc_builder.cpp50
-rw-r--r--searchlib/src/vespa/searchlib/index/empty_doc_builder.h9
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();
};
}