aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/fs4/DocumentInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/fs4/DocumentInfo.java')
-rw-r--r--container-search/src/main/java/com/yahoo/fs4/DocumentInfo.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/fs4/DocumentInfo.java b/container-search/src/main/java/com/yahoo/fs4/DocumentInfo.java
new file mode 100644
index 00000000000..8294ae5796d
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/fs4/DocumentInfo.java
@@ -0,0 +1,74 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.fs4;
+
+import com.yahoo.document.GlobalId;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Meta attributes on documents (not the document summaries themselves).
+ * Used in query results and get docusum packages
+ *
+ * @author bratseth
+ */
+public class DocumentInfo implements Cloneable {
+
+ private final byte [] globalId;
+ private final double metric;
+ private final int partId;
+ private final int distributionKey;
+ private final byte[] sortData;
+
+ DocumentInfo(ByteBuffer buffer, QueryResultPacket owner, byte[] sortData) {
+ globalId = new byte[GlobalId.LENGTH];
+ buffer.get(globalId);
+ metric = decodeMetric(buffer);
+ partId = owner.getMldFeature() ? buffer.getInt() : 0;
+ distributionKey = owner.getMldFeature() ? buffer.getInt() : 0;
+ this.sortData = sortData;
+ }
+
+ public DocumentInfo(GlobalId globalId, int metric, int partId, int distributionKey) {
+ this.globalId = globalId.getRawId();
+ this.metric = metric;
+ this.partId = partId;
+ this.distributionKey = distributionKey;
+ this.sortData = null;
+ }
+
+ private double decodeMetric(ByteBuffer buffer) {
+ return buffer.getDouble();
+ }
+
+ public GlobalId getGlobalId() { return new GlobalId(globalId); }
+ public byte [] getRawGlobalId() { return globalId; }
+
+ /** Raw rank score */
+ public double getMetric() { return metric; }
+
+ /** Partition this document resides on */
+ public int getPartId() { return partId; }
+
+ /** Unique key for the node this document resides on */
+ public int getDistributionKey() { return distributionKey; }
+
+ public byte[] getSortData() {
+ return sortData;
+ }
+
+ public String toString() {
+ return "document info [globalId=" + new GlobalId(globalId).toString() + ", metric=" + metric + "]";
+ }
+
+ /**
+ * Implements the Cloneable interface
+ */
+ public Object clone() {
+ try {
+ return super.clone();
+ }
+ catch (CloneNotSupportedException e) {
+ throw new RuntimeException("Someone inserted a nonclonable superclass");
+ }
+ }
+}