diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-01-16 15:55:41 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-01-16 15:55:41 +0100 |
commit | f1921848eff763bc99c46e53733df7bcae04fa7b (patch) | |
tree | ea7baff225ec91007ff6be8959deee672e71877a /container-search/src/main/java/com/yahoo/prelude/fastsearch/TensorField.java | |
parent | bcb0aece3ab9229b2d10169e9b82781cc22d5d2e (diff) |
Add tensor document summary field
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/fastsearch/TensorField.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/fastsearch/TensorField.java | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/TensorField.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/TensorField.java new file mode 100644 index 00000000000..422445a31da --- /dev/null +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/TensorField.java @@ -0,0 +1,65 @@ +package com.yahoo.prelude.fastsearch; + +import com.yahoo.data.access.Inspector; +import com.yahoo.data.access.simple.Value; +import com.yahoo.io.GrowableByteBuffer; +import com.yahoo.tensor.Tensor; +import com.yahoo.tensor.serialization.TypedBinaryFormat; + +import java.nio.ByteBuffer; +import java.util.Optional; + +/** + * A tensor field. Tensors are encoded as a data field where the data (following the length) + * is encoded in a tensor binary format defined by com.yahoo.tensor.serialization.TypedBinaryFormat + * + * @author bratseth + */ +public class TensorField extends DocsumField implements VariableLengthField { + + public TensorField(String name) { + super(name); + } + + @Override + public Tensor decode(ByteBuffer buffer) { + int length = ((int) buffer.getShort()) & 0xffff; + ByteBuffer contentBuffer = ByteBuffer.wrap(buffer.array(), buffer.arrayOffset() + buffer.position(), length); + Tensor tensor = TypedBinaryFormat.decode(Optional.empty(), new GrowableByteBuffer(contentBuffer)); + buffer.position(buffer.position() + length); + return tensor; + } + + @Override + public Tensor decode(ByteBuffer b, FastHit hit) { + Tensor tensor = decode(b); + hit.setField(name, tensor); + return tensor; + } + + @Override + public String toString() { + return "field " + getName() + " type tensor"; + } + + @Override + public int getLength(ByteBuffer b) { + int offset = b.position(); + int len = ((int) b.getShort()) & 0xffff; + b.position(offset + len + (Short.SIZE >> 3)); + return len + (Short.SIZE >> 3); + } + + @Override + public int sizeOfLength() { + return Short.SIZE >> 3; + } + + @Override + public Object convert(Inspector value) { + byte[] content = value.asData(Value.empty().asData()); + if (content.length == 0) return null; + return TypedBinaryFormat.decode(Optional.empty(), GrowableByteBuffer.wrap(content)); + } + +} |