Example usage for org.apache.lucene.spatial SpatialStrategy makeRecipDistanceValueSource

List of usage examples for org.apache.lucene.spatial SpatialStrategy makeRecipDistanceValueSource

Introduction

In this page you can find the example usage for org.apache.lucene.spatial SpatialStrategy makeRecipDistanceValueSource.

Prototype

public final DoubleValuesSource makeRecipDistanceValueSource(Shape queryShape) 

Source Link

Document

Returns a ValueSource with values ranging from 1 to 0, depending inversely on the distance from #makeDistanceValueSource(org.locationtech.spatial4j.shape.Point,double) .

Usage

From source file:org.eclipse.rdf4j.sail.lucene.LuceneIndex.java

License:Open Source License

@Override
protected Iterable<? extends DocumentDistance> geoQuery(final URI geoProperty, Point p, final URI units,
        double distance, String distanceVar, Var contextVar) throws MalformedQueryException, IOException {
    double degs = GeoUnits.toDegrees(distance, units);
    final String geoField = SearchFields.getPropertyField(geoProperty);
    SpatialStrategy strategy = getSpatialStrategyMapper().apply(geoField);
    final Shape boundingCircle = strategy.getSpatialContext().makeCircle(p, degs);
    Query q = strategy.makeQuery(new SpatialArgs(SpatialOperation.Intersects, boundingCircle));
    if (contextVar != null) {
        q = addContextTerm(q, (Resource) contextVar.getValue());
    }/*from  w  w w.ja va  2  s  .  c  o  m*/

    TopDocs docs = search(
            new CustomScoreQuery(q, new FunctionQuery(strategy.makeRecipDistanceValueSource(boundingCircle))));
    final boolean requireContext = (contextVar != null && !contextVar.hasValue());
    return Iterables.transform(Arrays.asList(docs.scoreDocs), new Function<ScoreDoc, DocumentDistance>() {

        @Override
        public DocumentDistance apply(ScoreDoc doc) {
            return new LuceneDocumentDistance(doc, geoField, units, boundingCircle.getCenter(), requireContext,
                    LuceneIndex.this);
        }
    });
}