/** * Returns a Lucene query to match documents by distance to a center, * relying first on spatial hash to approximate the result, and then on a more * precise (but more costly) {@link DistanceQuery}. * * @param center center of the search discus * @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 org.hibernate.search.spatial.Coordinates */ public static Query buildSpatialQueryByHash(Coordinates center, double radius, String fieldName) { return buildDistanceQuery( buildSpatialHashQuery( center, radius, fieldName ), center, radius, fieldName ); }
/** * Returns a Lucene Query which relies on Hibernate Search Spatial * spatial hash indexation to find candidate documents and filter its results * in radius range by a 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 buildSpatialQueryByHash(double latitude, double longitude, double radius, String fieldName) { return SpatialQueryBuilderFromCoordinates .buildSpatialQueryByHash( 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 ); } }
SpatialQueryBuilderFromCoordinates.buildDistanceQuery( query, center, session.clear(); luceneQuery = SpatialQueryBuilderFromCoordinates.buildSpatialHashQuery( center, radius, "location" ); hibQuery = fullTextSession.createFullTextQuery( luceneQuery, POI.class ); hibQuery.setProjection( "id", "name" ); luceneQuery = SpatialQueryBuilderFromCoordinates.buildSpatialQueryByHash( center, radius, "location" ); hibQuery = fullTextSession.createFullTextQuery( luceneQuery, POI.class ); hibQuery.setProjection( "id", "name" ); luceneQuery = SpatialQueryBuilderFromCoordinates.buildDistanceQuery( center, radius, "location" ); hibQuery = fullTextSession.createFullTextQuery( luceneQuery, POI.class ); hibQuery.setProjection( "id", "name" );
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 ); } } }
/** * Returns a Lucene Query searching directly by computing distance against * all docs in the index (costly !) * * @param center center of the search discus * @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 org.hibernate.search.spatial.Coordinates */ public static Query buildDistanceQuery(Coordinates center, double radius, String fieldName) { return buildDistanceQuery( null, center, 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 ); } } }
/** * Returns a Lucene Query searching directly by computing distance against * all docs in the index (costly !) * * @param center center of the search discus * @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 org.hibernate.search.spatial.Coordinates */ public static Query buildDistanceQuery(Coordinates center, double radius, String fieldName) { return buildDistanceQuery( null, center, radius, fieldName ); }
/** * Returns a Lucene query to match documents by distance to a center, * relying first on spatial hash to approximate the result, and then on a more * precise (but more costly) {@link DistanceQuery}. * * @param center center of the search discus * @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 org.hibernate.search.spatial.Coordinates */ public static Query buildSpatialQueryByHash(Coordinates center, double radius, String fieldName) { return buildDistanceQuery( buildSpatialHashQuery( center, radius, fieldName ), center, radius, fieldName ); }
.build(); return buildDistanceQuery( boxQuery, center,
/** * Returns a Lucene Query which relies on Hibernate Search Spatial * spatial hash indexation to find candidate documents and filter its results * in radius range by a 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 buildSpatialQueryByHash(double latitude, double longitude, double radius, String fieldName) { return SpatialQueryBuilderFromCoordinates .buildSpatialQueryByHash( 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 ); } }
.build(); return buildDistanceQuery( boxQuery, center,
double radius = 50.0d; luceneQuery = SpatialQueryBuilderFromCoordinates.buildSpatialQueryByHash( center, radius, "location" ); hibQuery = fullTextSession.createFullTextQuery( luceneQuery, POI.class ); hibQuery.setProjection( "id", "name", "type" );