From bcba2401d08753b3207adf1f8ec07e6ad1b38dc8 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 12 Aug 2022 19:18:07 +0200 Subject: Add todo about possible optimisation, and cleanup code a bit. --- .../main/java/com/yahoo/search/yql/YqlParser.java | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'container-search/src/main/java/com/yahoo') 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 a149ae9323a..384be7798fa 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 @@ -106,7 +106,7 @@ public class YqlParser implements Parser { public static final String ASCENDING_HITS_ORDER = "ascending"; private enum SegmentWhen { - NEVER, POSSIBLY, ALWAYS; + NEVER, POSSIBLY, ALWAYS } private static class IndexNameExpander { @@ -290,7 +290,7 @@ public class YqlParser implements Parser { Preconditions.checkArgument(filterPart.getArguments().length == 2, "Expected 2 arguments to filter, got %s.", filterPart.getArguments().length); - populateYqlSources(filterPart.> getArgument(0)); + populateYqlSources(filterPart.getArgument(0)); OperatorNode filterExpression = filterPart.getArgument(1); Item root = convertExpression(filterExpression); connectItems(); @@ -617,6 +617,8 @@ public class YqlParser implements Parser { // All terms below sameElement are relative to this. IndexNameExpander prev = swapIndexCreator(new PrefixExpander(field)); for (OperatorNode term : ast.>> getArgument(1)) { + // TODO getIndex that is called once every term is rather expensive as it does sanity checking + // that is not necessary. This is an issue when having many elements sameElement.addItem(convertExpression(term)); } swapIndexCreator(prev); @@ -838,7 +840,7 @@ public class YqlParser implements Parser { OperatorNode ast = toScan; while (ast.getOperator() == SequenceOperator.PIPE) { OperatorNode groupingAst = ast.>> getArgument(2).get(0); - GroupingOperation groupingOperation = GroupingOperation.fromString(groupingAst. getArgument(0)); + GroupingOperation groupingOperation = GroupingOperation.fromString(groupingAst.getArgument(0)); VespaGroupingStep groupingStep = new VespaGroupingStep(groupingOperation); List continuations = getAnnotation(groupingAst, "continuations", List.class, Collections.emptyList(), "grouping continuations"); @@ -854,8 +856,7 @@ public class YqlParser implements Parser { } private String dereference(Object constantOrVarref) { - if (constantOrVarref instanceof OperatorNode) { - OperatorNode varref = (OperatorNode)constantOrVarref; + if (constantOrVarref instanceof OperatorNode varref) { Preconditions.checkState(userQuery != null, "properties must be available when trying to fetch user input"); return userQuery.properties().getString(varref.getArgument(0, String.class)); @@ -871,7 +872,7 @@ public class YqlParser implements Parser { List sortingInit = new ArrayList<>(); List> sortArguments = ast.getArgument(1); for (OperatorNode op : sortArguments) { - OperatorNode fieldNode = op.> getArgument(0); + OperatorNode fieldNode = op.getArgument(0); String field = fetchFieldRead(fieldNode); String locale = getAnnotation(fieldNode, SORTING_LOCALE, String.class, null, "locale used by sorting function"); @@ -963,7 +964,7 @@ public class YqlParser implements Parser { Preconditions.checkArgument(ast.getArguments().length == 2, "Expected 2 arguments to PROJECT, got %s.", ast.getArguments().length); - populateYqlSummaryFields(ast.>> getArgument(1)); + populateYqlSummaryFields(ast.getArgument(1)); return ast.getArgument(0); } @@ -1127,7 +1128,6 @@ public class YqlParser implements Parser { return convertVarArgs(spec, 0, new OrItem()); } - @SuppressWarnings("deprecation") private CompositeItem buildWeakAnd(OperatorNode spec) { WeakAndItem weakAnd = new WeakAndItem(); Integer targetNumHits = getAnnotation(spec, TARGET_HITS, @@ -1175,7 +1175,7 @@ public class YqlParser implements Parser { if (userQuery != null && indexFactsSession.getIndex(field).isAttribute()) { userQuery.trace("Field '" + field + "' is an attribute, 'contains' will only match exactly (unless fuzzy is used)", 2); } - return instantiateLeafItem(field, ast.> getArgument(1)); + return instantiateLeafItem(field, ast.getArgument(1)); } private Item buildRegExpSearch(OperatorNode ast) { @@ -1468,7 +1468,7 @@ public class YqlParser implements Parser { wordItem = new WordItem(wordData, fromQuery); break; case POSSIBLY: - if (shouldSegment(field, ast, fromQuery) && ! grammar.equals(USER_INPUT_RAW)) { + if (shouldSegment(field, fromQuery) && ! grammar.equals(USER_INPUT_RAW)) { wordItem = segment(field, ast, wordData, fromQuery, parent, language); } else { wordItem = new WordItem(wordData, fromQuery); @@ -1489,7 +1489,7 @@ public class YqlParser implements Parser { return (Item) leafStyleSettings(ast, wordItem); } - private boolean shouldSegment(String field, OperatorNode ast, boolean fromQuery) { + private boolean shouldSegment(String field, boolean fromQuery) { return fromQuery && ! indexFactsSession.getIndex(indexNameExpander.expand(field)).isAttribute(); } @@ -1584,8 +1584,7 @@ public class YqlParser implements Parser { leaf.setWeight(weight); } } - if (out instanceof IntItem) { - IntItem number = (IntItem) out; + if (out instanceof IntItem number) { Integer hitLimit = getCappedRangeSearchParameter(ast); if (hitLimit != null) { number.setHitLimit(hitLimit); @@ -1822,7 +1821,7 @@ public class YqlParser implements Parser { Object value = ast.getAnnotation(key); for (Iterator> i = annotationStack.iterator(); value == null && considerParents && i.hasNext();) { - OperatorNode node = i.next(); + OperatorNode node = i.next(); if (node.getOperator() == ExpressionOperator.VARREF) { Preconditions.checkState(userQuery != null, "properties must be available when trying to fetch user input"); @@ -1886,8 +1885,7 @@ public class YqlParser implements Parser { @Override public boolean visit(Item item) { - if (item instanceof WordItem) { - WordItem w = (WordItem) item; + if (item instanceof WordItem w) { if (usePositionData != null) { w.setPositionData(usePositionData); } -- cgit v1.2.3