aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-05-22 12:36:54 +0200
committerJon Bratseth <bratseth@oath.com>2018-05-22 12:36:54 +0200
commitc9bad532ed114e57594f975fdb1f697e4a288910 (patch)
tree0095e8c08eac1c333f7b4baa601d43718e2f321c /container-search
parent1b23e2014d0402b9d3de71c66304878057aec6e4 (diff)
Iterate over indexes not fields
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/IndexFacts.java16
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/SearchDefinition.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/querytransform/NGramSearcher.java13
-rw-r--r--container-search/src/test/java/com/yahoo/search/querytransform/test/NGramSearcherTestCase.java32
5 files changed, 39 insertions, 26 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java b/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java
index b899f690ee1..da4ea5a891a 100644
--- a/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java
+++ b/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java
@@ -166,8 +166,8 @@ public class IndexFacts {
}
private Index getIndexFromDocumentTypes(String indexName, List<String> documentTypes) {
- if (indexName==null || indexName.isEmpty())
- indexName="default";
+ if (indexName == null || indexName.isEmpty())
+ indexName = "default";
return getIndexByCanonicNameFromDocumentTypes(indexName, documentTypes);
}
@@ -191,6 +191,13 @@ public class IndexFacts {
return Index.nullIndex;
}
+ private Collection<Index> getIndexes(String documentType) {
+ if ( ! isInitialized()) return Collections.emptyList();
+ SearchDefinition sd = searchDefinitions.get(documentType);
+ if (sd == null) return Collections.emptyList();
+ return sd.indices().values();
+ }
+
/** Calls resolveDocumentTypes(query.getModel().getSources(), query.getModel().getRestrict()) */
private Set<String> resolveDocumentTypes(Query query) {
// Assumption: Search definition name equals document name.
@@ -421,6 +428,11 @@ public class IndexFacts {
return IndexFacts.this.getIndexFromDocumentTypes(indexName, Collections.singletonList(documentType));
}
+ /** Returnbs all the indexes of a given search definition */
+ public Collection<Index> getIndexes(String documentType) {
+ return IndexFacts.this.getIndexes(documentType);
+ }
+
/**
* Returns the canonical form of the index name (Which may be the same as
* the input).
diff --git a/container-search/src/main/java/com/yahoo/prelude/SearchDefinition.java b/container-search/src/main/java/com/yahoo/prelude/SearchDefinition.java
index 644cacfa322..47becde7b19 100644
--- a/container-search/src/main/java/com/yahoo/prelude/SearchDefinition.java
+++ b/container-search/src/main/java/com/yahoo/prelude/SearchDefinition.java
@@ -83,7 +83,7 @@ public class SearchDefinition {
}
/** Returns the indices of this as a map */
- public Map<String,Index> indices() {
+ public Map<String, Index> indices() {
return indices;
}
diff --git a/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java b/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java
index 1c6e92ebffc..e9e4e34727c 100644
--- a/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java
+++ b/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java
@@ -230,7 +230,7 @@ public class SearchHandler extends LoggingRequestHandler {
return (e.getCause() instanceof IllegalArgumentException)
? invalidParameterResponse(request, e)
: illegalQueryResponse(request, e);
- } catch (RuntimeException e) { // Make sure we generate a valid XML response even on unexpected errors
+ } catch (RuntimeException e) { // Make sure we generate a valid response even on unexpected errors
log.log(Level.WARNING, "Failed handling " + request, e);
return internalServerErrorResponse(request, e);
}
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 2768a546cd0..399ff6194c8 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
@@ -40,8 +40,8 @@ public class NGramSearcher extends Searcher {
private final CharacterClasses characterClasses;
public NGramSearcher(Linguistics linguistics) {
- gramSplitter= linguistics.getGramSplitter();
- characterClasses= linguistics.getCharacterClasses();
+ gramSplitter = linguistics.getGramSplitter();
+ characterClasses = linguistics.getCharacterClasses();
}
@Override
@@ -54,7 +54,7 @@ public class NGramSearcher extends Searcher {
if (rewritten)
query.trace("Rewritten to n-gram matching",true,2);
- Result result=execution.search(query);
+ Result result = execution.search(query);
recombineNGrams(result.hits().deepIterator(), session);
return result;
}
@@ -160,10 +160,11 @@ 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()) { // TODO: Iterate over indexes instead
- Index index = session.getIndex(fieldName, sddocname.toString());
+ for (Index index : session.getIndexes(sddocname.toString())) {
if (index.isNGram() && (index.getHighlightSummary() || index.getDynamicSummary())) {
- hit.setField(fieldName, recombineNGramsField(hit.getField(fieldName), index.getGramSize()));
+ Object fieldValue = hit.getField(index.getName());
+ if (fieldValue != null)
+ hit.setField(index.getName(), recombineNGramsField(fieldValue, index.getGramSize()));
}
}
}
diff --git a/container-search/src/test/java/com/yahoo/search/querytransform/test/NGramSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/querytransform/test/NGramSearcherTestCase.java
index 99b7eeff9a0..a3f7ff12319 100644
--- a/container-search/src/test/java/com/yahoo/search/querytransform/test/NGramSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/querytransform/test/NGramSearcherTestCase.java
@@ -46,32 +46,32 @@ public class NGramSearcherTestCase {
@Before
public void setUp() {
- searcher=new NGramSearcher(new SimpleLinguistics());
- indexFacts=new IndexFacts();
+ searcher = new NGramSearcher(new SimpleLinguistics());
+ indexFacts = new IndexFacts();
- Index defaultIndex=new Index("default");
- defaultIndex.setNGram(true,3);
+ Index defaultIndex = new Index("default");
+ defaultIndex.setNGram(true, 3);
defaultIndex.setDynamicSummary(true);
- indexFacts.addIndex("default",defaultIndex);
+ indexFacts.addIndex("default", defaultIndex);
- Index test=new Index("test");
+ Index test = new Index("test");
test.setHighlightSummary(true);
- indexFacts.addIndex("default",test);
+ indexFacts.addIndex("default", test);
- Index gram2=new Index("gram2");
- gram2.setNGram(true,2);
+ Index gram2 = new Index("gram2");
+ gram2.setNGram(true, 2);
gram2.setDynamicSummary(true);
- indexFacts.addIndex("default",gram2);
+ indexFacts.addIndex("default", gram2);
- Index gram3=new Index("gram3");
- gram3.setNGram(true,3);
+ Index gram3 = new Index("gram3");
+ gram3.setNGram(true, 3);
gram3.setHighlightSummary(true);
- indexFacts.addIndex("default",gram3);
+ indexFacts.addIndex("default", gram3);
- Index gram14=new Index("gram14");
- gram14.setNGram(true,14);
+ Index gram14 = new Index("gram14");
+ gram14.setNGram(true, 14);
gram14.setDynamicSummary(true);
- indexFacts.addIndex("default",gram14);
+ indexFacts.addIndex("default", gram14);
}
private IndexFacts getMixedSetup() {