Skip to content

Commit

Permalink
Convert test field mappers to parametrized forms (#63018)
Browse files Browse the repository at this point in the history
Relates to #62988
  • Loading branch information
romseygeek committed Sep 30, 2020
1 parent 675d18f commit 4fe09b4
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,16 @@
import org.elasticsearch.test.ESIntegTestCase;
import org.locationtech.jts.geom.Coordinate;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse;
import static org.hamcrest.Matchers.equalTo;

public class ExternalValuesMapperIntegrationIT extends ESIntegTestCase {
@Override
protected Collection<Class<? extends Plugin>> nodePlugins() {
return Arrays.asList(ExternalMapperPlugin.class);
return Collections.singletonList(ExternalMapperPlugin.class);
}

public void testHighlightingOnCustomString() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.util.LuceneTestCase;
import org.elasticsearch.index.analysis.AnalyzerScope;
import org.elasticsearch.index.analysis.NamedAnalyzer;
Expand All @@ -33,7 +32,6 @@
import java.io.StringReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class DocumentFieldMapperTests extends LuceneTestCase {

Expand Down Expand Up @@ -78,14 +76,14 @@ public String typeName() {
}
}

static class FakeFieldMapper extends FieldMapper {
static class FakeFieldMapper extends ParametrizedFieldMapper {

FakeFieldMapper(FakeFieldType fieldType) {
super(fieldType.name(), new FieldType(), fieldType, MultiFields.empty(), CopyTo.empty());
super(fieldType.name(), fieldType, MultiFields.empty(), CopyTo.empty());
}

@Override
protected void parseCreateField(ParseContext context) throws IOException {
protected void parseCreateField(ParseContext context) {
}

@Override
Expand All @@ -94,15 +92,14 @@ public ValueFetcher valueFetcher(MapperService mapperService, SearchLookup searc
}

@Override
protected void mergeOptions(FieldMapper other, List<String> conflicts) {

protected String contentType() {
return null;
}

@Override
protected String contentType() {
public Builder getMergeBuilder() {
return null;
}

}

public void testAnalyzers() throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,10 @@

package org.elasticsearch.index.mapper;

import org.apache.lucene.document.FieldType;
import org.elasticsearch.Version;
import org.elasticsearch.common.collect.Iterators;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.geo.builders.PointBuilder;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.geometry.Point;
import org.elasticsearch.search.lookup.SearchLookup;

Expand All @@ -35,9 +33,6 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import static org.elasticsearch.index.mapper.TypeParsers.parseField;

/**
* This mapper add a new sub fields
Expand All @@ -46,7 +41,7 @@
* .point GeoPoint type
* .shape GeoShape type
*/
public class ExternalMapper extends FieldMapper {
public class ExternalMapper extends ParametrizedFieldMapper {

public static class Names {
public static final String FIELD_BIN = "bin";
Expand All @@ -55,28 +50,27 @@ public static class Names {
public static final String FIELD_SHAPE = "shape";
}

public static class Builder extends FieldMapper.Builder<Builder> {
public static class Builder extends ParametrizedFieldMapper.Builder {

private BinaryFieldMapper.Builder binBuilder = new BinaryFieldMapper.Builder(Names.FIELD_BIN);
private BooleanFieldMapper.Builder boolBuilder = new BooleanFieldMapper.Builder(Names.FIELD_BOOL);
private GeoPointFieldMapper.Builder latLonPointBuilder = new GeoPointFieldMapper.Builder(Names.FIELD_POINT);
private GeoShapeFieldMapper.Builder shapeBuilder = new GeoShapeFieldMapper.Builder(Names.FIELD_SHAPE);
private LegacyGeoShapeFieldMapper.Builder legacyShapeBuilder = new LegacyGeoShapeFieldMapper.Builder(Names.FIELD_SHAPE);
private Mapper.Builder stringBuilder;
private String generatedValue;
private String mapperName;
private final BinaryFieldMapper.Builder binBuilder = new BinaryFieldMapper.Builder(Names.FIELD_BIN);
private final BooleanFieldMapper.Builder boolBuilder = new BooleanFieldMapper.Builder(Names.FIELD_BOOL);
private final GeoPointFieldMapper.Builder latLonPointBuilder = new GeoPointFieldMapper.Builder(Names.FIELD_POINT);
private final GeoShapeFieldMapper.Builder shapeBuilder = new GeoShapeFieldMapper.Builder(Names.FIELD_SHAPE);
private final LegacyGeoShapeFieldMapper.Builder legacyShapeBuilder = new LegacyGeoShapeFieldMapper.Builder(Names.FIELD_SHAPE);
private final Mapper.Builder<?> stringBuilder;
private final String generatedValue;
private final String mapperName;

public Builder(String name, String generatedValue, String mapperName) {
super(name, new FieldType());
this.builder = this;
super(name);
this.stringBuilder = new TextFieldMapper.Builder(name).store(false);
this.generatedValue = generatedValue;
this.mapperName = mapperName;
}

public Builder string(Mapper.Builder content) {
this.stringBuilder = content;
return this;
@Override
protected List<Parameter<?>> getParameters() {
return Collections.emptyList();
}

@Override
Expand All @@ -85,38 +79,19 @@ public ExternalMapper build(BuilderContext context) {
BinaryFieldMapper binMapper = binBuilder.build(context);
BooleanFieldMapper boolMapper = boolBuilder.build(context);
GeoPointFieldMapper pointMapper = (GeoPointFieldMapper) latLonPointBuilder.build(context);
AbstractShapeGeometryFieldMapper shapeMapper = (context.indexCreatedVersion().before(Version.V_6_6_0))
AbstractShapeGeometryFieldMapper<?, ?> shapeMapper = (context.indexCreatedVersion().before(Version.V_6_6_0))
? legacyShapeBuilder.build(context)
: shapeBuilder.build(context);
FieldMapper stringMapper = (FieldMapper)stringBuilder.build(context);
context.path().remove();

return new ExternalMapper(name, buildFullName(context), fieldType, generatedValue, mapperName, binMapper, boolMapper,
pointMapper, shapeMapper, stringMapper, multiFieldsBuilder.build(this, context), copyTo, true);
}

@Override
public Builder index(boolean index) {
throw new UnsupportedOperationException();
return new ExternalMapper(name, buildFullName(context), generatedValue, mapperName, binMapper, boolMapper,
pointMapper, shapeMapper, stringMapper, multiFieldsBuilder.build(this, context), copyTo.build());
}
}

public static class TypeParser implements Mapper.TypeParser {

private String generatedValue;
private String mapperName;

TypeParser(String mapperName, String generatedValue) {
this.mapperName = mapperName;
this.generatedValue = generatedValue;
}

@Override
public Mapper.Builder<?> parse(String name, Map<String, Object> node, ParserContext parserContext) throws MapperParsingException {
ExternalMapper.Builder builder = new ExternalMapper.Builder(name, generatedValue, mapperName);
parseField(builder, name, node, parserContext);
return builder;
}
public static TypeParser parser(String mapperName, String generatedValue) {
return new TypeParser((n, c) -> new Builder(n, generatedValue, mapperName));
}

static class ExternalFieldType extends TermBasedFieldType {
Expand All @@ -134,18 +109,18 @@ public String typeName() {
private final String generatedValue;
private final String mapperName;

private BinaryFieldMapper binMapper;
private BooleanFieldMapper boolMapper;
private GeoPointFieldMapper pointMapper;
private AbstractShapeGeometryFieldMapper shapeMapper;
private FieldMapper stringMapper;
private final BinaryFieldMapper binMapper;
private final BooleanFieldMapper boolMapper;
private final GeoPointFieldMapper pointMapper;
private final AbstractShapeGeometryFieldMapper<?, ?> shapeMapper;
private final FieldMapper stringMapper;

public ExternalMapper(String simpleName, String contextName, FieldType fieldType,
public ExternalMapper(String simpleName, String contextName,
String generatedValue, String mapperName,
BinaryFieldMapper binMapper, BooleanFieldMapper boolMapper, GeoPointFieldMapper pointMapper,
AbstractShapeGeometryFieldMapper shapeMapper, FieldMapper stringMapper,
MultiFields multiFields, CopyTo copyTo, boolean indexed) {
super(simpleName, fieldType, new ExternalFieldType(contextName, indexed, fieldType.stored(), false), multiFields, copyTo);
AbstractShapeGeometryFieldMapper<?, ?> shapeMapper, FieldMapper stringMapper,
MultiFields multiFields, CopyTo copyTo) {
super(simpleName, new ExternalFieldType(contextName, true, true, false), multiFields, copyTo);
this.generatedValue = generatedValue;
this.mapperName = mapperName;
this.binMapper = binMapper;
Expand All @@ -163,8 +138,8 @@ public void parse(ParseContext context) throws IOException {
boolMapper.parse(context.createExternalValueContext(true));

// Let's add a Dummy Point
Double lat = 42.0;
Double lng = 51.0;
double lat = 42.0;
double lng = 51.0;
ArrayList<GeoPoint> points = new ArrayList<>();
points.add(new GeoPoint(lat, lng));
pointMapper.parse(context.createExternalValueContext(points));
Expand All @@ -186,7 +161,7 @@ public void parse(ParseContext context) throws IOException {
}

@Override
protected void parseCreateField(ParseContext context) throws IOException {
protected void parseCreateField(ParseContext context) {
throw new UnsupportedOperationException();
}

Expand All @@ -206,17 +181,8 @@ public Iterator<Mapper> iterator() {
}

@Override
protected void mergeOptions(FieldMapper other, List<String> conflicts) {

}

@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject(simpleName());
builder.field("type", mapperName);
multiFields.toXContent(builder, params);
builder.endObject();
return builder;
public ParametrizedFieldMapper.Builder getMergeBuilder() {
return new Builder(simpleName(), generatedValue, mapperName);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ public class ExternalMapperPlugin extends Plugin implements MapperPlugin {
@Override
public Map<String, Mapper.TypeParser> getMappers() {
Map<String, Mapper.TypeParser> mappers = new HashMap<>();
mappers.put(EXTERNAL, new ExternalMapper.TypeParser(EXTERNAL, "foo"));
mappers.put(EXTERNAL_BIS, new ExternalMapper.TypeParser(EXTERNAL_BIS, "bar"));
mappers.put(EXTERNAL_UPPER, new ExternalMapper.TypeParser(EXTERNAL_UPPER, "FOO BAR"));
mappers.put(EXTERNAL, ExternalMapper.parser(EXTERNAL, "foo"));
mappers.put(EXTERNAL_BIS, ExternalMapper.parser(EXTERNAL_BIS, "bar"));
mappers.put(EXTERNAL_UPPER, ExternalMapper.parser(EXTERNAL_UPPER, "FOO BAR"));
mappers.put(FakeStringFieldMapper.CONTENT_TYPE, new FakeStringFieldMapper.TypeParser());
return Collections.unmodifiableMap(mappers);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,7 @@ public void testSourcePathsWithCopyTo() {
.build(context);

MockFieldMapper otherField = new MockFieldMapper.Builder("other_field")
.copyTo(new FieldMapper.CopyTo.Builder()
.add("field")
.build())
.copyTo("field")
.build(context);

FieldTypeLookup lookup = new FieldTypeLookup(Arrays.asList(field, otherField), emptyList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,16 @@

package org.elasticsearch.index.mapper;

import org.apache.lucene.document.FieldType;
import org.elasticsearch.Version;
import org.elasticsearch.cluster.metadata.IndexMetadata;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.search.lookup.SearchLookup;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

// this sucks how much must be overridden just do get a dummy field mapper...
public class MockFieldMapper extends FieldMapper {
public class MockFieldMapper extends ParametrizedFieldMapper {
static Settings DEFAULT_SETTINGS = Settings.builder()
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT.id)
.build();
Expand All @@ -40,15 +38,20 @@ public MockFieldMapper(String fullName) {
}

public MockFieldMapper(MappedFieldType fieldType) {
super(findSimpleName(fieldType.name()), new FieldType(), fieldType,
super(findSimpleName(fieldType.name()), fieldType,
MultiFields.empty(), new CopyTo.Builder().build());
}

public MockFieldMapper(String fullName,
MappedFieldType fieldType,
MultiFields multifields,
CopyTo copyTo) {
super(findSimpleName(fullName), new FieldType(), fieldType, multifields, copyTo);
super(findSimpleName(fullName), fieldType, multifields, copyTo);
}

@Override
public ParametrizedFieldMapper.Builder getMergeBuilder() {
return new Builder(simpleName());
}

static String findSimpleName(String fullName) {
Expand All @@ -73,32 +76,42 @@ protected String contentType() {
}

@Override
protected void parseCreateField(ParseContext context) throws IOException {
protected void parseCreateField(ParseContext context) {
}

@Override
public ValueFetcher valueFetcher(MapperService mapperService, SearchLookup searchLookup, String format) {
throw new UnsupportedOperationException();
}

@Override
protected void mergeOptions(FieldMapper other, List<String> conflicts) {

}

public static class Builder extends FieldMapper.Builder<MockFieldMapper.Builder> {
private MappedFieldType fieldType;
public static class Builder extends ParametrizedFieldMapper.Builder {
private final MappedFieldType fieldType;

protected Builder(String name) {
super(name, new FieldType());
super(name);
this.fieldType = new FakeFieldType(name);
this.builder = this;
}

@Override
protected List<Parameter<?>> getParameters() {
return Collections.emptyList();
}

public Builder addMultiField(Builder builder) {
this.multiFieldsBuilder.add(builder);
return this;
}

public Builder copyTo(String field) {
this.copyTo.add(field);
return this;
}

@Override
public MockFieldMapper build(BuilderContext context) {
MultiFields multiFields = multiFieldsBuilder.build(this, context);
return new MockFieldMapper(name(), fieldType, multiFields, copyTo);
return new MockFieldMapper(name(), fieldType, multiFields, copyTo.build());
}
}
}

0 comments on commit 4fe09b4

Please sign in to comment.