aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-06-19 11:10:32 +0000
committerArne Juul <arnej@yahoo-inc.com>2018-06-19 12:06:29 +0000
commit8dbadaa0951f6a414a4f099818a5633db3554e56 (patch)
treebb1ef7c72e4da9e3d49915b43246d1d7c4071a90 /container-search
parent6ec6ccc990fb21a89ce7039e40b5b3f94b41af10 (diff)
add summaries at start of list instead
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java13
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java29
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/partial-summary3.cfg10
3 files changed, 42 insertions, 10 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
index de2738c5d5e..3a2e922f9e0 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastHit.java
@@ -163,7 +163,7 @@ public class FastHit extends Hit {
public void addSummary(DocsumDefinition docsumDef, Inspector value) {
if (removedFields != null)
removedFields.removeAll(docsumDef.fieldNames());
- summaries.add(new SummaryData(this, docsumDef, value, summaries.size()));
+ summaries.add(0, new SummaryData(this, docsumDef, value, 1 + summaries.size()));
}
/**
@@ -331,13 +331,12 @@ public class FastHit extends Hit {
private Object getSummaryValue(String name) {
if (removedFields != null && removedFields.contains(name))
return null;
- Object retval = null;
// fetch from last added summary with the field
for (SummaryData summaryData : summaries) {
Object value = summaryData.getField(name);
- if (value != null) retval = value;
+ if (value != null) return value;
}
- return retval;
+ return null;
}
@Override
@@ -522,7 +521,7 @@ public class FastHit extends Hit {
private final DocsumDefinition type;
private final Inspector data;
- /** The index of this summary in the list of summaries added to this */
+ /** The index from the end of this summary in the list of summaries */
private final int index;
SummaryData(FastHit hit, DocsumDefinition type, Inspector data, int index) {
@@ -579,11 +578,11 @@ public class FastHit extends Hit {
/**
* Returns whether this field is present in the map properties
- * or a later (higher index) summary in this hit
+ * or a summary added later in this hit
*/
private boolean shadowed(String name) {
if (hit.hasField(name)) return true;
- for (int i = index + 1; i < hit.summaries.size(); i++) {
+ for (int i = 0; i < hit.summaries.size() - index; i++) {
if (hit.summaries.get(i).type.fieldNames().contains(name))
return true;
}
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
index 421f70c8d07..81f16f7f261 100644
--- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
@@ -35,9 +35,11 @@ import static org.junit.Assert.fail;
public class SlimeSummaryTestCase {
- private static final String summary_cf = "file:src/test/java/com/yahoo/prelude/fastsearch/summary.cfg";
- private static final String partial_summary1_cf = "file:src/test/java/com/yahoo/prelude/fastsearch/partial-summary1.cfg";
- private static final String partial_summary2_cf = "file:src/test/java/com/yahoo/prelude/fastsearch/partial-summary2.cfg";
+ private static final String cf_pre = "file:src/test/java/com/yahoo/prelude/fastsearch/";
+ private static final String summary_cf = cf_pre + "summary.cfg";
+ private static final String partial_summary1_cf = cf_pre + "partial-summary1.cfg";
+ private static final String partial_summary2_cf = cf_pre + "partial-summary2.cfg";
+ private static final String partial_summary3_cf = cf_pre + "partial-summary3.cfg";
@Test
public void testDecodingEmpty() {
@@ -143,6 +145,7 @@ public class SlimeSummaryTestCase {
public void testFieldAccessAPI() {
DocsumDefinitionSet partialDocsum1 = createDocsumDefinitionSet(partial_summary1_cf);
DocsumDefinitionSet partialDocsum2 = createDocsumDefinitionSet(partial_summary2_cf);
+ DocsumDefinitionSet partialDocsum3 = createDocsumDefinitionSet(partial_summary3_cf);
DocsumDefinitionSet fullDocsum = createDocsumDefinitionSet(summary_cf);
FastHit hit = new FastHit();
Map<String, Object> expected = new HashMap<>();
@@ -273,6 +276,18 @@ public class SlimeSummaryTestCase {
expected.put("string_field", "string_value");
expected.put("longstring_field", "longstring_value");
assertFields(expected, hit);
+
+ hit.removeField("string_field");
+ hit.removeField("integer_field");
+ partialDocsum3.lazyDecode("partial3", partialSummary3(), hit);
+ expected.put("string_field", "new str val");
+ expected.put("integer_field", 5);
+ assertFields(expected, hit);
+
+ hit.removeField("integer_field");
+ partialDocsum2.lazyDecode("partial2", partialSummary2(), hit);
+ expected.put("integer_field", 4);
+ assertFields(expected, hit);
}
@@ -344,6 +359,14 @@ public class SlimeSummaryTestCase {
return encode((slime));
}
+ private byte[] partialSummary3() {
+ Slime slime = new Slime();
+ Cursor docsum = slime.setObject();
+ docsum.setString("string_field", "new str val");
+ docsum.setLong("integer_field", 5);
+ return encode((slime));
+ }
+
private byte[] fullishSummary() {
Slime slime = new Slime();
Cursor docsum = slime.setObject();
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/partial-summary3.cfg b/container-search/src/test/java/com/yahoo/prelude/fastsearch/partial-summary3.cfg
new file mode 100644
index 00000000000..5d7319fd393
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/partial-summary3.cfg
@@ -0,0 +1,10 @@
+documentdb[1]
+documentdb[0].name test
+documentdb[0].summaryclass[1]
+documentdb[0].summaryclass[0].name partial3
+documentdb[0].summaryclass[0].id 3
+documentdb[0].summaryclass[0].fields[3]
+documentdb[0].summaryclass[0].fields[0].name integer_field
+documentdb[0].summaryclass[0].fields[0].type integer
+documentdb[0].summaryclass[0].fields[1].name string_field
+documentdb[0].summaryclass[0].fields[1].type string