diff options
author | Jon Bratseth <bratseth@vespa.ai> | 2024-02-23 12:01:22 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@vespa.ai> | 2024-02-23 12:01:22 +0100 |
commit | 82276df2d886993d2a98e01254d616504f66a920 (patch) | |
tree | 61f71776b4ead6ffa4754bcff83cd495bb864300 /container-search | |
parent | 9956c1867a8d36a67e15a416d1b75bec8aa53ba3 (diff) |
Verify we can replace
Diffstat (limited to 'container-search')
4 files changed, 14 insertions, 6 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/CJKSearcher.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/CJKSearcher.java index 4f4573a1e5a..878ba230274 100644 --- a/container-search/src/main/java/com/yahoo/prelude/querytransform/CJKSearcher.java +++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/CJKSearcher.java @@ -79,7 +79,7 @@ public class CJKSearcher extends Searcher { for (ListIterator<Item> i = ((CompositeItem) root).getItemIterator(); i.hasNext();) { Item item = i.next(); Item transformedItem = transform(item); - if (item != transformedItem) + if (item != transformedItem && ((CompositeItem) root).acceptsItemsOfType(transformedItem.getItemType())) i.set(transformedItem); } return root; diff --git a/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java b/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java index 0116d668d48..2d4ac86e3b2 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java +++ b/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java @@ -75,14 +75,15 @@ public class MinimalQueryInserter extends Searcher { @Override public Result search(Query query, Execution execution) { + if (query.properties().get(YQL) == null) return execution.search(query); + Result errorResult; try { - if (query.properties().get(YQL) == null) return execution.search(query); - Result result = insertQuery(query, ParserEnvironment.fromExecutionContext(execution.context())); - return (result == null) ? execution.search(query) : result; + errorResult = insertQuery(query, ParserEnvironment.fromExecutionContext(execution.context())); } catch (IllegalArgumentException e) { throw new IllegalInputException("Illegal YQL query", e); } + return (errorResult == null) ? execution.search(query) : errorResult; } private static Result insertQuery(Query query, ParserEnvironment env) { diff --git a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/CJKSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/CJKSearcherTestCase.java index 7a287f8dcc9..22ba8754572 100644 --- a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/CJKSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/CJKSearcherTestCase.java @@ -18,6 +18,8 @@ import com.yahoo.search.query.parser.ParserEnvironment; import com.yahoo.search.query.parser.ParserFactory; import com.yahoo.search.searchchain.Execution; +import com.yahoo.search.test.QueryTestCase; +import com.yahoo.search.yql.MinimalQueryInserter; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -53,6 +55,13 @@ public class CJKSearcherTestCase { TestLinguistics.INSTANCE); } + @Test + public void testEquivAndChinese() { + Query query = new Query(QueryTestCase.httpEncode("search?yql=select * from music-only where default contains equiv('a', 'b c') or default contains '东'")); + new Execution(new Chain<>(new MinimalQueryInserter(), new CJKSearcher()), Execution.Context.createContextStub()).search(query); + assertEquals("OR (EQUIV default:a default:'b c') default:东", query.getModel().getQueryTree().toString()); + } + private void assertTransformed(String queryString, String expected, Query.Type mode, Language actualLanguage, Language queryLanguage, Linguistics linguistics) { Parser parser = ParserFactory.newInstance(mode, new ParserEnvironment() diff --git a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java index 75e9525f09b..29a651aabf4 100644 --- a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java @@ -1116,9 +1116,7 @@ public class YqlParserTestCase { void testBackslash() { { String queryString = "select * from testtype where title contains \"\\\\\""; // Java escaping * YQL escaping - QueryTree query = parse(queryString); - assertEquals("title:\\", query.toString()); } |