aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-11-29 14:22:13 +0100
committerTor Egge <Tor.Egge@online.no>2023-11-29 14:22:13 +0100
commit89f5b616f391124a8fbb6d2e9c4e8c4d32b91efa (patch)
treed5a12879a055a6ae3344b742b9dbdbbd1450f8f0 /container-search/src/main
parent3b5afd56981156cb608718925fcd55f9d7e38845 (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.java7
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/YqlParser.java8
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 -> {