/** * Returns a Lucene Query which relies on Hibernate Search Spatial * double range indexation to filter document at radius and filter its results * by a fine DistanceFilter * * @param latitude WGS84 latitude of the center of the search * @param longitude WGS84 longitude of the center of the search * @param radius distance max to center in km * @param fieldName name of the Lucene Field implementing Coordinates * * @return Lucene Query to be used in a search * * @see Query * @see Coordinates */ public static Query buildSpatialQueryByRange(double latitude, double longitude, double radius, String fieldName) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByRange( Point.fromDegrees( latitude, longitude ), radius, fieldName ); } }
/** * Returns a Lucene Query which relies on Hibernate Search Spatial * double range indexation to filter document at radius and filter its results * by a fine DistanceFilter * * @param latitude WGS84 latitude of the center of the search * @param longitude WGS84 longitude of the center of the search * @param radius distance max to center in km * @param fieldName name of the Lucene Field implementing Coordinates * * @return Lucene Query to be used in a search * * @see Query * @see Coordinates */ public static Query buildSpatialQueryByRange(double latitude, double longitude, double radius, String fieldName) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByRange( Point.fromDegrees( latitude, longitude ), radius, fieldName ); } }
private Query createSpatialQuery() { final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); //FIXME that will have to change probably but today, if someone uses latitude / longitude // we use boolean style spatial queries // and on coordinates field, use spatial hash query // FIXME in the future we will likely react to some state stored in SpatialFieldBridge (for the indexing strategy) String coordinatesField = spatialContext.getCoordinatesField(); FieldBridge fieldBridge = documentBuilder.getBridge( coordinatesField ); if ( fieldBridge instanceof SpatialFieldBridgeByHash ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByHash( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), // always in KM so far, no need to convert coordinatesField ); } else if ( fieldBridge instanceof SpatialFieldBridgeByRange ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByRange( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), //always in KM so far, no need to convert coordinatesField ); } else { throw LOG.targetedFieldNotSpatial( queryContext.getEntityType().getName(), coordinatesField ); } } }
private Query createSpatialQuery() { final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); //FIXME that will have to change probably but today, if someone uses latitude / longitude // we use boolean style spatial queries // and on coordinates field, use spatial hash query // FIXME in the future we will likely react to some state stored in SpatialFieldBridge (for the indexing strategy) String coordinatesField = spatialContext.getCoordinatesField(); FieldBridge fieldBridge = documentBuilder.getBridge( coordinatesField ); if ( fieldBridge instanceof SpatialFieldBridgeByHash ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByHash( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), // always in KM so far, no need to convert coordinatesField ); } else if ( fieldBridge instanceof SpatialFieldBridgeByRange ) { return SpatialQueryBuilderFromCoordinates.buildSpatialQueryByRange( spatialContext.getCoordinates(), spatialContext.getRadiusDistance(), //always in KM so far, no need to convert coordinatesField ); } else { throw LOG.targetedFieldNotSpatial( queryContext.getEntityType().getName(), coordinatesField ); } } }