diff options
author | Olli Virtanen <olli.virtanen@oath.com> | 2019-03-11 14:46:03 +0100 |
---|---|---|
committer | Olli Virtanen <olli.virtanen@oath.com> | 2019-03-11 14:46:03 +0100 |
commit | 91dd5bc9eb95701aeb3110fd402257084634aa73 (patch) | |
tree | 810957124a05c39547e92c6899c3ed5df690531c /searchlib/src/main | |
parent | 511cdf2bea96cb39c7aee78b720fb9f05ba0a780 (diff) |
Protobuf over jrt support in search
Diffstat (limited to 'searchlib/src/main')
3 files changed, 83 insertions, 0 deletions
diff --git a/searchlib/src/main/java/ai/vespa/searchlib/searchprotocol/protobuf/package-info.java b/searchlib/src/main/java/ai/vespa/searchlib/searchprotocol/protobuf/package-info.java new file mode 100644 index 00000000000..4463d4c9f52 --- /dev/null +++ b/searchlib/src/main/java/ai/vespa/searchlib/searchprotocol/protobuf/package-info.java @@ -0,0 +1,5 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package ai.vespa.searchlib.searchprotocol.protobuf; + +import com.yahoo.osgi.annotation.ExportPackage; diff --git a/searchlib/src/main/java/com/yahoo/searchlib/protobuf/MapConverter.java b/searchlib/src/main/java/com/yahoo/searchlib/protobuf/MapConverter.java new file mode 100644 index 00000000000..4de8e3b5bb0 --- /dev/null +++ b/searchlib/src/main/java/com/yahoo/searchlib/protobuf/MapConverter.java @@ -0,0 +1,73 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.searchlib.protobuf; + +import ai.vespa.searchlib.searchprotocol.protobuf.Search.StringProperty; +import ai.vespa.searchlib.searchprotocol.protobuf.Search.TensorProperty; +import com.google.protobuf.ByteString; +import com.yahoo.tensor.Tensor; +import com.yahoo.tensor.serialization.TypedBinaryFormat; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +/** + * @author ollivir + */ +public class MapConverter { + @FunctionalInterface + public interface PropertyInserter<T> { + void add(T prop); + } + + public static void convertMapTensors(Map<String, Object> map, PropertyInserter<TensorProperty.Builder> inserter) { + for (var entry : map.entrySet()) { + var value = entry.getValue(); + if (value instanceof Tensor) { + byte[] tensor = TypedBinaryFormat.encode((Tensor) value); + inserter.add(TensorProperty.newBuilder().setName(entry.getKey()).setValue(ByteString.copyFrom(tensor))); + } + } + } + + public static void convertMapStrings(Map<String, Object> map, PropertyInserter<StringProperty.Builder> inserter) { + for (var entry : map.entrySet()) { + var value = entry.getValue(); + if (!(value instanceof Tensor)) { + inserter.add(StringProperty.newBuilder().setName(entry.getKey()).addValues(value.toString())); + } + } + } + + public static void convertStringMultiMap(Map<String, List<String>> map, PropertyInserter<StringProperty.Builder> inserter) { + for (var entry : map.entrySet()) { + var values = entry.getValue(); + if (values != null) { + inserter.add(StringProperty.newBuilder().setName(entry.getKey()).addAllValues(values)); + } + } + } + + public static void convertMultiMap(Map<String, List<Object>> map, PropertyInserter<StringProperty.Builder> stringInserter, + PropertyInserter<TensorProperty.Builder> tensorInserter) { + for (var entry : map.entrySet()) { + if (entry.getValue() != null) { + var key = entry.getKey(); + var stringValues = new LinkedList<String>(); + for (var value : entry.getValue()) { + if (value != null) { + if (value instanceof Tensor) { + byte[] tensor = TypedBinaryFormat.encode((Tensor) value); + tensorInserter.add(TensorProperty.newBuilder().setName(key).setValue(ByteString.copyFrom(tensor))); + } else { + stringValues.add(value.toString()); + } + } + } + if (!stringValues.isEmpty()) { + stringInserter.add(StringProperty.newBuilder().setName(key).addAllValues(stringValues)); + } + } + } + } +} diff --git a/searchlib/src/main/java/com/yahoo/searchlib/protobuf/package-info.java b/searchlib/src/main/java/com/yahoo/searchlib/protobuf/package-info.java new file mode 100644 index 00000000000..bb7aeca35b9 --- /dev/null +++ b/searchlib/src/main/java/com/yahoo/searchlib/protobuf/package-info.java @@ -0,0 +1,5 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +@ExportPackage +package com.yahoo.searchlib.protobuf; + +import com.yahoo.osgi.annotation.ExportPackage; |