summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java11
-rw-r--r--modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorBackwardsCompatibilityTests.java35
-rw-r--r--modules/percolator/src/test/resources/indices/percolator/bwc_index_2.0.0.zipbin11852 -> 27318 bytes
3 files changed, 29 insertions, 17 deletions
diff --git a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java
index 07677c25e1..e26c4ba9f9 100644
--- a/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java
+++ b/modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java
@@ -36,6 +36,7 @@ import org.apache.lucene.search.TermInSetQuery;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
+import org.elasticsearch.Version;
import org.elasticsearch.common.ParsingException;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.lucene.search.MatchNoDocsQuery;
@@ -284,7 +285,7 @@ public class PercolatorFieldMapper extends FieldMapper {
);
verifyQuery(queryBuilder);
// Fetching of terms, shapes and indexed scripts happen during this rewrite:
- queryBuilder = queryBuilder.rewrite(queryShardContext);
+ queryBuilder = QueryBuilder.rewriteQuery(queryBuilder, queryShardContext);
try (XContentBuilder builder = XContentFactory.contentBuilder(QUERY_BUILDER_CONTENT_TYPE)) {
queryBuilder.toXContent(builder, new MapParams(Collections.emptyMap()));
@@ -346,6 +347,14 @@ public class PercolatorFieldMapper extends FieldMapper {
// as an analyzed string.
context.setAllowUnmappedFields(false);
context.setMapUnmappedFieldAsString(mapUnmappedFieldsAsString);
+
+ // Rewriting the query at percolate time, because this is sometimes necessary:
+ // * From 5.0 and onwards the percolator rewrites the query at index time,
+ // this is not the case for percolator queries in indices created before 5.0
+ if (context.getIndexSettings().getIndexVersionCreated().before(Version.V_5_0_0_alpha1)) {
+ queryBuilder = QueryBuilder.rewriteQuery(queryBuilder, context);
+ }
+
return queryBuilder.toQuery(context);
}
diff --git a/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorBackwardsCompatibilityTests.java b/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorBackwardsCompatibilityTests.java
index 48459858ba..80f8cb1f4d 100644
--- a/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorBackwardsCompatibilityTests.java
+++ b/modules/percolator/src/test/java/org/elasticsearch/percolator/PercolatorBackwardsCompatibilityTests.java
@@ -21,7 +21,6 @@ package org.elasticsearch.percolator;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.TestUtil;
import org.elasticsearch.Version;
-import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.metadata.MappingMetaData;
@@ -44,7 +43,6 @@ import java.util.function.Function;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
-import static org.elasticsearch.index.query.QueryBuilders.scriptQuery;
import static org.elasticsearch.percolator.PercolatorTestUtil.preparePercolate;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.notNullValue;
@@ -72,7 +70,7 @@ public class PercolatorBackwardsCompatibilityTests extends ESIntegTestCase {
// verify cluster state:
ClusterState state = client().admin().cluster().prepareState().get().getState();
- assertThat(state.metaData().indices().size(), equalTo(1));
+ assertThat(state.metaData().indices().size(), equalTo(2));
assertThat(state.metaData().indices().get(INDEX_NAME), notNullValue());
assertThat(state.metaData().indices().get(INDEX_NAME).getCreationVersion(), equalTo(Version.V_2_0_0));
assertThat(state.metaData().indices().get(INDEX_NAME).getUpgradedVersion(), equalTo(Version.CURRENT));
@@ -88,17 +86,18 @@ public class PercolatorBackwardsCompatibilityTests extends ESIntegTestCase {
.setTypes(".percolator")
.addSort("_uid", SortOrder.ASC)
.get();
- assertThat(searchResponse.getHits().getTotalHits(), equalTo(4L));
- assertThat(searchResponse.getHits().getAt(0).id(), equalTo("1"));
- assertThat(searchResponse.getHits().getAt(1).id(), equalTo("2"));
- assertThat(searchResponse.getHits().getAt(2).id(), equalTo("3"));
- assertThat(searchResponse.getHits().getAt(3).id(), equalTo("4"));
+ assertThat(searchResponse.getHits().getTotalHits(), equalTo(5L));
+ assertThat(searchResponse.getHits().getAt(0).id(), equalTo("0"));
+ assertThat(searchResponse.getHits().getAt(1).id(), equalTo("1"));
+ assertThat(searchResponse.getHits().getAt(2).id(), equalTo("2"));
+ assertThat(searchResponse.getHits().getAt(3).id(), equalTo("3"));
+ assertThat(searchResponse.getHits().getAt(4).id(), equalTo("4"));
assertThat(XContentMapValues.extractValue("query.script.script.inline",
- searchResponse.getHits().getAt(3).sourceAsMap()), equalTo("return true"));
+ searchResponse.getHits().getAt(4).sourceAsMap()), equalTo("return true"));
// we don't upgrade the script definitions so that they include explicitly the lang,
// because we read / parse the query at search time.
assertThat(XContentMapValues.extractValue("query.script.script.lang",
- searchResponse.getHits().getAt(3).sourceAsMap()), nullValue());
+ searchResponse.getHits().getAt(4).sourceAsMap()), nullValue());
// verify percolate response
PercolateResponse percolateResponse = preparePercolate(client())
@@ -107,9 +106,10 @@ public class PercolatorBackwardsCompatibilityTests extends ESIntegTestCase {
.setPercolateDoc(new PercolateSourceBuilder.DocBuilder().setDoc("{}"))
.get();
- assertThat(percolateResponse.getCount(), equalTo(1L));
- assertThat(percolateResponse.getMatches().length, equalTo(1));
+ assertThat(percolateResponse.getCount(), equalTo(2L));
+ assertThat(percolateResponse.getMatches().length, equalTo(2));
assertThat(percolateResponse.getMatches()[0].getId().string(), equalTo("4"));
+ assertThat(percolateResponse.getMatches()[1].getId().string(), equalTo("0"));
percolateResponse = preparePercolate(client())
.setIndices(INDEX_NAME)
@@ -117,11 +117,12 @@ public class PercolatorBackwardsCompatibilityTests extends ESIntegTestCase {
.setPercolateDoc(new PercolateSourceBuilder.DocBuilder().setDoc("message", "the quick brown fox jumps over the lazy dog"))
.get();
- assertThat(percolateResponse.getCount(), equalTo(3L));
- assertThat(percolateResponse.getMatches().length, equalTo(3));
+ assertThat(percolateResponse.getCount(), equalTo(4L));
+ assertThat(percolateResponse.getMatches().length, equalTo(4));
assertThat(percolateResponse.getMatches()[0].getId().string(), equalTo("1"));
assertThat(percolateResponse.getMatches()[1].getId().string(), equalTo("2"));
assertThat(percolateResponse.getMatches()[2].getId().string(), equalTo("4"));
+ assertThat(percolateResponse.getMatches()[3].getId().string(), equalTo("0"));
// add an extra query and verify the results
client().prepareIndex(INDEX_NAME, ".percolator", "5")
@@ -135,11 +136,13 @@ public class PercolatorBackwardsCompatibilityTests extends ESIntegTestCase {
.setPercolateDoc(new PercolateSourceBuilder.DocBuilder().setDoc("message", "the quick brown fox jumps over the lazy dog"))
.get();
- assertThat(percolateResponse.getCount(), equalTo(4L));
- assertThat(percolateResponse.getMatches().length, equalTo(4));
+ assertThat(percolateResponse.getCount(), equalTo(5L));
+ assertThat(percolateResponse.getMatches().length, equalTo(5));
assertThat(percolateResponse.getMatches()[0].getId().string(), equalTo("1"));
assertThat(percolateResponse.getMatches()[1].getId().string(), equalTo("2"));
assertThat(percolateResponse.getMatches()[2].getId().string(), equalTo("4"));
+ assertThat(percolateResponse.getMatches()[3].getId().string(), equalTo("0"));
+ assertThat(percolateResponse.getMatches()[4].getId().string(), equalTo("5"));
}
private void setupNode() throws Exception {
diff --git a/modules/percolator/src/test/resources/indices/percolator/bwc_index_2.0.0.zip b/modules/percolator/src/test/resources/indices/percolator/bwc_index_2.0.0.zip
index 43a8cceb19..777597abc4 100644
--- a/modules/percolator/src/test/resources/indices/percolator/bwc_index_2.0.0.zip
+++ b/modules/percolator/src/test/resources/indices/percolator/bwc_index_2.0.0.zip
Binary files differ