diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-04-05 14:53:50 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-04-05 14:53:50 +0200 |
commit | 045313fef75a4908359c19cb6eb12d9773d55e37 (patch) | |
tree | c254df9ff263ba58fb574c046cd74ace3f50e402 /container-search | |
parent | 66075e902363e44e720a0a825af392f7fd6f444c (diff) |
There has been no use for annotating the type as tensor for a very long time. Also cleanup snd simplify with hard hand.
Diffstat (limited to 'container-search')
4 files changed, 24 insertions, 70 deletions
diff --git a/container-search/src/main/java/com/yahoo/fs4/MapEncoder.java b/container-search/src/main/java/com/yahoo/fs4/MapEncoder.java index 4245f51ace8..565a4c483c3 100644 --- a/container-search/src/main/java/com/yahoo/fs4/MapEncoder.java +++ b/container-search/src/main/java/com/yahoo/fs4/MapEncoder.java @@ -20,8 +20,13 @@ public class MapEncoder { // TODO: Time to refactor - private static final String TYPE_SUFFIX = ".type"; - private static final String TENSOR_TYPE = "tensor"; + private static byte [] getUtf8(Object value) { + if (value instanceof Tensor) { + return TypedBinaryFormat.encode((Tensor)value); + } else { + return Utf8.toBytes(value.toString()); + } + } /** * Encodes a single value as a complete binary map. @@ -39,7 +44,7 @@ public class MapEncoder { utf8 = Utf8.toBytes(key); buffer.putInt(utf8.length); buffer.put(utf8); - utf8 = Utf8.toBytes(value.toString()); + utf8 = getUtf8(value); buffer.putInt(utf8.length); buffer.put(utf8); @@ -64,7 +69,12 @@ public class MapEncoder { utf8 = Utf8.toBytes(key); buffer.putInt(utf8.length); buffer.put(utf8); - utf8 = Utf8.toBytes(property.getValue() != null ? property.getValue().toString() : ""); + Object value = property.getValue(); + if (value == null) { + utf8 = Utf8.toBytes(""); + } else { + utf8 = getUtf8(value); + } buffer.putInt(utf8.length); buffer.put(utf8); } @@ -78,53 +88,21 @@ public class MapEncoder { * * Returns the number of maps encoded - 0 or 1 */ - public static int encodeStringMultiMap(String mapName, Map<String,List<String>> map, ByteBuffer buffer) { - if (map.isEmpty()) return 0; - - byte [] utf8 = Utf8.toBytes(mapName); - buffer.putInt(utf8.length); - buffer.put(utf8); - buffer.putInt(countStringEntries(map)); - for (Map.Entry<String, List<String>> property : map.entrySet()) { - String key = property.getKey(); - for (Object value : property.getValue()) { - utf8 = Utf8.toBytes(key); - buffer.putInt(utf8.length); - buffer.put(utf8); - utf8 = Utf8.toBytes(value.toString()); - buffer.putInt(utf8.length); - buffer.put(utf8); - } - } - - return 1; - } - /** - * Encodes a multi-map as binary. - * Does nothing if the value is null. - * - * Returns the number of maps encoded - 0 or 1 - */ - public static int encodeObjectMultiMap(String mapName, Map<String,List<Object>> map, ByteBuffer buffer) { + public static <T> int encodeMultiMap(String mapName, Map<String,List<T>> map, ByteBuffer buffer) { if (map.isEmpty()) return 0; byte[] utf8 = Utf8.toBytes(mapName); buffer.putInt(utf8.length); buffer.put(utf8); - addTensorTypeInfo(map); - buffer.putInt(countObjectEntries(map)); - for (Map.Entry<String, List<Object>> property : map.entrySet()) { + buffer.putInt(countEntries(map)); + for (Map.Entry<String, List<T>> property : map.entrySet()) { String key = property.getKey(); for (Object value : property.getValue()) { utf8 = Utf8.toBytes(key); buffer.putInt(utf8.length); buffer.put(utf8); - if (value instanceof Tensor) { - utf8 = TypedBinaryFormat.encode((Tensor)value); - } else { - utf8 = Utf8.toBytes(value.toString()); - } + utf8 = getUtf8(value); buffer.putInt(utf8.length); buffer.put(utf8); } @@ -133,32 +111,9 @@ public class MapEncoder { return 1; } - private static void addTensorTypeInfo(Map<String, List<Object>> map) { - Map<String, Tensor> tensorsToTag = new HashMap<>(); - for (Map.Entry<String, List<Object>> entry : map.entrySet()) { - for (Object value : entry.getValue()) { - if (value instanceof Tensor) { - tensorsToTag.put(entry.getKey(), (Tensor)value); - } - } - } - for (Map.Entry<String, Tensor> entry : tensorsToTag.entrySet()) { - // Ensure that we only have a single tensor associated with each key - map.put(entry.getKey(), Arrays.asList(entry.getValue())); - map.put(entry.getKey() + TYPE_SUFFIX, Arrays.asList(TENSOR_TYPE)); - } - } - - private static int countStringEntries(Map<String, List<String>> value) { - int entries = 0; - for (Map.Entry<String, List<String>> property : value.entrySet()) - entries += property.getValue().size(); - return entries; - } - - private static int countObjectEntries(Map<String, List<Object>> value) { + private static <T> int countEntries(Map<String, List<T>> value) { int entries = 0; - for (Map.Entry<String, List<Object>> property : value.entrySet()) + for (Map.Entry<String, List<T>> property : value.entrySet()) entries += property.getValue().size(); return entries; } diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java index b97ee87f650..a5007c9cc33 100644 --- a/container-search/src/main/java/com/yahoo/search/Query.java +++ b/container-search/src/main/java/com/yahoo/search/Query.java @@ -1055,7 +1055,7 @@ public class Query extends com.yahoo.processing.Request implements Cloneable { // TODO: Push down if (presentation.getHighlight() != null) { - mapCount += MapEncoder.encodeStringMultiMap(Highlight.HIGHLIGHTTERMS, presentation.getHighlight().getHighlightTerms(), buffer); + mapCount += MapEncoder.encodeMultiMap(Highlight.HIGHLIGHTTERMS, presentation.getHighlight().getHighlightTerms(), buffer); } // TODO: Push down diff --git a/container-search/src/main/java/com/yahoo/search/query/ranking/RankProperties.java b/container-search/src/main/java/com/yahoo/search/query/ranking/RankProperties.java index 4158b0e7476..37a54a82c43 100644 --- a/container-search/src/main/java/com/yahoo/search/query/ranking/RankProperties.java +++ b/container-search/src/main/java/com/yahoo/search/query/ranking/RankProperties.java @@ -76,7 +76,7 @@ public class RankProperties implements Cloneable { /** Encodes this in a binary internal representation and returns the number of property maps encoded (0 or 1) */ public int encode(ByteBuffer buffer, boolean encodeQueryData) { if (encodeQueryData) { - return MapEncoder.encodeObjectMultiMap("rank", properties, buffer); + return MapEncoder.encodeMultiMap("rank", properties, buffer); } else { List<Object> sessionId = properties.get(GetDocSumsPacket.sessionIdKey); diff --git a/container-search/src/test/java/com/yahoo/fs4/test/RankFeaturesTestCase.java b/container-search/src/test/java/com/yahoo/fs4/test/RankFeaturesTestCase.java index 69ca646dbd5..e8c16e572ae 100644 --- a/container-search/src/test/java/com/yahoo/fs4/test/RankFeaturesTestCase.java +++ b/container-search/src/test/java/com/yahoo/fs4/test/RankFeaturesTestCase.java @@ -63,11 +63,10 @@ public class RankFeaturesTestCase { assertEquals(entries.size(), properties.asMap().size()); Map<String, Object> decodedProperties = decode(type, encode(properties)); - assertEquals(entries.size() * 2, properties.asMap().size()); // tensor type info has been added - assertEquals(entries.size() * 2, decodedProperties.size()); + assertEquals(entries.size(), properties.asMap().size()); + assertEquals(entries.size(), decodedProperties.size()); for (Entry entry : entries) { assertEquals(entry.tensor, decodedProperties.get(entry.normalizedKey)); - assertEquals("tensor", decodedProperties.get(entry.normalizedKey + ".type")); } } |