diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo')
10 files changed, 55 insertions, 62 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java b/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java index 2071e43f54c..485e2c9a8c3 100644 --- a/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java +++ b/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java @@ -3,16 +3,22 @@ package com.yahoo.prelude.hitfield; import java.util.Arrays; import java.util.Base64; +import java.util.Objects; /** + * Wraps a byte [] and renders it as base64 encoded string * @author baldersheim */ public class RawBase64 implements Comparable<RawBase64> { + private final static Base64.Encoder encoder = Base64.getEncoder().withoutPadding(); private final byte[] content; public RawBase64(byte[] content) { + Objects.requireNonNull(content); this.content = content; } + public byte [] value() { return content; } + @Override public int compareTo(RawBase64 rhs) { return Arrays.compareUnsigned(content, rhs.content); @@ -20,6 +26,19 @@ public class RawBase64 implements Comparable<RawBase64> { @Override public String toString() { - return Base64.getEncoder().encodeToString(content); + return encoder.encodeToString(content); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RawBase64 rawBase64 = (RawBase64) o; + return Arrays.equals(content, rawBase64.content); + } + + @Override + public int hashCode() { + return Arrays.hashCode(content); } } diff --git a/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java b/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java index 7ba7a13936f..3dac4cb92c0 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java @@ -271,7 +271,7 @@ public class MultiRangeItem<Type extends Number> extends MultiTermItem { if (endInclusive) metadata |= 0b00000100; encoder = type.encoderFor(sortedRanges()); - metadata |= encoder.id << 3; + metadata |= (byte)(encoder.id << 3); buffer.put(metadata); putString(startIndex, buffer); diff --git a/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java b/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java index a7ca62d153c..03a661499e0 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java @@ -67,8 +67,8 @@ abstract class MultiTermItem extends SimpleTaggableItem { super.encodeThis(buffer); byte metadata = 0; - metadata |= (operatorType().code << 5) & 0b11100000; - metadata |= ( termType().code ) & 0b00011111; + metadata |= (byte)((byte)(operatorType().code << 5) & (byte)0b11100000); + metadata |= (byte)(termType().code & (byte)0b00011111); buffer.put(metadata); buffer.putInt(terms()); encodeBlueprint(buffer); diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java b/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java index 05efc134465..0bea390ad63 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java @@ -1,8 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.result; -import static com.yahoo.text.Lowercase.toLowerCase; - /** * This abstract class is used in {@link Group} instances where the identifying expression evaluated to a {@link * com.yahoo.search.grouping.request.BucketValue}. The range is inclusive-from and exclusive-to. diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java b/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java index 343fea82b6e..91c46960ab0 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java @@ -7,7 +7,6 @@ import com.yahoo.text.Utf8String; import com.yahoo.text.XMLWriter; import java.io.IOException; -import java.util.Arrays; import java.util.Map; /** @@ -63,28 +62,15 @@ public abstract class HitRenderer { private static void renderGroupId(GroupId id, XMLWriter writer) { writer.openTag(TAG_GROUP_ID).attribute(ATR_TYPE, id.getTypeName()); - if (id instanceof ValueGroupId) { - writer.content(getIdValue((ValueGroupId)id), false); - } else if (id instanceof BucketGroupId) { - BucketGroupId bucketId = (BucketGroupId)id; - writer.openTag(TAG_BUCKET_FROM).content(getBucketFrom(bucketId), false).closeTag(); - writer.openTag(TAG_BUCKET_TO).content(getBucketTo(bucketId), false).closeTag(); + if (id instanceof ValueGroupId<?> valueGroupId) { + writer.content(valueGroupId.getValue(), false); + } else if (id instanceof BucketGroupId bucketId) { + writer.openTag(TAG_BUCKET_FROM).content(bucketId.getFrom(), false).closeTag(); + writer.openTag(TAG_BUCKET_TO).content(bucketId.getTo(), false).closeTag(); } writer.closeTag(); } - private static Object getIdValue(ValueGroupId id) { - return id instanceof RawId ? Arrays.toString(((RawId)id).getValue()) : id.getValue(); - } - - private static Object getBucketFrom(BucketGroupId id) { - return id instanceof RawBucketId ? Arrays.toString(((RawBucketId)id).getFrom()) : id.getFrom(); - } - - private static Object getBucketTo(BucketGroupId id) { - return id instanceof RawBucketId ? Arrays.toString(((RawBucketId)id).getTo()) : id.getTo(); - } - private static void renderContinuations(Map<String, Continuation> continuations, XMLWriter writer) { for (Map.Entry<String, Continuation> entry : continuations.entrySet()) { renderContinuation(entry.getKey(), entry.getValue(), writer); diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java b/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java index 9576f548f4a..9b5ad6660b0 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.result; -import java.util.Arrays; +import com.yahoo.prelude.hitfield.RawBase64; /** * This class is used in {@link Group} instances where the identifying @@ -9,7 +9,7 @@ import java.util.Arrays; * * @author Ulf Lilleengen */ -public class RawBucketId extends BucketGroupId<byte[]> { +public class RawBucketId extends BucketGroupId<RawBase64> { /** * Constructs a new instance of this class. @@ -18,6 +18,6 @@ public class RawBucketId extends BucketGroupId<byte[]> { * @param to The identifying exclusive-to raw buffer. */ public RawBucketId(byte[] from, byte[] to) { - super("raw_bucket", from, Arrays.toString(from), to, Arrays.toString(to)); + super("raw_bucket", new RawBase64(from), new RawBase64(to)); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java b/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java index de711d0c218..fd0d38c37fd 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java @@ -1,14 +1,14 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.result; -import java.util.Arrays; +import com.yahoo.prelude.hitfield.RawBase64; /** * This class is used in {@link Group} instances where the identifying expression evaluated to a {@link Byte} array. * * @author Simon Thoresen Hult */ -public class RawId extends ValueGroupId<byte[]> { +public class RawId extends ValueGroupId<RawBase64> { /** * Constructs a new instance of this class. @@ -16,6 +16,6 @@ public class RawId extends ValueGroupId<byte[]> { * @param value The identifying byte array. */ public RawId(byte[] value) { - super("raw", value, Arrays.toString(value)); + super("raw", new RawBase64(value)); } } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java index 7f006b098cd..e746706f9c5 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.vespa; +import com.yahoo.prelude.hitfield.RawBase64; import com.yahoo.search.grouping.Continuation; import com.yahoo.search.grouping.GroupingRequest; import com.yahoo.search.grouping.result.BoolId; @@ -28,6 +29,7 @@ import com.yahoo.searchlib.aggregation.Hit; import com.yahoo.searchlib.aggregation.HitsAggregationResult; import com.yahoo.searchlib.aggregation.MaxAggregationResult; import com.yahoo.searchlib.aggregation.MinAggregationResult; +import com.yahoo.searchlib.aggregation.RawData; import com.yahoo.searchlib.aggregation.StandardDeviationAggregationResult; import com.yahoo.searchlib.aggregation.SumAggregationResult; import com.yahoo.searchlib.aggregation.XorAggregationResult; @@ -169,7 +171,7 @@ class ResultBuilder { } else { String label = transform.getLabel(result.getTag()); if (label != null) { - group.setField(label, newResult(result, tag)); + group.setField(label, convertResult(newResult(result, tag))); } } } @@ -228,24 +230,27 @@ class ResultBuilder { return new RawId(res.getRaw()); } else if (res instanceof StringResultNode) { return new StringId(res.getString()); - } else if (res instanceof FloatBucketResultNode) { - FloatBucketResultNode bucketId = (FloatBucketResultNode)res; + } else if (res instanceof FloatBucketResultNode bucketId) { return new DoubleBucketId(bucketId.getFrom(), bucketId.getTo()); - } else if (res instanceof IntegerBucketResultNode) { - IntegerBucketResultNode bucketId = (IntegerBucketResultNode)res; + } else if (res instanceof IntegerBucketResultNode bucketId) { return new LongBucketId(bucketId.getFrom(), bucketId.getTo()); - } else if (res instanceof StringBucketResultNode) { - StringBucketResultNode bucketId = (StringBucketResultNode)res; + } else if (res instanceof StringBucketResultNode bucketId) { return new StringBucketId(bucketId.getFrom(), bucketId.getTo()); - } else if (res instanceof RawBucketResultNode) { - RawBucketResultNode bucketId = (RawBucketResultNode)res; + } else if (res instanceof RawBucketResultNode bucketId) { return new RawBucketId(bucketId.getFrom(), bucketId.getTo()); } else { throw new UnsupportedOperationException(res.getClass().getName()); } } - Object newResult(ExpressionNode execResult, int tag) { + private Object convertResult(Object value) { + if (value instanceof RawData raw) { + return new RawBase64(raw.getData()); + } + return value; + } + + private Object newResult(ExpressionNode execResult, int tag) { if (execResult instanceof AverageAggregationResult) { return ((AverageAggregationResult)execResult).getAverage().getNumber(); } else if (execResult instanceof CountAggregationResult) { diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java index 99c3477274d..01bbef13129 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java @@ -48,7 +48,7 @@ public class Binding implements Comparable<Binding> { for (int i = 0; i <= maxDimensions; i++) { String value = i < dimensionBinding.getDimensions().size() ? dimensionBinding.getValues().get(i) : null; if (value == null) - generality += Math.pow(2, maxDimensions - i-1); + generality += (int)Math.pow(2, maxDimensions - i - 1); else context.put(dimensionBinding.getDimensions().get(i), value); } diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java index b36c8788877..90f4e6ae65c 100644 --- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java +++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java @@ -32,8 +32,6 @@ import com.yahoo.search.grouping.result.AbstractList; import com.yahoo.search.grouping.result.BucketGroupId; import com.yahoo.search.grouping.result.Group; import com.yahoo.search.grouping.result.GroupId; -import com.yahoo.search.grouping.result.RawBucketId; -import com.yahoo.search.grouping.result.RawId; import com.yahoo.search.grouping.result.RootGroup; import com.yahoo.search.grouping.result.ValueGroupId; import com.yahoo.search.result.Coverage; @@ -57,7 +55,6 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.util.ArrayDeque; -import java.util.Arrays; import java.util.Deque; import java.util.Map; import java.util.Optional; @@ -420,31 +417,19 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> { } protected void renderGroupMetadata(GroupId id) throws IOException { - if (!(id instanceof ValueGroupId || id instanceof BucketGroupId)) return; + if (!(id instanceof ValueGroupId<?> || id instanceof BucketGroupId)) return; - if (id instanceof ValueGroupId valueId) { - generator.writeStringField(GROUPING_VALUE, getIdValue(valueId)); + if (id instanceof ValueGroupId<?> valueId) { + generator.writeStringField(GROUPING_VALUE, valueId.getValue().toString()); } else { BucketGroupId<?> bucketId = (BucketGroupId<?>) id; generator.writeObjectFieldStart(BUCKET_LIMITS); - generator.writeStringField(BUCKET_FROM, getBucketFrom(bucketId)); - generator.writeStringField(BUCKET_TO, getBucketTo(bucketId)); + generator.writeStringField(BUCKET_FROM, bucketId.getFrom().toString()); + generator.writeStringField(BUCKET_TO, bucketId.getTo().toString()); generator.writeEndObject(); } } - private static String getIdValue(ValueGroupId<?> id) { - return (id instanceof RawId ? Arrays.toString(((RawId) id).getValue()) : id.getValue()).toString(); - } - - private static String getBucketFrom(BucketGroupId<?> id) { - return (id instanceof RawBucketId ? Arrays.toString(((RawBucketId) id).getFrom()) : id.getFrom()).toString(); - } - - private static String getBucketTo(BucketGroupId<?> id) { - return (id instanceof RawBucketId ? Arrays.toString(((RawBucketId) id).getTo()) : id.getTo()).toString(); - } - protected void renderTotalHitCount(Hit hit) throws IOException { if ( ! (getRecursionLevel() == 1 && hit instanceof HitGroup)) return; |