summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-05-28 17:42:04 +0200
committerJon Bratseth <bratseth@oath.com>2018-05-28 17:42:04 +0200
commit94d36333ef57d35e559c3ec0892113bd64c55e52 (patch)
treeae23cdfd55bd5d4e6e414851df46b4c6661f9a46 /container-search
parent3ce5f5be747a04d41820de13eb60350346c8ad51 (diff)
Parse before clone
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java1
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/Query.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java1
-rw-r--r--container-search/src/main/java/com/yahoo/search/federation/vespa/VespaSearcher.java1
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/rewrite/QueryRewriteSearcher.java1
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/model/VespaSearchers.java2
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/querytransform/test/IndexCombinatorTestCase.java17
8 files changed, 5 insertions, 25 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
index 91fbd1b2aca..b1399c6cc8d 100644
--- a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
@@ -469,6 +469,7 @@ public class ClusterSearcher extends Searcher {
}
private List<Query> createQueries(Query query, Set<String> docTypes) {
+ query.getModel().getQueryTree(); // performance: parse query before cloning such that it is only done once
List<Query> retval = new ArrayList<>(docTypes.size());
if (docTypes.size() == 1) {
query.getModel().setRestrict(docTypes.iterator().next());
diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java
index 238265df2cc..96e9fb30c24 100644
--- a/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/IndexCombinatorSearcher.java
@@ -65,9 +65,7 @@ public class IndexCombinatorSearcher extends Searcher {
@Override
public Result search(Query query, Execution execution) {
- // TODO
Item root = query.getModel().getQueryTree().getRoot();
- if (1==1) return execution.search(query);
IndexFacts.Session session = execution.context().getIndexFacts().newSession(query);
String oldQuery = (query.getTraceLevel() >= 2) ? root.toString() : "";
diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java
index f13fb2e88f4..ab6976e29d9 100644
--- a/container-search/src/main/java/com/yahoo/search/Query.java
+++ b/container-search/src/main/java/com/yahoo/search/Query.java
@@ -351,10 +351,7 @@ public class Query extends com.yahoo.processing.Request implements Cloneable {
}
/**
- * Creates a new query from another query, but with time sensitive
- * fields reset.
- *
- * @return new query
+ * Creates a new query from another query, but with time sensitive fields reset.
*/
public static Query createNewQuery(Query query) {
return new Query(query, System.currentTimeMillis());
diff --git a/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java b/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
index 686c019688e..b32eec876cc 100644
--- a/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
@@ -261,6 +261,7 @@ public class FederationSearcher extends ForkingSearcher {
}
private Query cloneFederationQuery(Query query, Window window, long timeout, Target target) {
+ query.getModel().getQueryTree(); // performance: parse query before cloning such that it is only done once
Query clonedQuery = Query.createNewQuery(query);
return createFederationQuery(query, clonedQuery, window, timeout, target);
}
diff --git a/container-search/src/main/java/com/yahoo/search/federation/vespa/VespaSearcher.java b/container-search/src/main/java/com/yahoo/search/federation/vespa/VespaSearcher.java
index 727b24a39f7..dfa4f9ad9bb 100644
--- a/container-search/src/main/java/com/yahoo/search/federation/vespa/VespaSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/federation/vespa/VespaSearcher.java
@@ -158,6 +158,7 @@ public class VespaSearcher extends ConfiguredHTTPProviderSearcher {
return marshalQuery(query.getModel().getQueryTree());
}
+ query.getModel().getQueryTree(); // performance: parse query before cloning such that it is only done once
Query workQuery = query.clone();
String error = QueryCanonicalizer.canonicalize(workQuery);
if (error != null) {
diff --git a/container-search/src/main/java/com/yahoo/search/query/rewrite/QueryRewriteSearcher.java b/container-search/src/main/java/com/yahoo/search/query/rewrite/QueryRewriteSearcher.java
index e10c67e5ff5..2d0ff0c62db 100644
--- a/container-search/src/main/java/com/yahoo/search/query/rewrite/QueryRewriteSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/query/rewrite/QueryRewriteSearcher.java
@@ -295,6 +295,7 @@ public abstract class QueryRewriteSearcher extends Searcher {
// Store rewriter result
HashMap<String, Object> rewriterResult = null;
+ query.getModel().getQueryTree(); // performance: parse query before cloning such that it is only done once
Query originalQueryObj = query.clone();
try {
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/model/VespaSearchers.java b/container-search/src/main/java/com/yahoo/search/searchchain/model/VespaSearchers.java
index fe3d48ccded..cfef91ee0ec 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/model/VespaSearchers.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/model/VespaSearchers.java
@@ -23,8 +23,6 @@ import java.util.*;
public class VespaSearchers {
public static final Collection<ChainedComponentModel> vespaSearcherModels =
toSearcherModels(
- com.yahoo.prelude.querytransform.IndexCombinatorSearcher.class,
- //com.yahoo.prelude.querytransform.LocalitySearcher.class,
com.yahoo.prelude.querytransform.PhrasingSearcher.class,
com.yahoo.prelude.searcher.FieldCollapsingSearcher.class,
com.yahoo.search.yql.MinimalQueryInserter.class,
diff --git a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/IndexCombinatorTestCase.java b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/IndexCombinatorTestCase.java
index b7c2a6378ce..7858bbf6433 100644
--- a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/IndexCombinatorTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/IndexCombinatorTestCase.java
@@ -29,7 +29,6 @@ public class IndexCombinatorTestCase {
private Searcher transformer;
private IndexFacts f;
- @Ignore
@Before
public void setUp() throws Exception {
transformer = new IndexCombinatorSearcher();
@@ -40,7 +39,6 @@ public class IndexCombinatorTestCase {
f.addIndex("one", i);
}
- @Ignore
@Test
public void testDoNothing() {
Result r = search("?query=z:y");
@@ -51,14 +49,12 @@ public class IndexCombinatorTestCase {
return new Execution(transformer, Execution.Context.createContextStub(f)).search(new Query(QueryTestCase.httpEncode(query)));
}
- @Ignore
@Test
public void testBasic() {
Result r = search("?query=y");
assertEquals("OR a:y i:y", r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicPair() {
Result r = search("?query=x y");
@@ -67,14 +63,12 @@ public class IndexCombinatorTestCase {
.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicTriplet() {
Result r = search("?query=x y z");
assertEquals("AND (OR a:x i:x) (OR a:y i:y) (OR a:z i:z)", r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicMixedSinglet() {
Result r = search("?query=x z:q");
@@ -82,7 +76,6 @@ public class IndexCombinatorTestCase {
.toString());
}
- @Ignore
@Test
public void testBasicMixedPair() {
Result r = search("?query=x y z:q");
@@ -91,7 +84,6 @@ public class IndexCombinatorTestCase {
r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicMixedTriplet() {
Result r = search("?query=x y z:q r");
@@ -99,21 +91,18 @@ public class IndexCombinatorTestCase {
.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicOr() {
Result r = search("?query=x y&type=any");
assertEquals("OR a:y i:y a:x i:x", r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicPhrase() {
Result r = search("?query=\"x y\"");
assertEquals("OR a:x y i:x y", r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testPhraseAndTerm() {
Result r = search("?query=\"x y\" z");
@@ -122,7 +111,6 @@ public class IndexCombinatorTestCase {
r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testBasicNot() {
Result r = search("?query=+x -y");
@@ -130,7 +118,6 @@ public class IndexCombinatorTestCase {
.toString());
}
- @Ignore
@Test
public void testLessBasicNot() {
Result r = search("?query=a and b andnot c&type=adv");
@@ -139,7 +126,6 @@ public class IndexCombinatorTestCase {
r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testLongerAndInPositive() {
Result r = search("?query=a and b and c andnot d&type=adv");
@@ -148,7 +134,6 @@ public class IndexCombinatorTestCase {
.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testTreeInNegativeBranch() {
Result r = search("?query=a andnot (b and c)&type=adv");
@@ -156,7 +141,6 @@ public class IndexCombinatorTestCase {
.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testSomeTerms() {
Result r = search("?query=a b -c +d g.h \"abc def\" z:q");
@@ -165,7 +149,6 @@ public class IndexCombinatorTestCase {
r.getQuery().getModel().getQueryTree().getRoot().toString());
}
- @Ignore
@Test
public void testMixedIndicesAndAttributes() {
String indexInfoConfigID = "file:src/test/java/com/yahoo/prelude/querytransform/test/indexcombinator.cfg";