From 34c8d5e74f40b9c0f546ca54164aa9b193dcf434 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Tue, 29 Aug 2017 09:34:30 +0200 Subject: Handle that normalizing leads to an empty query --- .../yahoo/prelude/querytransform/NormalizingSearcher.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'container-search/src/main') diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/NormalizingSearcher.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/NormalizingSearcher.java index 3b9a03bb5da..02c8ecda60c 100644 --- a/container-search/src/main/java/com/yahoo/prelude/querytransform/NormalizingSearcher.java +++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/NormalizingSearcher.java @@ -52,10 +52,12 @@ public class NormalizingSearcher extends Searcher { } protected void normalize(Query query, IndexFacts.Session indexFacts) { - String oldQuery = (query.getTraceLevel() >= 2) ? query.getModel().getQueryTree().getRoot().toString() : ""; + String oldQuery = (query.getTraceLevel() >= 2) ? query.getModel().getQueryTree().getRoot().toString() : null; + normalizeBody(query, indexFacts); - if (query.getTraceLevel() >= 2) - if (!(oldQuery.equals(query.getModel().getQueryTree().getRoot().toString()))) query.trace(getFunctionName(), true, 2); + + if (query.getTraceLevel() >= 2 && ! query.getModel().getQueryTree().getRoot().toString().equals(oldQuery)) + query.trace(getFunctionName(), true, 2); } private Query normalizeBody(Query query, IndexFacts.Session indexFacts) { @@ -63,19 +65,18 @@ public class NormalizingSearcher extends Searcher { Language language = query.getModel().getParsingLanguage(); if (root instanceof BlockItem) { List rootItems = new ArrayList<>(1); - rootItems.add(root); ListIterator i = rootItems.listIterator(); - i.next(); normalizeBlocks(language, indexFacts, (BlockItem) root, i); - query.getModel().getQueryTree().setRoot(rootItems.get(0)); + if ( ! rootItems.isEmpty()) // give up normalizing if the root was removed + query.getModel().getQueryTree().setRoot(rootItems.get(0)); } else if (root instanceof CompositeItem) { query.getModel().getQueryTree().setRoot(normalizeComposite(language, indexFacts, (CompositeItem) root)); } return query; } - + private Item normalizeComposite(Language language, IndexFacts.Session indexFacts, CompositeItem item) { if (item instanceof PhraseItem) { return normalizePhrase(language, indexFacts, (PhraseItem) item); -- cgit v1.2.3