diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-11-29 14:22:13 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-11-29 14:22:13 +0100 |
commit | 89f5b616f391124a8fbb6d2e9c4e8c4d32b91efa (patch) | |
tree | d5a12879a055a6ae3344b742b9dbdbbd1450f8f0 /container-search/src/main | |
parent | 3b5afd56981156cb608718925fcd55f9d7e38845 (diff) |
Limit yql in operator to string and integer fields.
Diffstat (limited to 'container-search/src/main')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/Index.java | 7 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/YqlParser.java | 8 |
2 files changed, 13 insertions, 2 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 d05ef279972..e59c4b80fc6 100644 --- a/container-search/src/main/java/com/yahoo/prelude/Index.java +++ b/container-search/src/main/java/com/yahoo/prelude/Index.java @@ -47,6 +47,7 @@ public class Index { private boolean normalize = false; private boolean literalBoost = false; private boolean numerical = false; + private boolean integer = false; private boolean string = false; private boolean predicate = false; @@ -132,6 +133,8 @@ public class Index { if (command.startsWith("type tensor(") || command.startsWith("type tensor<")) { // TODO: Type info can replace numerical, predicate, multivalue setTensor(true); + } else if (command.equals("integer")) { + setInteger(true); } else if ("fullurl".equals(command)) { setUriIndex(true); } else if ("urlhost".equals(command)) { @@ -315,6 +318,10 @@ public class Index { public boolean isString() { return string; } + public void setInteger(boolean integer) { this.integer = integer; } + + public boolean isInteger() { return integer; } + public void setPredicate(boolean isPredicate) { this.predicate = isPredicate; } public boolean isPredicate() { return predicate; } 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 5e1dfb99479..d88e30cefcf 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 @@ -415,7 +415,10 @@ public class YqlParser implements Parser { private Item buildIn(OperatorNode<ExpressionOperator> ast) { String field = getIndex(ast.getArgument(0)); - boolean stringField = indexFactsSession.getIndex(field).isString(); + var index = indexFactsSession.getIndex(field); + boolean stringField = index.isString(); + if (!index.isInteger() && !stringField) + throw new IllegalArgumentException("index " + field + " is not an integer or string field"); Item item = null; if (stringField) { item = fillStringIn(ast, ast.getArgument(1), new StringInItem(field)); @@ -638,7 +641,8 @@ public class YqlParser implements Parser { for (var value : values) { switch (value.getOperator()) { case LITERAL -> { - Long tokenValue = value.getArgument(0, Number.class).longValue(); + Number numberTokenValue = value.getArgument(0, Number.class); + Long tokenValue = (numberTokenValue instanceof Integer) ? numberTokenValue.longValue() : Long.class.cast(numberTokenValue); out.addToken(tokenValue); } case VARREF -> { |