summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/Index.java6
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/IndexModel.java1
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/AllParser.java1
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/AnyParser.java33
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/SimpleParser.java52
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java17
6 files changed, 65 insertions, 45 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();