diff options
author | Arnstein Ressem <aressem@verizonmedia.com> | 2020-03-03 07:49:36 +0100 |
---|---|---|
committer | Arnstein Ressem <aressem@verizonmedia.com> | 2020-03-03 07:49:36 +0100 |
commit | 560df96b5e4838261bc0729f449926f8e90a30f7 (patch) | |
tree | 57a06a0c8a0f5c40a911dea183dd6b2d979e8369 /container-search/src/main | |
parent | dc70c4bf6c9b064776f3c13e6769093611660621 (diff) |
Revert parser changes that broke system tests.
Diffstat (limited to 'container-search/src/main')
7 files changed, 74 insertions, 50 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/Index.java b/container-search/src/main/java/com/yahoo/prelude/Index.java index 5e7fddd7fe7..365ee299ca4 100644 --- a/container-search/src/main/java/com/yahoo/prelude/Index.java +++ b/container-search/src/main/java/com/yahoo/prelude/Index.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.prelude; + import com.yahoo.language.process.StemMode; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; + /** * Information about configured settings of a field or field collection (an actual index or not) in a search definition. * There are two types of settings: @@ -72,8 +74,8 @@ public class Index { private boolean isNGram = false; private int gramSize = 2; - /** Whether implicit phrases should lead to a phrase item or an and item. */ - private Boolean phraseSegmenting = false; + /** Whether implicit phrases should lead to a phrase item or an and item */ + private boolean phraseSegmenting = true; /** The string terminating an exact token in this index, or null to use the default (space) */ private String exactTerminator = null; diff --git a/container-search/src/main/java/com/yahoo/prelude/IndexModel.java b/container-search/src/main/java/com/yahoo/prelude/IndexModel.java index 00935392683..062a514056b 100644 --- a/container-search/src/main/java/com/yahoo/prelude/IndexModel.java +++ b/container-search/src/main/java/com/yahoo/prelude/IndexModel.java @@ -109,6 +109,7 @@ public final class IndexModel { return searchDefinitions; } + @SuppressWarnings("deprecation") private SearchDefinition unionOf(Collection<SearchDefinition> searchDefinitions) { SearchDefinition union = new SearchDefinition(IndexFacts.unionName); diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java index 49bdba2c90f..d9b969757c2 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java @@ -30,7 +30,6 @@ public class AllParser extends SimpleParser { super(environment); } - @Override protected Item parseItems() { int position = tokens.getPosition(); try { diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java index b714a1d8b34..dd836e9c8e1 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java @@ -35,12 +35,21 @@ public class AnyParser extends SimpleParser { return anyItems(true); } + Item parseFilter(String filter, Language queryLanguage, Set<String> searchDefinitions) { + return parseFilter(filter, queryLanguage, environment.getIndexFacts().newSession(searchDefinitions, Collections.emptySet())); + } + Item parseFilter(String filter, Language queryLanguage, IndexFacts.Session indexFacts) { + Item filterRoot; + setState(queryLanguage, indexFacts); tokenize(filter, null, indexFacts, queryLanguage); - Item filterRoot = anyItems(true); - if (filterRoot == null) return null; + filterRoot = anyItems(true); + + if (filterRoot == null) { + return null; + } markAllTermsAsFilters(filterRoot); return filterRoot; @@ -52,10 +61,18 @@ public class AnyParser extends SimpleParser { try { tokens.skipMultiple(PLUS); - if ( ! tokens.skipMultiple(MINUS)) return null; - if (tokens.currentIsNoIgnore(SPACE)) return null; - item = indexableItem(); + if (!tokens.skipMultiple(MINUS)) { + return null; + } + + if (tokens.currentIsNoIgnore(SPACE)) { + return null; + } + + if (item == null) { + item = indexableItem(); + } if (item == null) { item = compositeItem(); @@ -71,13 +88,13 @@ public class AnyParser extends SimpleParser { } } } - if (item != null) + if (item!=null) item.setProtected(true); - return item; } finally { - if (item == null) + if (item == null) { tokens.setPosition(position); + } } } diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java index 3d244312b2f..9ddfea6dffb 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java @@ -50,28 +50,32 @@ abstract class SimpleParser extends StructuredParser { private Item anyItemsBody(boolean topLevel) { Item topLevelItem = null; NotItem not = null; - Item item = null; + Item item; do { - item = positiveItem(); - if (item != null) { - if (not == null) { - not = new NotItem(); - not.addPositiveItem(item); - topLevelItem = combineItems(topLevelItem, not); - } else { - not.addPositiveItem(item); + item = null; + + if (item == null) { + item = positiveItem(); + if (item != null) { + if (not == null) { + not = new NotItem(); + not.addPositiveItem(item); + topLevelItem = combineItems(topLevelItem, not); + } else { + not.addPositiveItem(item); + } } } if (item == null) { item = negativeItem(); if (item != null) { - if (not == null) { + if (not == null && item != null) { not = new NotItem(); not.addNegativeItem(item); topLevelItem = combineItems(topLevelItem, not); - } else { + } else if (item != null) { not.addNegativeItem(item); } } @@ -93,8 +97,9 @@ abstract class SimpleParser extends StructuredParser { if (item != null) { if (topLevelItem == null) { topLevelItem = item; - } else if (needNewORTopLevel(topLevelItem, item)) { + } else if (needNewTopLevel(topLevelItem, item)) { CompositeItem newTop = new OrItem(); + newTop.addItem(topLevelItem); newTop.addItem(item); topLevelItem = newTop; @@ -126,7 +131,6 @@ abstract class SimpleParser extends StructuredParser { if (topLevelItem != null && topLevelItem != not) { // => neutral rank items becomes implicit positives - System.out.println("Extracting positive item from " + topLevelItem); not.addPositiveItem(getItemAsPositiveItem(topLevelItem, not)); return not; } else { // Only negatives - ignore them @@ -140,13 +144,21 @@ abstract class SimpleParser extends StructuredParser { } } - /** Says whether we need a new top level OR item given the new item */ - private boolean needNewORTopLevel(Item topLevelItem, Item item) { - if (item == null) return false; - if (topLevelItem instanceof TermItem) return true; - if (topLevelItem instanceof PhraseItem) return true; - if (topLevelItem instanceof BlockItem) return true; - if ( topLevelItem instanceof AndItem) return true; + + /** Says whether we need a new top level item given the new item */ + private boolean needNewTopLevel(Item topLevelItem, Item item) { + if (item == null) { + return false; + } + if (topLevelItem instanceof TermItem) { + return true; + } + if (topLevelItem instanceof PhraseItem) { + return true; + } + if (topLevelItem instanceof BlockItem) { + return true; + } return false; } diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java index 9ba6c1a8101..5e292a06b0f 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java @@ -442,9 +442,9 @@ abstract class StructuredParser extends AbstractParser { Item item = null; try { - if ( ! tokens.currentIs(WORD) - && ((!tokens.currentIs(NUMBER) && !tokens.currentIs(MINUS) - && !tokens.currentIs(UNDERSCORE)) || (!submodes.url && !submodes.site))) { + if (!tokens.currentIs(WORD) + && ((!tokens.currentIs(NUMBER) && !tokens.currentIs(MINUS) + && !tokens.currentIs(UNDERSCORE)) || (!submodes.url && !submodes.site))) { return null; } Token word = tokens.next(); @@ -557,7 +557,6 @@ abstract class StructuredParser extends AbstractParser { if (composite != null) { composite.addItem(word); - connectLastTermsIn(composite); } else if (firstWord != null) { if (submodes.site || submodes.url) { UriItem uriItem = new UriItem(); @@ -585,7 +584,6 @@ abstract class StructuredParser extends AbstractParser { } composite.addItem(firstWord); composite.addItem(word); - connectLastTermsIn(composite); } else if (word instanceof PhraseItem) { composite = (PhraseItem)word; } else { @@ -656,15 +654,6 @@ abstract class StructuredParser extends AbstractParser { } } - private void connectLastTermsIn(CompositeItem composite) { - int items = composite.items().size(); - if (items < 2) return; - Item nextToLast = composite.items().get(items - 2); - Item last = composite.items().get(items - 1); - if ( ! (nextToLast instanceof TermItem)) return; - ((TermItem)nextToLast).setConnectivity(last, 1); - } - private boolean addStartMarking() { if (submodes.explicitAnchoring() && tokens.currentIs(HAT)) { tokens.skip(); diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/testutil/DocumentSourceSearcher.java b/container-search/src/main/java/com/yahoo/search/searchchain/testutil/DocumentSourceSearcher.java index e346a766738..d39a488626b 100644 --- a/container-search/src/main/java/com/yahoo/search/searchchain/testutil/DocumentSourceSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/searchchain/testutil/DocumentSourceSearcher.java @@ -97,10 +97,11 @@ public class DocumentSourceSearcher extends Searcher { public Result search(Query query, Execution execution) { queryCount++; Result r = unFilledResults.get(getQueryKeyClone(query)); - if (r == null) + if (r == null) { r = defaultFilledResult.clone(); - else + } else { r = r.clone(); + } r.setQuery(query); r.hits().trim(query.getOffset(), query.getHits()); @@ -181,8 +182,11 @@ public class DocumentSourceSearcher extends Searcher { * reset. For testing - not reliable if multiple threads makes * queries simultaneously */ - public int getQueryCount() { return queryCount; } - - public void resetQueryCount() { queryCount = 0; } + public int getQueryCount() { + return queryCount; + } + public void resetQueryCount() { + queryCount=0; + } } |