diff options
author | Arne H Juul <arnej@yahooinc.com> | 2021-10-20 06:44:52 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2021-10-20 08:36:29 +0000 |
commit | 9e6e4ae525f426ad07c74f9cd6286001d79a9c34 (patch) | |
tree | ada32c7ccfd9ebeee938b30c322a44a4fb0098d8 /container-search/src/main/java/com/yahoo/search | |
parent | 9b02489489bf59c7bf208aaba4bd07f98f884132 (diff) |
add YQL parsing/serialization for FalseItem
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java | 12 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/YqlParser.java | 21 |
2 files changed, 28 insertions, 5 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java index decdaae3a0f..012f427a781 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java +++ b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java @@ -69,6 +69,7 @@ import com.yahoo.prelude.query.AndSegmentItem; import com.yahoo.prelude.query.BoolItem; import com.yahoo.prelude.query.DotProductItem; import com.yahoo.prelude.query.EquivItem; +import com.yahoo.prelude.query.FalseItem; import com.yahoo.prelude.query.ExactStringItem; import com.yahoo.prelude.query.IndexedItem; import com.yahoo.prelude.query.IntItem; @@ -483,6 +484,16 @@ public class VespaSerializer { } + private static class FalseSerializer extends Serializer<FalseItem> { + @Override + void onExit(StringBuilder destination, FalseItem item) { } + @Override + boolean serialize(StringBuilder destination, FalseItem item) { + destination.append("false"); + return false; + } + } + private static class RegExpSerializer extends Serializer<RegExpItem> { @Override @@ -1194,6 +1205,7 @@ public class VespaSerializer { dispatchBuilder.put(IntItem.class, new NumberSerializer()); dispatchBuilder.put(GeoLocationItem.class, new GeoLocationSerializer()); dispatchBuilder.put(BoolItem.class, new BoolSerializer()); + dispatchBuilder.put(FalseItem.class, new FalseSerializer()); dispatchBuilder.put(MarkerWordItem.class, new WordSerializer()); // gotcha dispatchBuilder.put(NearItem.class, new NearSerializer()); dispatchBuilder.put(NearestNeighborItem.class, new NearestNeighborSerializer()); diff --git a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java index cdfcef7e2a9..fa2b9fd14e7 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java +++ b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java @@ -33,6 +33,7 @@ import com.yahoo.prelude.query.BoolItem; import com.yahoo.prelude.query.CompositeItem; import com.yahoo.prelude.query.DotProductItem; import com.yahoo.prelude.query.EquivItem; +import com.yahoo.prelude.query.FalseItem; import com.yahoo.prelude.query.ExactStringItem; import com.yahoo.prelude.query.IntItem; import com.yahoo.prelude.query.Item; @@ -151,12 +152,12 @@ public class YqlParser implements Parser { public static final String CONNECTION_WEIGHT = "weight"; public static final String CONNECTIVITY = "connectivity"; public static final String DISTANCE = "distance"; + public static final String DISTANCE_THRESHOLD = "distanceThreshold"; public static final String DOT_PRODUCT = "dotProduct"; public static final String EQUIV = "equiv"; public static final String FILTER = "filter"; public static final String GEO_LOCATION = "geoLocation"; public static final String HIT_LIMIT = "hitLimit"; - public static final String DISTANCE_THRESHOLD = "distanceThreshold"; public static final String HNSW_EXPLORE_ADDITIONAL_HITS = "hnsw.exploreAdditionalHits"; public static final String IMPLICIT_TRANSFORMS = "implicitTransforms"; public static final String LABEL = "label"; @@ -164,16 +165,16 @@ public class YqlParser implements Parser { public static final String NEAREST_NEIGHBOR = "nearestNeighbor"; public static final String NORMALIZE_CASE = "normalizeCase"; public static final String ONEAR = "onear"; + public static final String ORIGIN = "origin"; public static final String ORIGIN_LENGTH = "length"; public static final String ORIGIN_OFFSET = "offset"; - public static final String ORIGIN = "origin"; public static final String ORIGIN_ORIGINAL = "original"; public static final String PHRASE = "phrase"; public static final String PREDICATE = "predicate"; public static final String PREFIX = "prefix"; public static final String RANGE = "range"; - public static final String RANKED = "ranked"; public static final String RANK = "rank"; + public static final String RANKED = "ranked"; public static final String SAME_ELEMENT = "sameElement"; public static final String SCORE_THRESHOLD = "scoreThreshold"; public static final String SIGNIFICANCE = "significance"; @@ -184,12 +185,12 @@ public class YqlParser implements Parser { public static final String TARGET_NUM_HITS = "targetNumHits"; public static final String THRESHOLD_BOOST_FACTOR = "thresholdBoostFactor"; public static final String UNIQUE_ID = "id"; + public static final String URI = "uri"; public static final String USE_POSITION_DATA = "usePositionData"; public static final String WAND = "wand"; public static final String WEAK_AND = "weakAnd"; - public static final String WEIGHTED_SET = "weightedSet"; public static final String WEIGHT = "weight"; - public static final String URI = "uri"; + public static final String WEIGHTED_SET = "weightedSet"; private final IndexFacts indexFacts; private final List<ConnectedItem> connectedItems = new ArrayList<>(); @@ -352,6 +353,8 @@ public class YqlParser implements Parser { return buildRegExpSearch(ast); case CALL: return buildFunctionCall(ast); + case LITERAL: + return buildLiteral(ast); default: throw newUnexpectedArgumentException(ast.getOperator(), ExpressionOperator.AND, ExpressionOperator.CALL, @@ -445,6 +448,14 @@ public class YqlParser implements Parser { return item; } + private Item buildLiteral(OperatorNode<ExpressionOperator> ast) { + var literal = ast.getArgument(0); + if (Boolean.FALSE.equals(literal)) { + return new FalseItem(); + } + throw newUnexpectedArgumentException(literal, Boolean.FALSE); + } + private Item buildNearestNeighbor(OperatorNode<ExpressionOperator> ast) { List<OperatorNode<ExpressionOperator>> args = ast.getArgument(1); Preconditions.checkArgument(args.size() == 2, "Expected 2 arguments, got %s.", args.size()); |