diff --git a/core/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java b/core/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java index d8159b39537..38c1374ab31 100644 --- a/core/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java +++ b/core/src/main/java/org/elasticsearch/index/fieldvisitor/FieldsVisitor.java @@ -81,7 +81,7 @@ public abstract class FieldsVisitor extends StoredFieldVisitor { } List fieldValues = entry.getValue(); for (int i = 0; i < fieldValues.size(); i++) { - fieldValues.set(i, fieldMapper.valueForSearch(fieldValues.get(i))); + fieldValues.set(i, fieldMapper.fieldType().valueForSearch(fieldValues.get(i))); } } } diff --git a/core/src/main/java/org/elasticsearch/index/get/ShardGetService.java b/core/src/main/java/org/elasticsearch/index/get/ShardGetService.java index 9b7c75621c2..6af30b0001a 100644 --- a/core/src/main/java/org/elasticsearch/index/get/ShardGetService.java +++ b/core/src/main/java/org/elasticsearch/index/get/ShardGetService.java @@ -252,7 +252,7 @@ public class ShardGetService extends AbstractIndexShardComponent { List values = searchLookup.source().extractRawValues(field); if (!values.isEmpty()) { for (int i = 0; i < values.size(); i++) { - values.set(i, fieldMapper.valueForSearch(values.get(i))); + values.set(i, fieldMapper.fieldType().valueForSearch(values.get(i))); } value = values; } @@ -379,7 +379,7 @@ public class ShardGetService extends AbstractIndexShardComponent { List values = searchLookup.source().extractRawValues(field); if (!values.isEmpty()) { for (int i = 0; i < values.size(); i++) { - values.set(i, fieldMapper.valueForSearch(values.get(i))); + values.set(i, fieldMapper.fieldType().valueForSearch(values.get(i))); } value = values; } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java index 17ceba1712b..01d4b78a87f 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/DocumentMapper.java @@ -194,7 +194,7 @@ public class DocumentMapper implements ToXContent { meta); this.documentParser = new DocumentParser(index, indexSettings, docMapperParser, this, new ReleasableLock(mappingLock.readLock())); - this.typeFilter = typeMapper().termQuery(type, null); + this.typeFilter = typeMapper().fieldType().termQuery(type, null); this.mappingWriteLock = new ReleasableLock(mappingLock.writeLock()); this.mappingLock = mappingLock; diff --git a/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java index 4f7abb8c2b7..20c258783f1 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/FieldMapper.java @@ -19,19 +19,9 @@ package org.elasticsearch.index.mapper; -import org.apache.lucene.index.Term; -import org.apache.lucene.index.Terms; -import org.apache.lucene.search.MultiTermQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.util.BytesRef; -import org.elasticsearch.action.fieldstats.FieldStats; -import org.elasticsearch.common.Nullable; -import org.elasticsearch.common.unit.Fuzziness; import org.elasticsearch.index.mapper.core.AbstractFieldMapper; -import org.elasticsearch.index.query.QueryParseContext; import java.io.IOException; -import java.util.List; /** * @@ -47,55 +37,6 @@ public interface FieldMapper extends Mapper { */ AbstractFieldMapper.CopyTo copyTo(); - /** - * Returns the actual value of the field. - */ - Object value(Object value); - - /** - * Returns the value that will be used as a result for search. Can be only of specific types... . - */ - Object valueForSearch(Object value); - - /** - * Returns the indexed value used to construct search "values". - */ - BytesRef indexedValueForSearch(Object value); - - /** - * Should the field query {@link #termQuery(Object, org.elasticsearch.index.query.QueryParseContext)} be used when detecting this - * field in query string. - */ - boolean useTermQueryWithQueryString(); - - Query termQuery(Object value, @Nullable QueryParseContext context); - - Query termsQuery(List values, @Nullable QueryParseContext context); - - Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper, @Nullable QueryParseContext context); - - Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions); - - Query prefixQuery(Object value, @Nullable MultiTermQuery.RewriteMethod method, @Nullable QueryParseContext context); - - Query regexpQuery(Object value, int flags, int maxDeterminizedStates, @Nullable MultiTermQuery.RewriteMethod method, @Nullable QueryParseContext context); - - /** - * A term query to use when parsing a query string. Can return null. - */ - @Nullable - Query queryStringTermQuery(Term term); - - /** - * Null value filter, returns null if there is no null value associated with the field. - */ - @Nullable - Query nullValueFilter(); - - boolean isNumeric(); - - boolean isSortable(); - /** * Fields might not be available before indexing, for example _all, token_count,... * When get is called and these fields are requested, this case needs special treatment. @@ -111,9 +52,4 @@ public interface FieldMapper extends Mapper { */ Mapper parse(ParseContext context) throws IOException; - /** - * @return a {@link FieldStats} instance that maps to the type of this field based on the provided {@link Terms} instance. - */ - FieldStats stats(Terms terms, int maxDoc) throws IOException; - } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java index b801307c923..175ecaae2bd 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java @@ -28,18 +28,11 @@ import com.google.common.collect.Iterators; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; import org.apache.lucene.index.IndexOptions; -import org.apache.lucene.index.Term; -import org.apache.lucene.index.Terms; -import org.apache.lucene.search.MultiTermQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.util.BytesRef; import org.elasticsearch.Version; -import org.elasticsearch.action.fieldstats.FieldStats; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.unit.Fuzziness; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.index.analysis.NamedAnalyzer; import org.elasticsearch.index.fielddata.FieldDataType; @@ -52,7 +45,6 @@ import org.elasticsearch.index.mapper.MergeMappingException; import org.elasticsearch.index.mapper.MergeResult; import org.elasticsearch.index.mapper.ParseContext; import org.elasticsearch.index.mapper.internal.AllFieldMapper; -import org.elasticsearch.index.query.QueryParseContext; import org.elasticsearch.index.similarity.SimilarityLookupService; import org.elasticsearch.index.similarity.SimilarityProvider; @@ -388,67 +380,6 @@ public abstract class AbstractFieldMapper implements FieldMapper { return multiFields.iterator(); } - @Override - public final Object value(Object value) { - return fieldType().value(value); - } - - @Override - public final Object valueForSearch(Object value) { - return fieldType().valueForSearch(value); - } - - // TODO: this is not final so ParentFieldMapper can have custom behavior, per type... - @Override - public BytesRef indexedValueForSearch(Object value) { - return fieldType().indexedValueForSearch(value); - } - - @Override - public final Query queryStringTermQuery(Term term) { - return fieldType().queryStringTermQuery(term); - } - - @Override - public final boolean useTermQueryWithQueryString() { - return fieldType().useTermQueryWithQueryString(); - } - - @Override - public final Query termQuery(Object value, @Nullable QueryParseContext context) { - return fieldType().termQuery(value, context); - } - - @Override - public final Query termsQuery(List values, @Nullable QueryParseContext context) { - return fieldType().termsQuery(values, context); - } - - @Override - public final Query rangeQuery(Object lowerTerm, Object upperTerm, boolean includeLower, boolean includeUpper, @Nullable QueryParseContext context) { - return fieldType().rangeQuery(lowerTerm, upperTerm, includeLower, includeUpper, context); - } - - @Override - public final Query fuzzyQuery(String value, Fuzziness fuzziness, int prefixLength, int maxExpansions, boolean transpositions) { - return fieldType().fuzzyQuery(value, fuzziness, prefixLength, maxExpansions, transpositions); - } - - @Override - public final Query prefixQuery(Object value, @Nullable MultiTermQuery.RewriteMethod method, @Nullable QueryParseContext context) { - return fieldType().prefixQuery(value, method, context); - } - - @Override - public final Query regexpQuery(Object value, int flags, int maxDeterminizedStates, @Nullable MultiTermQuery.RewriteMethod method, @Nullable QueryParseContext context) { - return fieldType().regexpQuery(value, flags, maxDeterminizedStates, method, context); - } - - @Override - public final Query nullValueFilter() { - return fieldType().nullValueQuery(); - } - @Override public void merge(Mapper mergeWith, MergeResult mergeResult) throws MergeMappingException { if (!this.getClass().equals(mergeWith.getClass())) { @@ -684,16 +615,6 @@ public abstract class AbstractFieldMapper implements FieldMapper { multiFields.close(); } - @Override - public final boolean isNumeric() { - return fieldType().isNumeric(); - } - - @Override - public final boolean isSortable() { - return fieldType().isSortable(); - } - public static class MultiFields { public static MultiFields empty() { @@ -903,9 +824,4 @@ public abstract class AbstractFieldMapper implements FieldMapper { public boolean isGenerated() { return false; } - - @Override - public final FieldStats stats(Terms terms, int maxDoc) throws IOException { - return fieldType().stats(terms, maxDoc); - } } diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java index ccf6d84293d..5a97432c95e 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/RoutingFieldMapper.java @@ -185,7 +185,7 @@ public class RoutingFieldMapper extends AbstractFieldMapper implements RootMappe public String value(Document document) { Field field = (Field) document.getField(fieldType.names().indexName()); - return field == null ? null : (String)value(field); + return field == null ? null : (String)fieldType().value(field); } @Override diff --git a/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java b/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java index b0ff89f414d..b46c4e349d7 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/all/SimpleAllMapperTests.java @@ -85,7 +85,7 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { assertThat(allEntries.fields().contains("simple1"), equalTo(true)); AllFieldMapper mapper = docMapper.allFieldMapper(); assertThat(field.fieldType().omitNorms(), equalTo(true)); - assertThat(mapper.queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class)); + assertThat(mapper.fieldType().queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class)); } public void testAllMappersNoBoost() throws Exception { @@ -116,7 +116,7 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { assertThat(allEntries.fields().contains("simple1"), equalTo(true)); AllFieldMapper mapper = docMapper.allFieldMapper(); assertThat(field.fieldType().omitNorms(), equalTo(false)); - assertThat(mapper.queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class)); + assertThat(mapper.fieldType().queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class)); } @@ -136,7 +136,7 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { assertThat(allEntries.fields().contains("simple1"), equalTo(true)); AllFieldMapper mapper = docMapper.allFieldMapper(); assertThat(field.fieldType().omitNorms(), equalTo(false)); - assertThat(mapper.queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class)); + assertThat(mapper.fieldType().queryStringTermQuery(new Term("_all", "foobar")), Matchers.instanceOf(AllTermQuery.class)); } // #6187: if _all doesn't index positions then we never use AllTokenStream, even if some fields have boost @@ -443,7 +443,7 @@ public class SimpleAllMapperTests extends ElasticsearchSingleNodeTest { IndexService indexService = createIndex(index, client().admin().indices().prepareCreate(index).addMapping("type", "foo", "type=string" + (boost ? ",boost=2" : ""))); client().prepareIndex(index, "type").setSource("foo", "bar").get(); client().admin().indices().prepareRefresh(index).get(); - Query query = indexService.mapperService().documentMapper("type").allFieldMapper().termQuery("bar", null); + Query query = indexService.mapperService().documentMapper("type").allFieldMapper().fieldType().termQuery("bar", null); try (Searcher searcher = indexService.shard(0).acquireSearcher("tests")) { query = searcher.searcher().rewrite(query); final Class expected = boost ? AllTermQuery.class : TermQuery.class; diff --git a/core/src/test/java/org/elasticsearch/index/mapper/binary/BinaryMappingTests.java b/core/src/test/java/org/elasticsearch/index/mapper/binary/BinaryMappingTests.java index efe22e0eaf8..39229121b8d 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/binary/BinaryMappingTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/binary/BinaryMappingTests.java @@ -89,7 +89,7 @@ public class BinaryMappingTests extends ElasticsearchSingleNodeTest { BytesRef indexedValue = doc.rootDoc().getBinaryValue("field"); assertEquals(new BytesRef(value), indexedValue); FieldMapper fieldMapper = mapper.mappers().smartNameFieldMapper("field"); - Object originalValue = fieldMapper.valueForSearch(indexedValue); + Object originalValue = fieldMapper.fieldType().valueForSearch(indexedValue); assertEquals(new BytesArray(value), originalValue); } } @@ -120,7 +120,7 @@ public class BinaryMappingTests extends ElasticsearchSingleNodeTest { BytesRef indexedValue = doc.rootDoc().getBinaryValue("field"); assertEquals(new BytesRef(binaryValue), indexedValue); FieldMapper fieldMapper = mapper.mappers().smartNameFieldMapper("field"); - Object originalValue = fieldMapper.valueForSearch(indexedValue); + Object originalValue = fieldMapper.fieldType().valueForSearch(indexedValue); assertEquals(new BytesArray(original), originalValue); } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/date/SimpleDateMappingTests.java b/core/src/test/java/org/elasticsearch/index/mapper/date/SimpleDateMappingTests.java index 86d9fc322e7..1460bbfdef0 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/date/SimpleDateMappingTests.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/date/SimpleDateMappingTests.java @@ -228,7 +228,7 @@ public class SimpleDateMappingTests extends ElasticsearchSingleNodeTest { NumericRangeQuery rangeQuery; try { SearchContext.setCurrent(new TestSearchContext()); - rangeQuery = (NumericRangeQuery) defaultMapper.mappers().smartNameFieldMapper("date_field").rangeQuery("10:00:00", "11:00:00", true, true, null); + rangeQuery = (NumericRangeQuery) defaultMapper.mappers().smartNameFieldMapper("date_field").fieldType().rangeQuery("10:00:00", "11:00:00", true, true, null); } finally { SearchContext.removeCurrent(); } @@ -254,7 +254,7 @@ public class SimpleDateMappingTests extends ElasticsearchSingleNodeTest { NumericRangeQuery rangeQuery; try { SearchContext.setCurrent(new TestSearchContext()); - rangeQuery = (NumericRangeQuery) defaultMapper.mappers().smartNameFieldMapper("date_field").rangeQuery("Jan 02 10:00:00", "Jan 02 11:00:00", true, true, null); + rangeQuery = (NumericRangeQuery) defaultMapper.mappers().smartNameFieldMapper("date_field").fieldType().rangeQuery("Jan 02 10:00:00", "Jan 02 11:00:00", true, true, null); } finally { SearchContext.removeCurrent(); } diff --git a/core/src/test/java/org/elasticsearch/index/mapper/lucene/DoubleIndexingDocTest.java b/core/src/test/java/org/elasticsearch/index/mapper/lucene/DoubleIndexingDocTest.java index f88f174cfe0..cb7c573315e 100644 --- a/core/src/test/java/org/elasticsearch/index/mapper/lucene/DoubleIndexingDocTest.java +++ b/core/src/test/java/org/elasticsearch/index/mapper/lucene/DoubleIndexingDocTest.java @@ -71,25 +71,25 @@ public class DoubleIndexingDocTest extends ElasticsearchSingleNodeTest { IndexReader reader = DirectoryReader.open(writer, true); IndexSearcher searcher = new IndexSearcher(reader); - TopDocs topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field1").termQuery("value1", null), 10); + TopDocs topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field1").fieldType().termQuery("value1", null), 10); assertThat(topDocs.totalHits, equalTo(2)); - topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field2").termQuery("1", null), 10); + topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field2").fieldType().termQuery("1", null), 10); assertThat(topDocs.totalHits, equalTo(2)); - topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field3").termQuery("1.1", null), 10); + topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field3").fieldType().termQuery("1.1", null), 10); assertThat(topDocs.totalHits, equalTo(2)); - topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field4").termQuery("2010-01-01", null), 10); + topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field4").fieldType().termQuery("2010-01-01", null), 10); assertThat(topDocs.totalHits, equalTo(2)); - topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field5").termQuery("1", null), 10); + topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field5").fieldType().termQuery("1", null), 10); assertThat(topDocs.totalHits, equalTo(2)); - topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field5").termQuery("2", null), 10); + topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field5").fieldType().termQuery("2", null), 10); assertThat(topDocs.totalHits, equalTo(2)); - topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field5").termQuery("3", null), 10); + topDocs = searcher.search(mapper.mappers().smartNameFieldMapper("field5").fieldType().termQuery("3", null), 10); assertThat(topDocs.totalHits, equalTo(2)); writer.close(); reader.close();