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 {
|
} else {
|
||||||
throw new QueryShardException(context, "failed to find geo_shape field [" + fieldName + "]");
|
throw new QueryShardException(context, "failed to find geo_shape field [" + fieldName + "]");
|
||||||
}
|
}
|
||||||
}
|
} else if (fieldType.typeName().equals(GeoShapeFieldMapper.CONTENT_TYPE) == false) {
|
||||||
|
throw new QueryShardException(context,
|
||||||
// TODO: This isn't the nicest way to check this
|
"Field [" + fieldName + "] is not of type [geo_shape] but of type [" + fieldType.typeName() + "]");
|
||||||
if (!(fieldType instanceof GeoShapeFieldMapper.GeoShapeFieldType)) {
|
|
||||||
throw new QueryShardException(context, "Field [" + fieldName + "] is not a geo_shape");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final GeoShapeFieldMapper.GeoShapeFieldType shapeFieldType = (GeoShapeFieldMapper.GeoShapeFieldType) fieldType;
|
final GeoShapeFieldMapper.GeoShapeFieldType shapeFieldType = (GeoShapeFieldMapper.GeoShapeFieldType) fieldType;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
package org.elasticsearch.index.query;
|
package org.elasticsearch.index.query;
|
||||||
|
|
||||||
import com.vividsolutions.jts.geom.Coordinate;
|
import com.vividsolutions.jts.geom.Coordinate;
|
||||||
|
|
||||||
import org.apache.lucene.search.BooleanQuery;
|
import org.apache.lucene.search.BooleanQuery;
|
||||||
import org.apache.lucene.search.ConstantScoreQuery;
|
import org.apache.lucene.search.ConstantScoreQuery;
|
||||||
import org.apache.lucene.search.MatchNoDocsQuery;
|
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]"));
|
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 {
|
public void testSerializationFailsUnlessFetched() throws IOException {
|
||||||
QueryBuilder builder = doCreateTestQueryBuilder(true);
|
QueryBuilder builder = doCreateTestQueryBuilder(true);
|
||||||
QueryBuilder queryBuilder = Rewriteable.rewrite(builder, createShardContext());
|
QueryBuilder queryBuilder = Rewriteable.rewrite(builder, createShardContext());
|
||||||
|
|
Loading…
Reference in New Issue