diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2018-06-19 11:10:32 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2018-06-19 12:06:29 +0000 |
commit | 8dbadaa0951f6a414a4f099818a5633db3554e56 (patch) | |
tree | bb1ef7c72e4da9e3d49915b43246d1d7c4071a90 /container-search | |
parent | 6ec6ccc990fb21a89ce7039e40b5b3f94b41af10 (diff) |
add summaries at start of list instead
Diffstat (limited to 'container-search')
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 |