summaryrefslogtreecommitdiffstats
path: root/container-search/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-05-11 13:39:53 +0200
committerJon Bratseth <bratseth@oath.com>2018-05-11 13:39:53 +0200
commit70f9a444803a66468b7c36e09138e9ee59117bd6 (patch)
tree62fcfe21d6db38971f047fe8b94decbe98a8ec7c /container-search/src
parentd94735728f8e89db373527dddfa0999de138c3dd (diff)
Iterate over fields by callback
Diffstat (limited to 'container-search/src')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/searcher/DocumentSourceSearcher.java2
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java6
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/searcher/QuotingSearcher.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java23
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java31
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/FieldFilter.java7
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/FieldFilterTestCase.java6
10 files changed, 33 insertions, 58 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/searcher/DocumentSourceSearcher.java b/container-search/src/main/java/com/yahoo/prelude/searcher/DocumentSourceSearcher.java
index 164ff9a993b..415ebd7871c 100644
--- a/container-search/src/main/java/com/yahoo/prelude/searcher/DocumentSourceSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/searcher/DocumentSourceSearcher.java
@@ -74,7 +74,7 @@ public class DocumentSourceSearcher extends Searcher {
removePropertiesNotStartingByA(attributeHit);
attributeHit.setFillable();
attributeHit.setRelevance(fullHit.getRelevance());
- for (Object propertyKeyObject : (Set) fullHit.fields().keySet()) {
+ for (Object propertyKeyObject : fullHit.fields().keySet()) {
String propertyKey=propertyKeyObject.toString();
if (propertyKey.startsWith("attribute"))
attributeHit.setField(propertyKey, fullHit.getField(propertyKey));
diff --git a/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java b/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java
index 9e1808bb08e..ca87c0c1d46 100644
--- a/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/searcher/JuniperSearcher.java
@@ -107,6 +107,12 @@ public class JuniperSearcher extends Searcher {
if (searchDefinitionField == null) continue;
String searchDefinitionName = searchDefinitionField.toString();
+ // TODO: Switch to iterate over indexes in the outer loop:
+ //for (Index index : indexFacts.getIndexes(searchDefinitionName())) {
+ // if (index.getDynamicSummary() || index.getHighlightSummary()) {
+ // insertTags(hit.buildHitField(index.getName(), true, true), bolding, index.getDynamicSummary());
+ // }
+ //}
for (String fieldName : hit.fields().keySet()) {
Index index = indexFacts.getIndex(fieldName, searchDefinitionName);
if (index.getDynamicSummary() || index.getHighlightSummary())
diff --git a/container-search/src/main/java/com/yahoo/prelude/searcher/QuotingSearcher.java b/container-search/src/main/java/com/yahoo/prelude/searcher/QuotingSearcher.java
index 7ff5b1b1a0e..d4cad7f1246 100644
--- a/container-search/src/main/java/com/yahoo/prelude/searcher/QuotingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/searcher/QuotingSearcher.java
@@ -20,7 +20,7 @@ import com.yahoo.search.searchchain.Execution;
*
* May be extended to do quoting template sensitive.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public class QuotingSearcher extends Searcher {
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java b/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java
index 259b219b181..37906c8012f 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java
@@ -13,7 +13,7 @@ import java.util.Map;
/**
* This is a helper class for rendering grouping results.
*
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public abstract class HitRenderer {
@@ -50,9 +50,7 @@ public abstract class HitRenderer {
if (hit instanceof RootGroup) {
renderContinuation(Continuation.THIS_PAGE, ((RootGroup)hit).continuation(), writer);
}
- for (String label : hit.fieldKeys()) {
- writer.openTag(TAG_OUTPUT).attribute(ATR_LABEL, label).content(hit.getField(label), false).closeTag();
- }
+ hit.forEachField((name, value) -> writer.openTag(TAG_OUTPUT).attribute(ATR_LABEL, name).content(value, false).closeTag());
} else if (hit instanceof HitList) {
writer.openTag(TAG_HIT_LIST).attribute(ATR_LABEL, ((HitList)hit).getLabel());
renderContinuations(((HitList)hit).continuations(), writer);
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java
index 97a5bdd72ca..3e6e82a5584 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java
@@ -37,11 +37,7 @@ public class Organizer {
sectionGroup.setQuery(result.hits().getQuery());
if (errors!=null && errors instanceof DefaultErrorHit)
sectionGroup.add((DefaultErrorHit)errors);
- for (Iterator<Map.Entry<String, Object>> it = result.hits().fieldIterator(); it.hasNext(); ) {
- Map.Entry<String, Object> field = it.next();
- sectionGroup.setField(field.getKey(), field.getValue());
- }
-
+ result.hits().forEachField((name, value) -> sectionGroup.setField(name, value));
result.setHits(sectionGroup);
}
diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java
index c64927072e2..2768a546cd0 100644
--- a/container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java
@@ -160,7 +160,7 @@ public class NGramSearcher extends Searcher {
if (hit.isMeta()) continue;
Object sddocname = hit.getField(Hit.SDDOCNAME_FIELD);
if (sddocname == null) return;
- for (String fieldName : hit.fieldKeys()) {
+ for (String fieldName : hit.fieldKeys()) { // TODO: Iterate over indexes instead
Index index = session.getIndex(fieldName, sddocname.toString());
if (index.isNGram() && (index.getHighlightSummary() || index.getDynamicSummary())) {
hit.setField(fieldName, recombineNGramsField(hit.getField(fieldName), index.getGramSize()));
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
index bae1185d6a9..2d69a262f15 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/DefaultRenderer.java
@@ -185,28 +185,19 @@ public final class DefaultRenderer extends AsynchronousSectionedRenderer<Result>
private void renderHitFields(XMLWriter writer, Hit hit) {
renderSyntheticRelevanceField(writer, hit);
- for (Iterator<Map.Entry<String, Object>> it = hit.fieldIterator(); it.hasNext(); ) {
- renderField(writer, hit, it);
- }
- }
-
- private void renderField(XMLWriter writer, Hit hit, Iterator<Map.Entry<String, Object>> it) {
- renderGenericField(writer, hit, it.next());
+ hit.forEachField((name, value) -> renderField(writer, name, value));
}
- private void renderGenericField(XMLWriter writer, Hit hit, Map.Entry<String, Object> entry) {
- String fieldName = entry.getKey();
-
- // skip depending on hit type
- if (fieldName.startsWith("$")) return; // Don't render fields that start with $ // TODO: Move to should render
+ private void renderField(XMLWriter writer, String name, Object value) {
+ if (name.startsWith("$")) return;
- writeOpenFieldElement(writer, fieldName);
- renderFieldContent(writer, hit, fieldName);
+ writeOpenFieldElement(writer, name);
+ renderFieldContent(writer, value);
writeCloseFieldElement(writer);
}
- private void renderFieldContent(XMLWriter writer, Hit hit, String fieldName) {
- writer.escapedContent(asXML(hit.getField(fieldName)), false);
+ private void renderFieldContent(XMLWriter writer, Object value) {
+ writer.escapedContent(asXML(value), false);
}
private String asXML(Object value) {
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java
index dc72061e224..08599540cb1 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/SyncDefaultRenderer.java
@@ -271,25 +271,19 @@ public final class SyncDefaultRenderer extends Renderer {
private void renderHitFields(XMLWriter writer, Hit hit) {
renderSyntheticRelevanceField(writer, hit);
- for (Iterator<Map.Entry<String, Object>> it = hit.fieldIterator(); it.hasNext(); ) {
- renderField(writer, hit, it);
- }
+ hit.forEachField((name, value) -> renderField(writer, name, value));
}
- private void renderField(XMLWriter writer, Hit hit, Iterator<Map.Entry<String, Object>> it) {
- Map.Entry<String, Object> entry = it.next();
- String fieldName = entry.getKey();
-
- if ( ! shouldRenderField(hit, fieldName)) return;
- if (fieldName.startsWith("$")) return; // Don't render fields that start with $ // TODO: Move to should render
+ private void renderField(XMLWriter writer, String name, Object value) {
+ if (name.startsWith("$")) return;
- writeOpenFieldElement(writer, fieldName);
- renderFieldContent(writer, hit, fieldName);
+ writeOpenFieldElement(writer, name);
+ renderFieldContent(writer, value);
writeCloseFieldElement(writer);
}
- private void renderFieldContent(XMLWriter writer, Hit hit, String fieldName) {
- writer.escapedContent(asXML(hit.getField(fieldName)), false);
+ private void renderFieldContent(XMLWriter writer, Object value) {
+ writer.escapedContent(asXML(value), false);
}
private String asXML(Object value) {
@@ -304,10 +298,10 @@ public final class SyncDefaultRenderer extends Renderer {
}
private void renderSyntheticRelevanceField(XMLWriter writer, Hit hit) {
- final String relevancyFieldName = "relevancy";
- final Relevance relevance = hit.getRelevance();
+ String relevancyFieldName = "relevancy";
+ Relevance relevance = hit.getRelevance();
- if (shouldRenderField(hit, relevancyFieldName) && relevance != null) {
+ if (relevance != null) {
renderSimpleField(writer, relevancyFieldName, relevance);
}
}
@@ -332,11 +326,6 @@ public final class SyncDefaultRenderer extends Renderer {
writer.closeStartTag();
}
- private boolean shouldRenderField(Hit hit, String relevancyFieldName) {
- // skip depending on hit type
- return true;
- }
-
private void renderHitAttributes(XMLWriter writer, Hit hit) {
writer.attribute(TYPE, hit.types().stream().collect(Collectors.joining(" ")));
if (hit.getRelevance() != null) {
diff --git a/container-search/src/main/java/com/yahoo/search/yql/FieldFilter.java b/container-search/src/main/java/com/yahoo/search/yql/FieldFilter.java
index 75c2865d0a5..14dce2f6342 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/FieldFilter.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/FieldFilter.java
@@ -52,12 +52,7 @@ public class FieldFilter extends Searcher {
for (Iterator<Hit> i = result.hits().unorderedDeepIterator(); i.hasNext();) {
Hit h = i.next();
if (h.isMeta()) continue;
- for (Iterator<Entry<String, Object>> fields = h.fieldIterator(); fields.hasNext();) {
- Entry<String, Object> field = fields.next();
- if ( ! requestedFields.contains(field.getKey()))
- fields.remove();
- }
-
+ h.fieldKeys().retainAll(requestedFields);
}
}
diff --git a/container-search/src/test/java/com/yahoo/search/yql/FieldFilterTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/FieldFilterTestCase.java
index f5097aec6e1..50313b630ea 100644
--- a/container-search/src/test/java/com/yahoo/search/yql/FieldFilterTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/yql/FieldFilterTestCase.java
@@ -20,9 +20,10 @@ import com.yahoo.search.searchchain.testutil.DocumentSourceSearcher;
/**
* Smoketest that we remove fields in a sane manner.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public class FieldFilterTestCase {
+
private static final String FIELD_C = "c";
private static final String FIELD_B = "b";
private static final String FIELD_A = "a";
@@ -41,8 +42,7 @@ public class FieldFilterTestCase {
DocumentSourceSearcher mockBackend = new DocumentSourceSearcher();
mockBackend.addResult(query, result);
- searchChain = new Chain<Searcher>(new FieldFilter(),
- mockBackend);
+ searchChain = new Chain<Searcher>(new FieldFilter(), mockBackend);
context = Execution.Context.createContextStub(null);
execution = new Execution(searchChain, context);