summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-12-03 10:22:26 +0100
committerJon Bratseth <bratseth@gmail.com>2020-12-03 10:22:26 +0100
commitf0ef833df79cd84148d21679f3b5660bbe15cc60 (patch)
tree6a11a3317eec125128e34ee09688569ec44625c8 /container-search
parent868a770f58ff5616489886091d944a04e698dda5 (diff)
Handle tensor types with cell type parameter
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/Index.java70
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchers/test/QueryValidatorTestCase.java18
2 files changed, 49 insertions, 39 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 42a8e05b8c0..8915c4b42f0 100644
--- a/container-search/src/main/java/com/yahoo/prelude/Index.java
+++ b/container-search/src/main/java/com/yahoo/prelude/Index.java
@@ -46,7 +46,7 @@ public class Index {
private final String name;
- private String type; // TODO: Parse top a type object; do not expose this as a string
+ private String type; // TODO: Parse to a type object; do not expose this as a string
private final List<String> aliases = new ArrayList<>();
@@ -142,61 +142,61 @@ public class Index {
}
/** Adds a type or untyped command string to this */
- public Index addCommand(String commandString) {
- allCommands.add(commandString);
+ public Index addCommand(String command) {
+ allCommands.add(command);
- if (commandString.startsWith("type tensor(")) { // TODO: Type info can replace numerical, predicate, multivalue
+ if (command.startsWith("type tensor(") || command.startsWith("type tensor<")) { // TODO: Type info can replace numerical, predicate, multivalue
setTensor(true);
- } else if ("fullurl".equals(commandString)) {
+ } else if ("fullurl".equals(command)) {
setUriIndex(true);
- } else if ("urlhost".equals(commandString)) {
+ } else if ("urlhost".equals(command)) {
setHostIndex(true);
- } else if (commandString.startsWith("stem ")) {
- setStemMode(commandString.substring(5));
- } else if (commandString.startsWith("stem:")) {
- setStemMode(commandString.substring(5));
- } else if ("stem".equals(commandString)) {
+ } else if (command.startsWith("stem ")) {
+ setStemMode(command.substring(5));
+ } else if (command.startsWith("stem:")) {
+ setStemMode(command.substring(5));
+ } else if ("stem".equals(command)) {
setStemMode(StemMode.SHORTEST);
- } else if ("word".equals(commandString)) {
+ } else if ("word".equals(command)) {
setExact(true, null);
- } else if ("exact".equals(commandString)) {
+ } else if ("exact".equals(command)) {
setExact(true, " ");
- } else if ("dynteaser".equals(commandString)) {
+ } else if ("dynteaser".equals(command)) {
setDynamicSummary(true);
- } else if ("highlight".equals(commandString)) {
+ } else if ("highlight".equals(command)) {
setHighlightSummary(true);
- } else if ("lowercase".equals(commandString)) {
+ } else if ("lowercase".equals(command)) {
setLowercase(true);
- } else if (commandString.startsWith("exact ")) {
- setExact(true, commandString.substring(6));
- } else if (commandString.startsWith("ngram ")) {
- setNGram(true, Integer.parseInt(commandString.substring(6)));
- } else if (commandString.equals("attribute")) {
+ } else if (command.startsWith("exact ")) {
+ setExact(true, command.substring(6));
+ } else if (command.startsWith("ngram ")) {
+ setNGram(true, Integer.parseInt(command.substring(6)));
+ } else if (command.equals("attribute")) {
setAttribute(true);
- } else if (commandString.equals("default-position")) {
+ } else if (command.equals("default-position")) {
setDefaultPosition(true);
- } else if (commandString.equals("plain-tokens")) {
+ } else if (command.equals("plain-tokens")) {
setPlainTokens(true);
- } else if (commandString.equals("multivalue")) {
+ } else if (command.equals("multivalue")) {
setMultivalue(true);
- } else if (commandString.equals("fast-search")) {
+ } else if (command.equals("fast-search")) {
setFastSearch(true);
- } else if (commandString.equals("normalize")) {
+ } else if (command.equals("normalize")) {
setNormalize(true);
- } else if (commandString.equals("literal-boost")) {
+ } else if (command.equals("literal-boost")) {
setLiteralBoost(true);
- } else if (commandString.equals("numerical")) {
+ } else if (command.equals("numerical")) {
setNumerical(true);
- } else if (commandString.equals("predicate")) {
+ } else if (command.equals("predicate")) {
setPredicate(true);
- } else if (commandString.startsWith("predicate-bounds ")) {
- setPredicateBounds(commandString.substring(17));
- } else if (commandString.equals("phrase-segmenting")) {
+ } else if (command.startsWith("predicate-bounds ")) {
+ setPredicateBounds(command.substring(17));
+ } else if (command.equals("phrase-segmenting")) {
setPhraseSegmenting(true);
- } else if (commandString.startsWith("phrase-segmenting ")) {
- setPhraseSegmenting(Boolean.parseBoolean(commandString.substring("phrase-segmenting ".length())));
+ } else if (command.startsWith("phrase-segmenting ")) {
+ setPhraseSegmenting(Boolean.parseBoolean(command.substring("phrase-segmenting ".length())));
} else {
- commands.add(commandString);
+ commands.add(command);
}
return this;
}
diff --git a/container-search/src/test/java/com/yahoo/search/searchers/test/QueryValidatorTestCase.java b/container-search/src/test/java/com/yahoo/search/searchers/test/QueryValidatorTestCase.java
index 8789de7198c..e93921af982 100644
--- a/container-search/src/test/java/com/yahoo/search/searchers/test/QueryValidatorTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/searchers/test/QueryValidatorTestCase.java
@@ -20,7 +20,8 @@ public class QueryValidatorTestCase {
@Test
public void testValidation() {
SearchDefinition sd = new SearchDefinition("test");
- sd.addCommand("mytensor", "type tensor(x[100]");
+ sd.addCommand("mytensor1", "type tensor(x[100]");
+ sd.addCommand("mytensor2", "type tensor<float>(x[100]");
sd.addCommand("mystring", "type string");
IndexModel model = new IndexModel(sd);
@@ -29,12 +30,21 @@ public class QueryValidatorTestCase {
new QueryValidator().search(new Query("?query=mystring:foo"), execution);
try {
- new QueryValidator().search(new Query("?query=sddocname%3Aproduct%20lfmModel25KeysV0%3A9%2A%20mytensor%3A%3E0"), execution);
- fail("Excpected validation error");
+ new QueryValidator().search(new Query("?query=sddocname%3Aproduct%20lfmModel25KeysV0%3A9%2A%20mytensor1%3A%3E0"), execution);
+ fail("Expected validation error");
}
catch (IllegalArgumentException e) {
// success
- assertEquals("Cannot search 'mytensor': It is a tensor field", e.getMessage());
+ assertEquals("Cannot search 'mytensor1': It is a tensor field", e.getMessage());
+ }
+
+ try {
+ new QueryValidator().search(new Query("?query=sddocname%3Aproduct%20lfmModel25KeysV0%3A9%2A%20mytensor2%3A%3E0"), execution);
+ fail("Expected validation error");
+ }
+ catch (IllegalArgumentException e) {
+ // success
+ assertEquals("Cannot search 'mytensor2': It is a tensor field", e.getMessage());
}
}