diff options
Diffstat (limited to 'core/src/test/java/org')
16 files changed, 258 insertions, 893 deletions
diff --git a/core/src/test/java/org/elasticsearch/index/fieldstats/FieldStatsProviderTests.java b/core/src/test/java/org/elasticsearch/index/fieldstats/FieldStatsProviderTests.java deleted file mode 100644 index 9cad8d3fc8..0000000000 --- a/core/src/test/java/org/elasticsearch/index/fieldstats/FieldStatsProviderTests.java +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.index.fieldstats; - -import org.apache.lucene.index.DirectoryReader; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.search.IndexSearcher; -import org.apache.lucene.store.BaseDirectoryWrapper; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.common.compress.CompressedXContent; -import org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.common.xcontent.json.JsonXContent; -import org.elasticsearch.env.Environment; -import org.elasticsearch.index.IndexSettings; -import org.elasticsearch.index.analysis.AnalysisRegistry; -import org.elasticsearch.index.analysis.AnalysisService; -import org.elasticsearch.index.engine.Engine; -import org.elasticsearch.index.engine.Engine.Searcher; -import org.elasticsearch.index.fieldstats.FieldStatsProvider.Relation; -import org.elasticsearch.index.mapper.DocumentMapper; -import org.elasticsearch.index.mapper.MapperService; -import org.elasticsearch.index.mapper.MapperService.MergeReason; -import org.elasticsearch.index.mapper.ParsedDocument; -import org.elasticsearch.index.shard.ShardId; -import org.elasticsearch.index.similarity.SimilarityService; -import org.elasticsearch.indices.IndicesModule; -import org.elasticsearch.indices.mapper.MapperRegistry; -import org.elasticsearch.test.ESTestCase; -import org.elasticsearch.test.IndexSettingsModule; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.chrono.ISOChronology; -import org.junit.After; -import org.junit.Before; - -import java.io.IOException; -import java.util.Collections; - -import static org.elasticsearch.common.settings.Settings.settingsBuilder; -import static org.hamcrest.Matchers.equalTo; - -public class FieldStatsProviderTests extends ESTestCase { - - private DirectoryReader directoryReader; - private Searcher searcher; - private FieldStatsProvider fieldStatsProvider; - private BaseDirectoryWrapper dir; - private AnalysisRegistry analysisRegistry; - - @Before - public void setup() throws IOException { - Settings nodeSettings = settingsBuilder().put(Environment.PATH_HOME_SETTING.getKey(), createTempDir()).build(); - IndexSettings settings = IndexSettingsModule.newIndexSettings("_na", nodeSettings); - SimilarityService similarityService = new SimilarityService(settings, Collections.emptyMap()); - analysisRegistry = new AnalysisRegistry(null, new Environment(nodeSettings)); - AnalysisService analysisService = analysisRegistry.build(settings); - IndicesModule indicesModule = new IndicesModule(); - MapperRegistry mapperRegistry = indicesModule.getMapperRegistry(); - MapperService service = new MapperService(settings, analysisService, similarityService, mapperRegistry, () -> null); - putMapping(service); - dir = newDirectory(); - IndexWriter w = new IndexWriter(dir, newIndexWriterConfig()); - indexDocument(service, w, "1", 50L, 50.2f, 50.2, "cherry", new DateTime(2014, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()), - "10.10.0.10"); - indexDocument(service, w, "2", 60L, 60.1f, 60.1, "damson", new DateTime(2014, 2, 1, 0, 0, 0, ISOChronology.getInstanceUTC()), - "10.10.0.20"); - indexDocument(service, w, "3", 70L, 70.6f, 70.6, "grape", new DateTime(2014, 3, 1, 0, 0, 0, ISOChronology.getInstanceUTC()), - "10.10.0.30"); - indexDocument(service, w, "4", 80L, 80.2f, 80.2, "kiwi", new DateTime(2014, 4, 1, 0, 0, 0, ISOChronology.getInstanceUTC()), - "10.10.0.40"); - indexDocument(service, w, "5", 90L, 90.4f, 90.4, "lemon", new DateTime(2014, 5, 1, 0, 0, 0, ISOChronology.getInstanceUTC()), - "10.10.0.50"); - indexDocument(service, w, "6", 100L, 100.3f, 100.3, "orange", new DateTime(2014, 6, 1, 0, 0, 0, ISOChronology.getInstanceUTC()), - "10.10.0.60"); - directoryReader = DirectoryReader.open(w, true, true); - w.close(); - ShardId shard = new ShardId("index", "_na_", 0); - directoryReader = ElasticsearchDirectoryReader.wrap(directoryReader, shard); - IndexSearcher s = new IndexSearcher(directoryReader); - searcher = new Engine.Searcher("test", s); - fieldStatsProvider = new FieldStatsProvider(searcher, service); - } - - @After - public void teardown() throws IOException { - searcher.close(); - directoryReader.close(); - dir.close(); - analysisRegistry.close(); - } - - public void testiIsFieldWithinQueryLong() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 10L, 200L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 10L, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", null, 200L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 10L, 100L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 50L, 200L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 30L, 80L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 80L, 200L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 60L, 80L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 10L, 100L, true, false, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 50L, 200L, false, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 100L, 200L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 1L, 50L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 150L, 200L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 1L, 8L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", null, 8L, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 150L, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 100L, 200L, false, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 1L, 50L, true, false, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - } - - public void testiIsFieldWithinQueryFloat() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 10.8f, 200.5f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 10.8f, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", null, 200.5f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 10.8f, 100.3f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 50.2f, 200.5f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 30.5f, 80.1f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 80.1f, 200.5f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 10.8f, 100.3f, true, false, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 50.2f, 200.5f, false, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 100.3f, 200.5f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 1.9f, 50.2f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 60.9f, 80.1f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 150.4f, 200.5f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 1.9f, 8.1f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", null, 8.1f, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 150.4f, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 100.3f, 200.5f, false, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("float_field", 1.9f, 50.2f, true, false, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - } - - public void testiIsFieldWithinQueryDouble() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 10.8, 200.5, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 10.8, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", null, 200.5, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 10.8, 100.3, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 50.2, 200.5, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 30.5, 80.1, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 80.1, 200.5, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 60.9, 80.1, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 10.8, 100.3, true, false, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 50.2, 200.5, false, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 100.3, 200.5, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 1.9, 50.2, true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 150.4, 200.5, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 1.9, 8.1, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", null, 8.1, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("double_field", 150.4, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 100.3, 200.5, false, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("long_field", 1.9, 50.2, true, false, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - } - - public void testiIsFieldWithinQueryText() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("banana"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("banana"), null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", null, new BytesRef("zebra"), true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("banana"), new BytesRef("orange"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("cherry"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("banana"), new BytesRef("grape"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("grape"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("lime"), new BytesRef("mango"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("banana"), new BytesRef("orange"), true, false, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("cherry"), new BytesRef("zebra"), false, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("orange"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("apple"), new BytesRef("cherry"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("peach"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("apple"), new BytesRef("banana"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", null, new BytesRef("banana"), true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("peach"), null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("orange"), new BytesRef("zebra"), false, true, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("text_field", new BytesRef("apple"), new BytesRef("cherry"), true, false, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - } - - public void testiIsFieldWithinQueryKeyword() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("banana"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("banana"), null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", null, new BytesRef("zebra"), true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("banana"), new BytesRef("orange"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("cherry"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("banana"), new BytesRef("grape"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("grape"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("lime"), new BytesRef("mango"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("banana"), new BytesRef("orange"), true, false, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("cherry"), new BytesRef("zebra"), false, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("orange"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("apple"), new BytesRef("cherry"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("peach"), new BytesRef("zebra"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("apple"), new BytesRef("banana"), true, true, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", null, new BytesRef("banana"), true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("peach"), null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("orange"), new BytesRef("zebra"), false, true, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("keyword_field", new BytesRef("apple"), new BytesRef("cherry"), true, false, - DateTimeZone.UTC, null), equalTo(Relation.DISJOINT)); - } - - public void testiIsFieldWithinQueryDate() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "now", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", null, "now", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "2014-06-01", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2014-01-01", "now", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "2014-03-01", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2014-03-01", "now", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2014-03-01", "2014-05-01", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "2014-06-01", true, false, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2014-01-01", "now", false, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2014-06-01", "now", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "2014-01-01", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2015-01-01", "now", true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "2013-09-01", true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", null, "2013-09-01", true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2015-01-01", null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2014-06-01", "now", false, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("date_field", "2013-01-01", "2014-01-01", true, false, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - } - - public void testiIsFieldWithinQueryIp() throws IOException { - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.1", "10.20.0.1", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.1", null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", null, "10.20.0.1", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", null, null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.1", "10.10.0.60", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.10", "10.20.0.1", true, true, DateTimeZone.UTC, null), - equalTo(Relation.WITHIN)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.1", "10.10.0.40", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.40", "10.20.0.1", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.30", "10.10.0.40", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.1", "10.10.0.60", true, false, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.10", "10.20.0.1", false, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.60", "10.20.0.1", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.0.0.1", "10.10.0.10", true, true, DateTimeZone.UTC, null), - equalTo(Relation.INTERSECTS)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.20.0.10", "10.20.0.1", true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.0.0.1", "10.0.0.100", true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", null, "10.0.0.100", true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.20.0.10", null, true, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.10.0.60", "10.20.0.1", false, true, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - assertThat(fieldStatsProvider.isFieldWithinQuery("ip_field", "10.0.0.1", "10.10.0.10", true, false, DateTimeZone.UTC, null), - equalTo(Relation.DISJOINT)); - } - - private void putMapping(MapperService service) throws IOException { - XContentBuilder mappingbuilder = JsonXContent.contentBuilder(); - mappingbuilder.startObject(); - mappingbuilder.startObject("type"); - mappingbuilder.startObject("properties"); - mappingbuilder.startObject("long_field"); - mappingbuilder.field("type", "long"); - mappingbuilder.endObject(); - mappingbuilder.startObject("float_field"); - mappingbuilder.field("type", "float"); - mappingbuilder.endObject(); - mappingbuilder.startObject("double_field"); - mappingbuilder.field("type", "double"); - mappingbuilder.endObject(); - mappingbuilder.startObject("text_field"); - mappingbuilder.field("type", "text"); - mappingbuilder.endObject(); - mappingbuilder.startObject("keyword_field"); - mappingbuilder.field("type", "keyword"); - mappingbuilder.endObject(); - mappingbuilder.startObject("date_field"); - mappingbuilder.field("type", "date"); - mappingbuilder.endObject(); - mappingbuilder.startObject("ip_field"); - mappingbuilder.field("type", "ip"); - mappingbuilder.endObject(); - mappingbuilder.endObject(); - mappingbuilder.endObject(); - mappingbuilder.endObject(); - service.merge("type", new CompressedXContent(mappingbuilder.bytes()), MergeReason.MAPPING_UPDATE, true); - } - - private void indexDocument(MapperService service, IndexWriter writer, String id, long longValue, float floatValue, double doubleValue, - String stringValue, DateTime dateValue, String ipValue) throws IOException { - XContentBuilder docBuilder = JsonXContent.contentBuilder(); - docBuilder.startObject(); - docBuilder.field("long_field", longValue); - docBuilder.field("float_field", floatValue); - docBuilder.field("double_field", doubleValue); - docBuilder.field("text_field", stringValue); - docBuilder.field("keyword_field", stringValue); - docBuilder.field("date_field", dateValue); - docBuilder.field("ip_field", ipValue); - docBuilder.endObject(); - DocumentMapper documentMapper = service.documentMapper("type"); - ParsedDocument doc = documentMapper.parse("index", "type", id, docBuilder.bytes()); - writer.addDocument(doc.rootDoc()); - } -} diff --git a/core/src/test/java/org/elasticsearch/index/mapper/core/DateFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/core/DateFieldTypeTests.java index 0e009891cf..089533023d 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/core/DateFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/core/DateFieldTypeTests.java @@ -18,11 +18,27 @@ */ package org.elasticsearch.index.mapper.core; +import org.apache.lucene.document.Field.Store; +import org.apache.lucene.document.LegacyLongField; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.MultiReader; +import org.apache.lucene.store.Directory; +import org.apache.lucene.util.IOUtils; +import org.elasticsearch.common.joda.DateMathParser; +import org.elasticsearch.common.joda.FormatDateTimeFormatter; import org.elasticsearch.common.joda.Joda; import org.elasticsearch.index.mapper.FieldTypeTestCase; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.ParseContext.Document; +import org.elasticsearch.index.mapper.core.DateFieldMapper.DateFieldType; +import org.joda.time.DateTimeZone; import org.junit.Before; +import java.io.IOException; import java.util.Locale; import java.util.concurrent.TimeUnit; @@ -54,4 +70,58 @@ public class DateFieldTypeTests extends FieldTypeTestCase { } }); } + + public void testIsFieldWithinQueryEmptyReader() throws IOException { + IndexReader reader = new MultiReader(); + DateFieldType ft = new DateFieldType(); + ft.setName("my_date"); + assertEquals(Relation.DISJOINT, ft.isFieldWithinQuery(reader, "2015-10-12", "2016-04-03", + randomBoolean(), randomBoolean(), null, null)); + } + + private void doTestIsFieldWithinQuery(DateFieldType ft, DirectoryReader reader, + DateTimeZone zone, DateMathParser alternateFormat) throws IOException { + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(reader, "2015-10-09", "2016-01-02", + randomBoolean(), randomBoolean(), null, null)); + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(reader, "2016-01-02", "2016-06-20", + randomBoolean(), randomBoolean(), null, null)); + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(reader, "2016-01-02", "2016-02-12", + randomBoolean(), randomBoolean(), null, null)); + assertEquals(Relation.DISJOINT, ft.isFieldWithinQuery(reader, "2014-01-02", "2015-02-12", + randomBoolean(), randomBoolean(), null, null)); + assertEquals(Relation.DISJOINT, ft.isFieldWithinQuery(reader, "2016-05-11", "2016-08-30", + randomBoolean(), randomBoolean(), null, null)); + assertEquals(Relation.WITHIN, ft.isFieldWithinQuery(reader, "2015-09-25", "2016-05-29", + randomBoolean(), randomBoolean(), null, null)); + assertEquals(Relation.WITHIN, ft.isFieldWithinQuery(reader, "2015-10-12", "2016-04-03", + true, true, null, null)); + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(reader, "2015-10-12", "2016-04-03", + false, false, null, null)); + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(reader, "2015-10-12", "2016-04-03", + false, true, null, null)); + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(reader, "2015-10-12", "2016-04-03", + true, false, null, null)); + } + + public void testIsFieldWithinQuery() throws IOException { + Directory dir = newDirectory(); + IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(null)); + long instant1 = DateFieldMapper.Defaults.DATE_TIME_FORMATTER.parser().parseDateTime("2015-10-12").getMillis(); + long instant2 = DateFieldMapper.Defaults.DATE_TIME_FORMATTER.parser().parseDateTime("2016-04-03").getMillis(); + Document doc = new Document(); + LegacyLongField field = new LegacyLongField("my_date", instant1, Store.NO); + doc.add(field); + w.addDocument(doc); + field.setLongValue(instant2); + w.addDocument(doc); + DirectoryReader reader = DirectoryReader.open(w); + DateFieldType ft = new DateFieldType(); + ft.setName("my_date"); + DateMathParser alternateFormat = new DateMathParser(DateFieldMapper.Defaults.DATE_TIME_FORMATTER); + doTestIsFieldWithinQuery(ft, reader, null, null); + doTestIsFieldWithinQuery(ft, reader, null, alternateFormat); + doTestIsFieldWithinQuery(ft, reader, DateTimeZone.UTC, null); + doTestIsFieldWithinQuery(ft, reader, DateTimeZone.UTC, alternateFormat); + IOUtils.close(reader, w, dir); + } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/core/DoubleFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/core/DoubleFieldTypeTests.java index 5f34e746ec..1c8cd4fda3 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/core/DoubleFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/core/DoubleFieldTypeTests.java @@ -20,8 +20,12 @@ package org.elasticsearch.index.mapper.core; import org.elasticsearch.index.mapper.FieldTypeTestCase; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.core.DoubleFieldMapper.DoubleFieldType; import org.junit.Before; +import java.io.IOException; + public class DoubleFieldTypeTests extends FieldTypeTestCase { @Override protected MappedFieldType createDefaultFieldType() { @@ -32,4 +36,11 @@ public class DoubleFieldTypeTests extends FieldTypeTestCase { public void setupProperties() { setDummyNullValue(10.0D); } + + public void testIsFieldWithinQuery() throws IOException { + DoubleFieldType ft = new DoubleFieldType(); + // current impl ignores args and shourd always return INTERSECTS + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(null, randomDouble(), randomDouble(), + randomBoolean(), randomBoolean(), null, null)); + } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/core/FloatFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/core/FloatFieldTypeTests.java index 73d593ac2f..b9c222bc40 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/core/FloatFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/core/FloatFieldTypeTests.java @@ -20,8 +20,12 @@ package org.elasticsearch.index.mapper.core; import org.elasticsearch.index.mapper.FieldTypeTestCase; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.core.FloatFieldMapper.FloatFieldType; import org.junit.Before; +import java.io.IOException; + public class FloatFieldTypeTests extends FieldTypeTestCase { @Override protected MappedFieldType createDefaultFieldType() { @@ -32,4 +36,11 @@ public class FloatFieldTypeTests extends FieldTypeTestCase { public void setupProperties() { setDummyNullValue(10.0); } + + public void testIsFieldWithinQuery() throws IOException { + FloatFieldType ft = new FloatFieldType(); + // current impl ignores args and shourd always return INTERSECTS + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(null, randomFloat(), randomFloat(), + randomBoolean(), randomBoolean(), null, null)); + } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/core/IntegerFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/core/IntegerFieldTypeTests.java index b8c40af72c..47f8344513 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/core/IntegerFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/core/IntegerFieldTypeTests.java @@ -20,8 +20,12 @@ package org.elasticsearch.index.mapper.core; import org.elasticsearch.index.mapper.FieldTypeTestCase; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.core.IntegerFieldMapper.IntegerFieldType; import org.junit.Before; +import java.io.IOException; + public class IntegerFieldTypeTests extends FieldTypeTestCase { @Override protected MappedFieldType createDefaultFieldType() { @@ -32,4 +36,11 @@ public class IntegerFieldTypeTests extends FieldTypeTestCase { public void setupProperties() { setDummyNullValue(10); } + + public void testIsFieldWithinQuery() throws IOException { + IntegerFieldType ft = new IntegerFieldType(); + // current impl ignores args and shourd always return INTERSECTS + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(null, randomInt(), randomInt(), + randomBoolean(), randomBoolean(), null, null)); + } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/core/KeywordFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/core/KeywordFieldTypeTests.java index 699717b589..0d8ab6b804 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/core/KeywordFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/core/KeywordFieldTypeTests.java @@ -18,12 +18,27 @@ */ package org.elasticsearch.index.mapper.core; +import com.carrotsearch.randomizedtesting.generators.RandomStrings; + import org.elasticsearch.index.mapper.FieldTypeTestCase; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.core.KeywordFieldMapper.KeywordFieldType; + +import java.io.IOException; public class KeywordFieldTypeTests extends FieldTypeTestCase { @Override protected MappedFieldType createDefaultFieldType() { return new KeywordFieldMapper.KeywordFieldType(); } + + public void testIsFieldWithinQuery() throws IOException { + KeywordFieldType ft = new KeywordFieldType(); + // current impl ignores args and shourd always return INTERSECTS + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(null, + RandomStrings.randomAsciiOfLengthBetween(random(), 0, 5), + RandomStrings.randomAsciiOfLengthBetween(random(), 0, 5), + randomBoolean(), randomBoolean(), null, null)); + } } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/core/LongFieldTypeTests.java b/core/src/test/java/org/elasticsearch/index/mapper/core/LongFieldTypeTests.java index e7b41bf21d..0b4b374a48 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/core/LongFieldTypeTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/core/LongFieldTypeTests.java @@ -20,8 +20,12 @@ package org.elasticsearch.index.mapper.core; import org.elasticsearch.index.mapper.FieldTypeTestCase; import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.core.LongFieldMapper.LongFieldType; import org.junit.Before; +import java.io.IOException; + public class LongFieldTypeTests extends FieldTypeTestCase { @Override protected MappedFieldType createDefaultFieldType() { @@ -32,4 +36,11 @@ public class LongFieldTypeTests extends FieldTypeTestCase { public void setupProperties() { setDummyNullValue((long)10); } + + public void testIsFieldWithinQuery() throws IOException { + LongFieldType ft = new LongFieldType(); + // current impl ignores args and shourd always return INTERSECTS + assertEquals(Relation.INTERSECTS, ft.isFieldWithinQuery(null, randomLong(), randomLong(), + randomBoolean(), randomBoolean(), null, null)); + } } diff --git a/core/src/test/java/org/elasticsearch/index/percolator/PercolatorQueryCacheTests.java b/core/src/test/java/org/elasticsearch/index/percolator/PercolatorQueryCacheTests.java index e10a63bca2..31c8a4c57d 100644 --- a/core/src/test/java/org/elasticsearch/index/percolator/PercolatorQueryCacheTests.java +++ b/core/src/test/java/org/elasticsearch/index/percolator/PercolatorQueryCacheTests.java @@ -117,7 +117,7 @@ public class PercolatorQueryCacheTests extends ESTestCase { MapperService.MergeReason.MAPPING_UPDATE, false); cache = new PercolatorQueryCache(idxSettings, () -> queryShardContext); queryShardContext = new QueryShardContext(idxSettings, null, null, mapperService, similarityService, null, - indicesQueriesRegistry, cache); + indicesQueriesRegistry, cache, null); } public void testLoadQueries() throws Exception { diff --git a/core/src/test/java/org/elasticsearch/index/query/AbstractQueryTestCase.java b/core/src/test/java/org/elasticsearch/index/query/AbstractQueryTestCase.java index e404870d72..2eec53f008 100644 --- a/core/src/test/java/org/elasticsearch/index/query/AbstractQueryTestCase.java +++ b/core/src/test/java/org/elasticsearch/index/query/AbstractQueryTestCase.java @@ -287,7 +287,7 @@ public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>> }); PercolatorQueryCache percolatorQueryCache = new PercolatorQueryCache(idxSettings, () -> queryShardContext); indicesQueriesRegistry = injector.getInstance(IndicesQueriesRegistry.class); - queryShardContext = new QueryShardContext(idxSettings, bitsetFilterCache, indexFieldDataService, mapperService, similarityService, scriptService, indicesQueriesRegistry, percolatorQueryCache); + queryShardContext = new QueryShardContext(idxSettings, bitsetFilterCache, indexFieldDataService, mapperService, similarityService, scriptService, indicesQueriesRegistry, percolatorQueryCache, null); //create some random type with some default field, those types will stick around for all of the subclasses currentTypes = new String[randomIntBetween(0, 5)]; for (int i = 0; i < currentTypes.length; i++) { @@ -341,7 +341,6 @@ public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>> @After public void afterTest() { - queryShardContext.setFieldStatsProvider(null); clientInvocationHandler.delegate = null; SearchContext.removeCurrent(); } diff --git a/core/src/test/java/org/elasticsearch/index/query/QueryShardContextTests.java b/core/src/test/java/org/elasticsearch/index/query/QueryShardContextTests.java index f705db3a53..68332d755b 100644 --- a/core/src/test/java/org/elasticsearch/index/query/QueryShardContextTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/QueryShardContextTests.java @@ -47,7 +47,7 @@ public class QueryShardContextTests extends ESTestCase { MapperService mapperService = mock(MapperService.class); when(mapperService.getIndexSettings()).thenReturn(indexSettings); QueryShardContext context = new QueryShardContext( - indexSettings, null, null, mapperService, null, null, null, null + indexSettings, null, null, mapperService, null, null, null, null, null ); context.setAllowUnmappedFields(false); diff --git a/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java b/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java index eb37353999..c2102ebb44 100644 --- a/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/index/query/RangeQueryBuilderTests.java @@ -22,13 +22,11 @@ package org.elasticsearch.index.query; import org.apache.lucene.search.LegacyNumericRangeQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermRangeQuery; -import org.apache.lucene.util.BytesRef; import org.elasticsearch.ElasticsearchParseException; -import org.elasticsearch.action.fieldstats.FieldStats; import org.elasticsearch.common.ParseFieldMatcher; -import org.elasticsearch.common.joda.DateMathParser; import org.elasticsearch.common.lucene.BytesRefs; -import org.elasticsearch.index.fieldstats.FieldStatsProvider; +import org.elasticsearch.index.mapper.MappedFieldType; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.chrono.ISOChronology; @@ -399,317 +397,13 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil } } - public void testRewriteLongToMatchAll() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - int queryFromValue = randomIntBetween(-1000000, 1000000); - int queryToValue = randomIntBetween(queryFromValue, 2000000); - long shardMinValue = randomIntBetween(queryFromValue, queryToValue); - long shardMaxValue = randomIntBetween((int) shardMinValue, queryToValue); - query.from((long) queryFromValue); - query.to((long) queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.WITHIN; - } - - @SuppressWarnings("unchecked") - @Override - public <T extends Comparable<T>> FieldStats<T> get(String field) throws IOException { - assertThat(field, equalTo(fieldName)); - return (FieldStats<T>) new FieldStats.Long(randomLong(), randomLong(), randomLong(), randomLong(), shardMinValue, - shardMaxValue); - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(RangeQueryBuilder.class)); - RangeQueryBuilder rewrittenRange = (RangeQueryBuilder) rewritten; - assertThat(rewrittenRange.fieldName(), equalTo(fieldName)); - assertThat(rewrittenRange.from(), equalTo(null)); - assertThat(rewrittenRange.to(), equalTo(null)); - } - - public void testRewriteLongToMatchNone() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - int queryFromValue = randomIntBetween(-1000000, 1000000); - int queryToValue = randomIntBetween(queryFromValue, 2000000); - query.from((long) queryFromValue); - query.to((long) queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.DISJOINT; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(MatchNoneQueryBuilder.class)); - } - - public void testRewriteLongToSame() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - int queryFromValue = randomIntBetween(-1000000, 1000000); - int queryToValue = randomIntBetween(queryFromValue, 2000000); - query.from((long) queryFromValue); - query.to((long) queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.INTERSECTS; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, sameInstance(query)); - } - - public void testRewriteDoubleToMatchAll() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - double queryFromValue = randomDoubleBetween(-1000000.0, 1000000.0, true); - double queryToValue = randomDoubleBetween(queryFromValue, 2000000, true); - double shardMinValue = randomDoubleBetween(queryFromValue, queryToValue, true); - double shardMaxValue = randomDoubleBetween(shardMinValue, queryToValue, true); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.WITHIN; - } - - @SuppressWarnings("unchecked") - @Override - public <T extends Comparable<T>> FieldStats<T> get(String field) throws IOException { - assertThat(field, equalTo(fieldName)); - return (FieldStats<T>) new FieldStats.Double(randomLong(), randomLong(), randomLong(), randomLong(), shardMinValue, - shardMaxValue); - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(RangeQueryBuilder.class)); - RangeQueryBuilder rewrittenRange = (RangeQueryBuilder) rewritten; - assertThat(rewrittenRange.fieldName(), equalTo(fieldName)); - assertThat(rewrittenRange.from(), equalTo(null)); - assertThat(rewrittenRange.to(), equalTo(null)); - } - - public void testRewriteDoubleToMatchNone() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - double queryFromValue = randomDoubleBetween(-1000000, 1000000, true); - double queryToValue = randomDoubleBetween(queryFromValue, 2000000, true); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.DISJOINT; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(MatchNoneQueryBuilder.class)); - } - - public void testRewriteDoubleToSame() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - double queryFromValue = randomDoubleBetween(-1000000, 1000000, true); - double queryToValue = randomDoubleBetween(queryFromValue, 2000000, true); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.INTERSECTS; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, sameInstance(query)); - } - - public void testRewriteFloatToMatchAll() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - float queryFromValue = (float) randomDoubleBetween(-1000000.0, 1000000.0, true); - float queryToValue = (float) randomDoubleBetween(queryFromValue, 2000000, true); - float shardMinValue = (float) randomDoubleBetween(queryFromValue, queryToValue, true); - float shardMaxValue = (float) randomDoubleBetween(shardMinValue, queryToValue, true); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.WITHIN; - } - - @SuppressWarnings("unchecked") - @Override - public <T extends Comparable<T>> FieldStats<T> get(String field) throws IOException { - assertThat(field, equalTo(fieldName)); - return (FieldStats<T>) new FieldStats.Float(randomLong(), randomLong(), randomLong(), randomLong(), shardMinValue, - shardMaxValue); - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(RangeQueryBuilder.class)); - RangeQueryBuilder rewrittenRange = (RangeQueryBuilder) rewritten; - assertThat(rewrittenRange.fieldName(), equalTo(fieldName)); - assertThat(rewrittenRange.from(), equalTo(null)); - assertThat(rewrittenRange.to(), equalTo(null)); - } - - public void testRewriteFloatToMatchNone() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - float queryFromValue = (float) randomDoubleBetween(-1000000, 1000000, true); - float queryToValue = (float) randomDoubleBetween(queryFromValue, 2000000, true); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.DISJOINT; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(MatchNoneQueryBuilder.class)); - } - - public void testRewriteFloatToSame() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - float queryFromValue = (float) randomDoubleBetween(-1000000, 1000000, true); - float queryToValue = (float) randomDoubleBetween(queryFromValue, 2000000, true); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.INTERSECTS; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, sameInstance(query)); - } - - public void testRewriteTextToMatchAll() throws IOException { + public void testRewriteDateToMatchAll() throws IOException { String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - String queryFromValue = "damson"; - String queryToValue = "plum"; - String shardMinValue = "grape"; - String shardMaxValue = "orange"; - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { + RangeQueryBuilder query = new RangeQueryBuilder(fieldName) { + protected MappedFieldType.Relation getRelation(QueryRewriteContext queryRewriteContext) throws IOException { return Relation.WITHIN; } - - @SuppressWarnings("unchecked") - @Override - public <T extends Comparable<T>> FieldStats<T> get(String field) throws IOException { - assertThat(field, equalTo(fieldName)); - return (FieldStats<T>) new FieldStats.Text(randomLong(), randomLong(), randomLong(), randomLong(), - new BytesRef(shardMinValue), new BytesRef(shardMaxValue)); - } }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(RangeQueryBuilder.class)); - RangeQueryBuilder rewrittenRange = (RangeQueryBuilder) rewritten; - assertThat(rewrittenRange.fieldName(), equalTo(fieldName)); - assertThat(rewrittenRange.from(), equalTo(null)); - assertThat(rewrittenRange.to(), equalTo(null)); - } - - public void testRewriteTextToMatchNone() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - String queryFromValue = "damson"; - String queryToValue = "plum"; - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.DISJOINT; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(MatchNoneQueryBuilder.class)); - } - - public void testRewriteTextToSame() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - String queryFromValue = "damson"; - String queryToValue = "plum"; - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.INTERSECTS; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, sameInstance(query)); - } - - public void testRewriteDateToMatchAll() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); DateTime queryFromValue = new DateTime(2015, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); DateTime queryToValue = new DateTime(2016, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); DateTime shardMinValue = new DateTime(2015, 3, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); @@ -717,23 +411,6 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil query.from(queryFromValue); query.to(queryToValue); QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.WITHIN; - } - - @SuppressWarnings("unchecked") - @Override - public <T extends Comparable<T>> FieldStats<T> get(String field) throws IOException { - assertThat(field, equalTo(fieldName)); - return (FieldStats<T>) new FieldStats.Date(randomLong(), randomLong(), randomLong(), randomLong(), - shardMinValue.getMillis(), shardMaxValue.getMillis(), null); - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); QueryBuilder<?> rewritten = query.rewrite(queryShardContext); assertThat(rewritten, instanceOf(RangeQueryBuilder.class)); RangeQueryBuilder rewrittenRange = (RangeQueryBuilder) rewritten; @@ -742,121 +419,46 @@ public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuil assertThat(rewrittenRange.to(), equalTo(null)); } - public void testRewriteDateWithNowToMatchAll() throws IOException { + public void testRewriteDateToMatchNone() throws IOException { String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - String queryFromValue = "now-2d"; - String queryToValue = "now"; - DateTime shardMinValue = new DateTime().minusHours(12); - DateTime shardMaxValue = new DateTime().minusHours(24); - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.WITHIN; - } - - @SuppressWarnings("unchecked") - @Override - public <T extends Comparable<T>> FieldStats<T> get(String field) throws IOException { - assertThat(field, equalTo(fieldName)); - return (FieldStats<T>) new FieldStats.Date(randomLong(), randomLong(), randomLong(), randomLong(), - shardMinValue.getMillis(), shardMaxValue.getMillis(), null); + RangeQueryBuilder query = new RangeQueryBuilder(fieldName) { + protected MappedFieldType.Relation getRelation(QueryRewriteContext queryRewriteContext) throws IOException { + return Relation.DISJOINT; } }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(RangeQueryBuilder.class)); - RangeQueryBuilder rewrittenRange = (RangeQueryBuilder) rewritten; - assertThat(rewrittenRange.fieldName(), equalTo(fieldName)); - assertThat(rewrittenRange.from(), equalTo(null)); - assertThat(rewrittenRange.to(), equalTo(null)); - } - - public void testRewriteDateToMatchNone() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); DateTime queryFromValue = new DateTime(2015, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); DateTime queryToValue = new DateTime(2016, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); query.from(queryFromValue); query.to(queryToValue); QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.DISJOINT; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); QueryBuilder<?> rewritten = query.rewrite(queryShardContext); assertThat(rewritten, instanceOf(MatchNoneQueryBuilder.class)); } - public void testRewriteDateWithNowToMatchNone() throws IOException { + public void testRewriteDateToSame() throws IOException { String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - String queryFromValue = "now-2d"; - String queryToValue = "now"; - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.DISJOINT; + RangeQueryBuilder query = new RangeQueryBuilder(fieldName) { + protected MappedFieldType.Relation getRelation(QueryRewriteContext queryRewriteContext) throws IOException { + return Relation.INTERSECTS; } }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); - QueryBuilder<?> rewritten = query.rewrite(queryShardContext); - assertThat(rewritten, instanceOf(MatchNoneQueryBuilder.class)); - } - - public void testRewriteDateToSame() throws IOException { - String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); DateTime queryFromValue = new DateTime(2015, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); DateTime queryToValue = new DateTime(2016, 1, 1, 0, 0, 0, ISOChronology.getInstanceUTC()); query.from(queryFromValue); query.to(queryToValue); QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { - return Relation.INTERSECTS; - } - }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); QueryBuilder<?> rewritten = query.rewrite(queryShardContext); assertThat(rewritten, sameInstance(query)); } - public void testRewriteDateWithNowToSame() throws IOException { + public void testRewriteOpenBoundsToSame() throws IOException { String fieldName = randomAsciiOfLengthBetween(1, 20); - RangeQueryBuilder query = new RangeQueryBuilder(fieldName); - String queryFromValue = "now-2d"; - String queryToValue = "now"; - query.from(queryFromValue); - query.to(queryToValue); - QueryShardContext queryShardContext = queryShardContext(); - FieldStatsProvider fieldStatsProvider = new FieldStatsProvider(null, null) { - - @Override - public Relation isFieldWithinQuery(String fieldName, Object from, Object to, boolean includeLower, boolean includeUpper, - DateTimeZone timeZone, DateMathParser dateMathParser) throws IOException { + RangeQueryBuilder query = new RangeQueryBuilder(fieldName) { + protected MappedFieldType.Relation getRelation(QueryRewriteContext queryRewriteContext) throws IOException { return Relation.INTERSECTS; } }; - queryShardContext.setFieldStatsProvider(fieldStatsProvider); + QueryShardContext queryShardContext = queryShardContext(); QueryBuilder<?> rewritten = query.rewrite(queryShardContext); assertThat(rewritten, sameInstance(query)); } diff --git a/core/src/test/java/org/elasticsearch/index/query/RangeQueryRewriteTests.java b/core/src/test/java/org/elasticsearch/index/query/RangeQueryRewriteTests.java new file mode 100644 index 0000000000..71d70e2861 --- /dev/null +++ b/core/src/test/java/org/elasticsearch/index/query/RangeQueryRewriteTests.java @@ -0,0 +1,81 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.index.query; + +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.MultiReader; +import org.elasticsearch.common.compress.CompressedXContent; +import org.elasticsearch.common.xcontent.XContentFactory; +import org.elasticsearch.index.IndexService; +import org.elasticsearch.index.mapper.MappedFieldType.Relation; +import org.elasticsearch.index.mapper.MapperService.MergeReason; +import org.elasticsearch.test.ESSingleNodeTestCase; + +// The purpose of this test case is to test RangeQueryBuilder.getRelation() +// Whether it should return INTERSECT/DISJOINT/WITHIN is already tested in +// RangeQueryBuilderTests +public class RangeQueryRewriteTests extends ESSingleNodeTestCase { + + public void testRewriteMissingField() throws Exception { + IndexService indexService = createIndex("test"); + IndexReader reader = new MultiReader(); + QueryRewriteContext context = new QueryRewriteContext(indexService.getIndexSettings(), + indexService.mapperService(), null, null, reader); + RangeQueryBuilder range = new RangeQueryBuilder("foo"); + assertEquals(Relation.DISJOINT, range.getRelation(context)); + } + + public void testRewriteMissingReader() throws Exception { + IndexService indexService = createIndex("test"); + String mapping = XContentFactory.jsonBuilder().startObject().startObject("type") + .startObject("properties") + .startObject("foo") + .field("type", "date") + .endObject() + .endObject() + .endObject().endObject().string(); + indexService.mapperService().merge("type", + new CompressedXContent(mapping), MergeReason.MAPPING_UPDATE, false); + QueryRewriteContext context = new QueryRewriteContext(indexService.getIndexSettings(), + indexService.mapperService(), null, null, null); + RangeQueryBuilder range = new RangeQueryBuilder("foo"); + // can't make assumptions on a missing reader, so it must return INTERSECT + assertEquals(Relation.INTERSECTS, range.getRelation(context)); + } + + public void testRewriteEmptyReader() throws Exception { + IndexService indexService = createIndex("test"); + String mapping = XContentFactory.jsonBuilder().startObject().startObject("type") + .startObject("properties") + .startObject("foo") + .field("type", "date") + .endObject() + .endObject() + .endObject().endObject().string(); + indexService.mapperService().merge("type", + new CompressedXContent(mapping), MergeReason.MAPPING_UPDATE, false); + IndexReader reader = new MultiReader(); + QueryRewriteContext context = new QueryRewriteContext(indexService.getIndexSettings(), + indexService.mapperService(), null, null, reader); + RangeQueryBuilder range = new RangeQueryBuilder("foo"); + // no values -> DISJOINT + assertEquals(Relation.DISJOINT, range.getRelation(context)); + } +} diff --git a/core/src/test/java/org/elasticsearch/indices/IndicesRequestCacheIT.java b/core/src/test/java/org/elasticsearch/indices/IndicesRequestCacheIT.java index fec50cf0a2..fdd7e4c2d6 100644 --- a/core/src/test/java/org/elasticsearch/indices/IndicesRequestCacheIT.java +++ b/core/src/test/java/org/elasticsearch/indices/IndicesRequestCacheIT.java @@ -85,20 +85,20 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { } public void testQueryRewrite() throws Exception { - assertAcked(client().admin().indices().prepareCreate("index").addMapping("type", "s", "type=text") + assertAcked(client().admin().indices().prepareCreate("index").addMapping("type", "s", "type=date") .setSettings(IndicesRequestCache.INDEX_CACHE_REQUEST_ENABLED_SETTING.getKey(), true, IndexMetaData.SETTING_NUMBER_OF_SHARDS, 5, IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) .get()); - indexRandom(true, client().prepareIndex("index", "type", "1").setRouting("1").setSource("s", "a"), - client().prepareIndex("index", "type", "2").setRouting("1").setSource("s", "b"), - client().prepareIndex("index", "type", "3").setRouting("1").setSource("s", "c"), - client().prepareIndex("index", "type", "4").setRouting("2").setSource("s", "d"), - client().prepareIndex("index", "type", "5").setRouting("2").setSource("s", "e"), - client().prepareIndex("index", "type", "6").setRouting("2").setSource("s", "f"), - client().prepareIndex("index", "type", "7").setRouting("3").setSource("s", "g"), - client().prepareIndex("index", "type", "8").setRouting("3").setSource("s", "h"), - client().prepareIndex("index", "type", "9").setRouting("3").setSource("s", "i")); + indexRandom(true, client().prepareIndex("index", "type", "1").setRouting("1").setSource("s", "2016-03-19"), + client().prepareIndex("index", "type", "2").setRouting("1").setSource("s", "2016-03-20"), + client().prepareIndex("index", "type", "3").setRouting("1").setSource("s", "2016-03-21"), + client().prepareIndex("index", "type", "4").setRouting("2").setSource("s", "2016-03-22"), + client().prepareIndex("index", "type", "5").setRouting("2").setSource("s", "2016-03-23"), + client().prepareIndex("index", "type", "6").setRouting("2").setSource("s", "2016-03-24"), + client().prepareIndex("index", "type", "7").setRouting("3").setSource("s", "2016-03-25"), + client().prepareIndex("index", "type", "8").setRouting("3").setSource("s", "2016-03-26"), + client().prepareIndex("index", "type", "9").setRouting("3").setSource("s", "2016-03-27")); ensureSearchable("index"); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -107,7 +107,7 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { equalTo(0L)); final SearchResponse r1 = client().prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0) - .setQuery(QueryBuilders.rangeQuery("s").gte("a").lte("g")).get(); + .setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-19").lte("2016-03-25")).get(); assertSearchResponse(r1); assertThat(r1.getHits().getTotalHits(), equalTo(7L)); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -116,7 +116,7 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { equalTo(5L)); final SearchResponse r2 = client().prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0) - .setQuery(QueryBuilders.rangeQuery("s").gte("b").lte("h")).get(); + .setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-20").lte("2016-03-26")).get(); assertSearchResponse(r2); assertThat(r2.getHits().getTotalHits(), equalTo(7L)); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -125,7 +125,7 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { equalTo(7L)); final SearchResponse r3 = client().prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0) - .setQuery(QueryBuilders.rangeQuery("s").gte("c").lte("i")).get(); + .setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-21").lte("2016-03-27")).get(); assertSearchResponse(r3); assertThat(r3.getHits().getTotalHits(), equalTo(7L)); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -135,19 +135,19 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { } public void testQueryRewriteMissingValues() throws Exception { - assertAcked(client().admin().indices().prepareCreate("index").addMapping("type", "s", "type=text") + assertAcked(client().admin().indices().prepareCreate("index").addMapping("type", "s", "type=date") .setSettings(IndicesRequestCache.INDEX_CACHE_REQUEST_ENABLED_SETTING.getKey(), true, IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1, IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0) .get()); - indexRandom(true, client().prepareIndex("index", "type", "1").setSource("s", "a"), - client().prepareIndex("index", "type", "2").setSource("s", "b"), - client().prepareIndex("index", "type", "3").setSource("s", "c"), - client().prepareIndex("index", "type", "4").setSource("s", "d"), - client().prepareIndex("index", "type", "5").setSource("s", "e"), - client().prepareIndex("index", "type", "6").setSource("s", "f"), + indexRandom(true, client().prepareIndex("index", "type", "1").setSource("s", "2016-03-19"), + client().prepareIndex("index", "type", "2").setSource("s", "2016-03-20"), + client().prepareIndex("index", "type", "3").setSource("s", "2016-03-21"), + client().prepareIndex("index", "type", "4").setSource("s", "2016-03-22"), + client().prepareIndex("index", "type", "5").setSource("s", "2016-03-23"), + client().prepareIndex("index", "type", "6").setSource("s", "2016-03-24"), client().prepareIndex("index", "type", "7").setSource("other", "value"), - client().prepareIndex("index", "type", "8").setSource("s", "h"), - client().prepareIndex("index", "type", "9").setSource("s", "i")); + client().prepareIndex("index", "type", "8").setSource("s", "2016-03-26"), + client().prepareIndex("index", "type", "9").setSource("s", "2016-03-27")); ensureSearchable("index"); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -156,7 +156,7 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { equalTo(0L)); final SearchResponse r1 = client().prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0) - .setQuery(QueryBuilders.rangeQuery("s").gte("a").lte("j")).get(); + .setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-19").lte("2016-03-28")).get(); assertSearchResponse(r1); assertThat(r1.getHits().getTotalHits(), equalTo(8L)); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -165,7 +165,7 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { equalTo(1L)); final SearchResponse r2 = client().prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0) - .setQuery(QueryBuilders.rangeQuery("s").gte("a").lte("j")).get(); + .setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-19").lte("2016-03-28")).get(); assertSearchResponse(r2); assertThat(r2.getHits().getTotalHits(), equalTo(8L)); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), @@ -174,7 +174,7 @@ public class IndicesRequestCacheIT extends ESIntegTestCase { equalTo(1L)); final SearchResponse r3 = client().prepareSearch("index").setSearchType(SearchType.QUERY_THEN_FETCH).setSize(0) - .setQuery(QueryBuilders.rangeQuery("s").gte("a").lte("j")).get(); + .setQuery(QueryBuilders.rangeQuery("s").gte("2016-03-19").lte("2016-03-28")).get(); assertSearchResponse(r3); assertThat(r3.getHits().getTotalHits(), equalTo(8L)); assertThat(client().admin().indices().prepareStats("index").setRequestCache(true).get().getTotal().getRequestCache().getHitCount(), diff --git a/core/src/test/java/org/elasticsearch/search/highlight/HighlightBuilderTests.java b/core/src/test/java/org/elasticsearch/search/highlight/HighlightBuilderTests.java index d885619cf1..1ea4212511 100644 --- a/core/src/test/java/org/elasticsearch/search/highlight/HighlightBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/search/highlight/HighlightBuilderTests.java @@ -291,7 +291,7 @@ public class HighlightBuilderTests extends ESTestCase { IndexSettings idxSettings = IndexSettingsModule.newIndexSettings(index, indexSettings); // shard context will only need indicesQueriesRegistry for building Query objects nested in highlighter QueryShardContext mockShardContext = new QueryShardContext(idxSettings, null, null, null, null, null, indicesQueriesRegistry, - null) { + null, null) { @Override public MappedFieldType fieldMapper(String name) { TextFieldMapper.Builder builder = new TextFieldMapper.Builder(name); diff --git a/core/src/test/java/org/elasticsearch/search/rescore/QueryRescoreBuilderTests.java b/core/src/test/java/org/elasticsearch/search/rescore/QueryRescoreBuilderTests.java index 7e4ff9449b..4418fe848a 100644 --- a/core/src/test/java/org/elasticsearch/search/rescore/QueryRescoreBuilderTests.java +++ b/core/src/test/java/org/elasticsearch/search/rescore/QueryRescoreBuilderTests.java @@ -163,7 +163,7 @@ public class QueryRescoreBuilderTests extends ESTestCase { IndexSettings idxSettings = IndexSettingsModule.newIndexSettings(randomAsciiOfLengthBetween(1, 10), indexSettings); // shard context will only need indicesQueriesRegistry for building Query objects nested in query rescorer QueryShardContext mockShardContext = new QueryShardContext(idxSettings, null, null, null, null, null, indicesQueriesRegistry, - null) { + null, null) { @Override public MappedFieldType fieldMapper(String name) { TextFieldMapper.Builder builder = new TextFieldMapper.Builder(name); diff --git a/core/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java b/core/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java index 0112e252ac..b84ec9b436 100644 --- a/core/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java +++ b/core/src/test/java/org/elasticsearch/search/sort/AbstractSortTestCase.java @@ -225,7 +225,7 @@ public abstract class AbstractSortTestCase<T extends SortBuilder<T>> extends EST } }); return new QueryShardContext(idxSettings, bitsetFilterCache, ifds, null, null, scriptService, - indicesQueriesRegistry, null) { + indicesQueriesRegistry, null, null) { @Override public MappedFieldType fieldMapper(String name) { return provideMappedFieldType(name); |