Hi team,

I am using Lucene 6.6.2, Spatial4j 0.7, lucene-spatial-extras 6.6.2. I am
trying to create a Spatial Query string for a given longitude, latitude &
radius in miles.

The query string generated using SpatialHelper (code as attached ) for
long: -122.8515139 & lat: 45.5099231 in .25 miles radius  is as follow :

#(+location__x:[-122.85667708964212 TO -122.84635071035788]
+location__y:[45.50630481040378 TO 45.51354138959622])
#frange(DistanceValueSource(PointVectorStrategy field:location
ctx=SpatialContext.GEO, Pt(x=-122.8515139,y=45.5099231))):[0.0 TO
0.00361828959621958]

My lucene index is as follows:
create lucene index --name=myLuceneIndex --region=stations --field=title
--analyzer=org.apache.lucene.analysis.en.EnglishAnalyzer

I get error
Syntax Error, cannot parse
ConstantScore(#(+location__x:[-122.85667708964212 TO -122.84635071035788]
+location__y:[45.50630481040378 TO 45.51354138959622])
#frange(DistanceValueSource(PointVectorStrategy field:location
ctx=SpatialContext.GEO, Pt(x=-122.8515139,y=45.5099231))):[0.0 TO
0.00361828959621958]):

What am I doing wrong ?

Regards,
Aj
package com.lbc.biketobuy.domain.model.ebaybike.lucene.helper;

import org.apache.lucene.document.Field;
import org.apache.lucene.search.Query;
import org.apache.lucene.spatial.query.SpatialArgs;
import org.apache.lucene.spatial.query.SpatialOperation;
import org.apache.lucene.spatial.vector.PointVectorStrategy;
import org.locationtech.spatial4j.context.SpatialContext;
import org.locationtech.spatial4j.distance.DistanceUtils;
import org.locationtech.spatial4j.shape.Point;
import org.locationtech.spatial4j.shape.impl.GeoCircle;
import org.locationtech.spatial4j.shape.impl.PointImpl;

public class SpatialHelper {
  private static final SpatialContext CONTEXT = SpatialContext.GEO;
  private static final PointVectorStrategy STRATEGY =
      new PointVectorStrategy(CONTEXT, "location", PointVectorStrategy.DEFAULT_FIELDTYPE);

  /** Return a lucene query that finds all points within the given radius from the given point */
  public static Query findWithin(double longitude, double latitude, double radiusMiles) {
    double radiusDEG = DistanceUtils.dist2Degrees(radiusMiles, DistanceUtils.EARTH_MEAN_RADIUS_MI);

    // Create a query that looks for all points within a circle around the given point
    SpatialArgs args =
        new SpatialArgs(
            SpatialOperation.IsWithin,
            new GeoCircle(createPoint(longitude, latitude), radiusDEG, CONTEXT));
    return STRATEGY.makeQuery(args);
  }

  /** Return a list of fields that should be added to lucene document to index the given point */
  public static Field[] getIndexableFields(double longitude, double latitude) {
    Point point = createPoint(longitude, latitude);
    return STRATEGY.createIndexableFields(point);
  }

  private static Point createPoint(double longitude, double latitude) {
    return new PointImpl(longitude, latitude, CONTEXT);
  }
}

Reply via email to