diff options
10 files changed, 70 insertions, 31 deletions
diff --git a/config-model/src/main/javacc/SchemaParser.jj b/config-model/src/main/javacc/SchemaParser.jj index 7d251bd3514..255cc3cde70 100644 --- a/config-model/src/main/javacc/SchemaParser.jj +++ b/config-model/src/main/javacc/SchemaParser.jj @@ -2006,14 +2006,27 @@ void inputs(ParsedRankProfile profile) : { Reference reference; TensorType type; + List<Reference> seenInputs = new ArrayList<>(); } { <INPUTS> <LBRACE> (<NL>)* - ( input(profile) (<NL>)*) * + ( + reference = input(profile) { seenInputs.add(reference); } + (<NL> { seenInputs.add(null); })* + )* <RBRACE> + { + Reference last = null; + for (Reference current : seenInputs) { + if (last != null && current != null) { + deployLogger.logApplicationPackage(Level.WARNING, "Expected newline between inputs " + last + " and " + current); + } + last = current; + } + } } -void input(ParsedRankProfile profile) : +Reference input(ParsedRankProfile profile) : { Reference reference; InputType type = new InputType(TensorType.empty, false); @@ -2021,7 +2034,10 @@ void input(ParsedRankProfile profile) : } { reference = inputName() ( type = valueType(reference))? ( <COLON> (<NL>)* defaultValue = tensorValue(type.tensorType()) )? - { profile.addInput(reference, new RankProfile.Input(reference, type, Optional.ofNullable(defaultValue))); } + { + profile.addInput(reference, new RankProfile.Input(reference, type, Optional.ofNullable(defaultValue))); + return reference; + } } /** Returns the reference "query(name)" for both "query(name)" and "name". */ diff --git a/document/src/main/java/com/yahoo/document/Document.java b/document/src/main/java/com/yahoo/document/Document.java index 294750f40f3..15a898e76b1 100644 --- a/document/src/main/java/com/yahoo/document/Document.java +++ b/document/src/main/java/com/yahoo/document/Document.java @@ -123,8 +123,7 @@ public class Document extends StructuredFieldValue { } public int getSerializedSize() throws SerializationException { - // TODO shouldn't this be createHead()? - DocumentSerializer data = DocumentSerializerFactory.create6(new GrowableByteBuffer(64 * 1024, 2.0f)); + DocumentSerializer data = DocumentSerializerFactory.createHead(new GrowableByteBuffer(8 * 1024, 2.0f)); data.write(this); return data.getBuf().position(); } @@ -136,8 +135,7 @@ public class Document extends StructuredFieldValue { public final int getApproxSize() { return 4096; } public void serialize(OutputStream out) throws SerializationException { - // TODO shouldn't this be createHead()? - DocumentSerializer writer = DocumentSerializerFactory.create6(new GrowableByteBuffer(64 * 1024, 2.0f)); + DocumentSerializer writer = DocumentSerializerFactory.createHead(new GrowableByteBuffer(8 * 1024, 2.0f)); writer.write(this); GrowableByteBuffer data = writer.getBuf(); byte[] array; diff --git a/document/src/main/java/com/yahoo/document/DocumentUpdate.java b/document/src/main/java/com/yahoo/document/DocumentUpdate.java index 26254f3c081..d3063b76feb 100644 --- a/document/src/main/java/com/yahoo/document/DocumentUpdate.java +++ b/document/src/main/java/com/yahoo/document/DocumentUpdate.java @@ -347,8 +347,7 @@ public class DocumentUpdate extends DocumentOperation implements Iterable<FieldP } public final void serialize(GrowableByteBuffer buf) { - // TODO shouldn't this be createHead()?! - serialize(DocumentSerializerFactory.create6(buf)); + serialize(DocumentSerializerFactory.createHead(buf)); } public void serialize(DocumentUpdateWriter data) { diff --git a/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java b/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java index 0e0dc837bdc..beacf5e367d 100644 --- a/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java +++ b/document/src/main/java/com/yahoo/document/serialization/DocumentSerializerFactory.java @@ -31,7 +31,7 @@ public class DocumentSerializerFactory { * This format is an extension of the 4.2 format. */ public static DocumentSerializer create6() { - return new VespaDocumentSerializer6(new GrowableByteBuffer()); + return new VespaDocumentSerializer6(new GrowableByteBuffer(8 * 1024, 2.0f)); } } diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java index e14d2fea0a2..17ab3890bcf 100644 --- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java +++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java @@ -690,7 +690,7 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume * @return The size in bytes. */ public static long getSerializedSize(Document doc) { - DocumentSerializer serializer = new VespaDocumentSerializer6(new GrowableByteBuffer()); + DocumentSerializer serializer = new VespaDocumentSerializer6(new GrowableByteBuffer(8 * 1024, 2.0f)); serializer.write(doc); return serializer.getBuf().position(); } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java index ef1575e2101..778eaeda5f0 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java @@ -193,8 +193,8 @@ abstract class RoutableFactories80 { } private static ByteBuffer serializeDoc(Document doc) { - var buf = new GrowableByteBuffer(); - doc.serialize(buf); + var buf = new GrowableByteBuffer(8 * 1024, 2.0f); + doc.serialize(DocumentSerializerFactory.createHead(buf)); buf.flip(); return buf.getByteBuffer(); } @@ -233,7 +233,7 @@ abstract class RoutableFactories80 { } private static ByteBuffer serializeUpdate(DocumentUpdate update) { - var buf = new GrowableByteBuffer(); + var buf = new GrowableByteBuffer(4 * 1024, 2.0f); update.serialize(DocumentSerializerFactory.createHead(buf)); buf.flip(); return buf.getByteBuffer(); diff --git a/searchlib/src/vespa/searchlib/expression/CMakeLists.txt b/searchlib/src/vespa/searchlib/expression/CMakeLists.txt index 391cc3b96ef..11c0b478e23 100644 --- a/searchlib/src/vespa/searchlib/expression/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/expression/CMakeLists.txt @@ -31,6 +31,7 @@ vespa_add_library(searchlib_expression OBJECT arrayatlookupfunctionnode.cpp arrayoperationnode.cpp aggregationrefnode.cpp + simple_interpolate.cpp stringresultnode.cpp rawresultnode.cpp floatresultnode.cpp diff --git a/searchlib/src/vespa/searchlib/expression/interpolatedlookupfunctionnode.cpp b/searchlib/src/vespa/searchlib/expression/interpolatedlookupfunctionnode.cpp index c5a867151fe..fbc69a512d3 100644 --- a/searchlib/src/vespa/searchlib/expression/interpolatedlookupfunctionnode.cpp +++ b/searchlib/src/vespa/searchlib/expression/interpolatedlookupfunctionnode.cpp @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "interpolatedlookupfunctionnode.h" #include "floatresultnode.h" +#include "simple_interpolate.h" #include <vespa/searchcommon/attribute/iattributecontext.h> #include <vespa/searchlib/common/converters.h> #include <vespa/vespalib/util/stringfmt.h> @@ -38,22 +39,6 @@ InterpolatedLookup & InterpolatedLookup::operator= (const InterpolatedLookup &rh namespace { -double -simpleInterpolate(const std::vector<double> & v, double lookup) { - if (v.empty() || lookup < v[0]) - return 0; - for (size_t i = 1; i < v.size(); ++i) { - if (lookup < v[i]) { - double total = v[i] - v[i - 1]; - double above = lookup - v[i - 1]; - double result = i - 1; - result += (above / total); - return result; - } - } - return v.size() - 1; -} - class InterpolateHandler : public AttributeNode::Handler { public: InterpolateHandler(FloatResultNode & result, const ExpressionNode * lookupExpression) noexcept @@ -76,7 +61,7 @@ InterpolateHandler::handle(const AttributeResult &r) { size_t numValues = r.getAttribute()->getValueCount(r.getDocId()); _values.resize(numValues); r.getAttribute()->get(r.getDocId(), _values.data(), _values.size()); - _result.set(simpleInterpolate(_values, lookup)); + _result.set(simple_interpolate(_values, lookup)); } } diff --git a/searchlib/src/vespa/searchlib/expression/simple_interpolate.cpp b/searchlib/src/vespa/searchlib/expression/simple_interpolate.cpp new file mode 100644 index 00000000000..a3f8d55dec1 --- /dev/null +++ b/searchlib/src/vespa/searchlib/expression/simple_interpolate.cpp @@ -0,0 +1,25 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "simple_interpolate.h" + +namespace search::expression { + +double +simple_interpolate(const std::vector<double>& v, double lookup) noexcept +{ + if (v.empty() || lookup < v[0]) { + return 0; + } + for (size_t i = 1; i < v.size(); ++i) { + if (lookup < v[i]) { + double total = v[i] - v[i - 1]; + double above = lookup - v[i - 1]; + double result = i - 1; + result += (above / total); + return result; + } + } + return v.size() - 1; +} + +} diff --git a/searchlib/src/vespa/searchlib/expression/simple_interpolate.h b/searchlib/src/vespa/searchlib/expression/simple_interpolate.h new file mode 100644 index 00000000000..92cc29904eb --- /dev/null +++ b/searchlib/src/vespa/searchlib/expression/simple_interpolate.h @@ -0,0 +1,15 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vector> + +namespace search::expression { + +/* + * Perform simple interpolation for interpolatedlookup function + * in grouping expression. + */ +double simple_interpolate(const std::vector<double>& v, double lookup) noexcept; + +} |