Use typeName() to check field type in GeoShapeQueryBuilder (#27730)
The current code contains an instanceOf check and a comment that this should eventually be changed to something else. The typeName() should return a unique name for the field type in question (geo_shape) so it can be used instead.
This commit is contained in:
parent
87f7b9c0f9
commit
87313e12ba
|
@ -341,11 +341,9 @@ public class GeoShapeQueryBuilder extends AbstractQueryBuilder<GeoShapeQueryBuil
|
|||
} else {
|
||||
throw new QueryShardException(context, "failed to find geo_shape field [" + fieldName + "]");
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: This isn't the nicest way to check this
|
||||
if (!(fieldType instanceof GeoShapeFieldMapper.GeoShapeFieldType)) {
|
||||
throw new QueryShardException(context, "Field [" + fieldName + "] is not a geo_shape");
|
||||
} else if (fieldType.typeName().equals(GeoShapeFieldMapper.CONTENT_TYPE) == false) {
|
||||
throw new QueryShardException(context,
|
||||
"Field [" + fieldName + "] is not of type [geo_shape] but of type [" + fieldType.typeName() + "]");
|
||||
}
|
||||
|
||||
final GeoShapeFieldMapper.GeoShapeFieldType shapeFieldType = (GeoShapeFieldMapper.GeoShapeFieldType) fieldType;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.elasticsearch.index.query;
|
||||
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.apache.lucene.search.ConstantScoreQuery;
|
||||
import org.apache.lucene.search.MatchNoDocsQuery;
|
||||
|
@ -258,6 +259,14 @@ public class GeoShapeQueryBuilderTests extends AbstractQueryTestCase<GeoShapeQue
|
|||
assertThat(e.getMessage(), containsString("failed to find geo_shape field [unmapped]"));
|
||||
}
|
||||
|
||||
public void testWrongFieldType() throws IOException {
|
||||
ShapeType shapeType = ShapeType.randomType(random());
|
||||
ShapeBuilder shape = RandomShapeGenerator.createShapeWithin(random(), null, shapeType);
|
||||
final GeoShapeQueryBuilder queryBuilder = new GeoShapeQueryBuilder(STRING_FIELD_NAME, shape);
|
||||
QueryShardException e = expectThrows(QueryShardException.class, () -> queryBuilder.toQuery(createShardContext()));
|
||||
assertThat(e.getMessage(), containsString("Field [mapped_string] is not of type [geo_shape] but of type [text]"));
|
||||
}
|
||||
|
||||
public void testSerializationFailsUnlessFetched() throws IOException {
|
||||
QueryBuilder builder = doCreateTestQueryBuilder(true);
|
||||
QueryBuilder queryBuilder = Rewriteable.rewrite(builder, createShardContext());
|
||||
|
|
Loading…
Reference in New Issue