Geo Shape Filter

See Geo Shape Filter

Note: the geo_shape type uses Spatial4J and JTS, both of which are optional dependencies. Consequently you must add Spatial4J and JTS to your classpath in order to use this type:

<dependency>
    <groupId>com.spatial4j</groupId>
    <artifactId>spatial4j</artifactId>
    <version>0.4.1</version>                        
</dependency>

<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>                         
    <exclusions>
        <exclusion>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

check for updates in Maven Central

check for updates in Maven Central

// Import Spatial4J shapes
import com.spatial4j.core.context.SpatialContext;
import com.spatial4j.core.shape.Shape;
import com.spatial4j.core.shape.impl.RectangleImpl;

// Also import ShapeRelation
import org.elasticsearch.common.geo.ShapeRelation;
// Shape within another
FilterBuilder filter = geoShapeFilter(
        "location",                                     
        new RectangleImpl(0,10,0,10,SpatialContext.GEO) 
    )
    .relation(ShapeRelation.WITHIN);                    

field

shape

relation

// Intersect shapes
FilterBuilder filter = geoShapeFilter(
        "location",                                     
        new PointImpl(0, 0, SpatialContext.GEO)         
    )
    .relation(ShapeRelation.INTERSECTS);                

field

shape

relation

// Using pre-indexed shapes
FilterBuilder filter = geoShapeFilter(
        "location",                                     
        "New Zealand",                                  
        "countries")                                    
    .relation(ShapeRelation.DISJOINT);                  

field

indexed shape id

index type of the indexed shapes

relation