summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@vespa.ai>2024-02-23 12:01:22 +0100
committerJon Bratseth <bratseth@vespa.ai>2024-02-23 12:01:22 +0100
commit82276df2d886993d2a98e01254d616504f66a920 (patch)
tree61f71776b4ead6ffa4754bcff83cd495bb864300 /container-search
parent9956c1867a8d36a67e15a416d1b75bec8aa53ba3 (diff)
Verify we can replace
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/CJKSearcher.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java7
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/querytransform/test/CJKSearcherTestCase.java9
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java2
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());
}