diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-12-03 10:22:26 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-12-03 10:22:26 +0100 |
commit | f0ef833df79cd84148d21679f3b5660bbe15cc60 (patch) | |
tree | 6a11a3317eec125128e34ee09688569ec44625c8 /container-search | |
parent | 868a770f58ff5616489886091d944a04e698dda5 (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.java | 70 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/search/searchers/test/QueryValidatorTestCase.java | 18 |
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()); } } |