Once 6.1 is out (in a few weeks) the best option Lucene has for polygon searching is the new LatLonPoint.newPolygonQuery.
It's the fastest option (see our nightly geo benchmarks: http://home.apache.org/~mikemccand/geobench.html), the API is simple, the implementation is simple, etc. It indexes the 2D lat/lon point using Lucene's new (as of 6.0) dimensional points. Mike McCandless http://blog.mikemccandless.com On Sat, Jun 4, 2016 at 12:34 PM, Randall Tidd <r...@tidd.cc> wrote: > Hello, > > I have what I think is a relatively simple use case that I’d like to use > Lucene to solve. We have a database of 100,000’s of data points each of > which has a latitude and longitude. I’d like to index these and then be > able to search for them with an arbitrary polygon. For example I would > define an irregular polygon roughly encompassing northern San Francisco and > search for all points that are within that polygon. > > I see some examples that are close to what I need but have some > questions. For example there is this: > > > https://github.com/apache/lucene-solr/blob/branch_4x/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java > < > https://github.com/apache/lucene-solr/blob/branch_4x/lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java > > > > But 1) this is based on Lucene 4.x while the latest version is 6.x, and 2) > it searches for points within a circle, not a polygon. > > I would be happy to use Lucene 4.x if that provides the best support but > that version is getting old now and I wonder if there is better, easier > support in later versions. > > Doing some reading I see that Spatial4j and JTS provide support for > polygons, but I can’t figure out how to define a polygon that can be used > with SpatialArgs. I found > com.vividsolutions.jts.geom.GeometryFactory.createPolygon() but am not sure > how to get that into a JTS Shape which can be used with SpatialArgs. > Basically I’m getting lost in the 3 sets of API’s (Lucene, Spatial4j, and > JTS) wondering how they go together and can’t find an example. > > I have also tried parsing arguments to create a polygon like this: > > SpatialArgs args = new > SpatialArgsParser().parse("IsWithin(POLYGON-122.515193 37.781561, > -122.472924 37.809958, -122.383509 37.808795))", ctx); > > But I get "java.text.ParseException: Unknown Shape definition” from > com.spatial4j.core.io.WKTReader.parse, evidently it is not correctly using > JTS to create the polygon. JTS is on my class path so I’m not sure what is > wrong there. > > I see mention of some Solr and ElasticSearch solutions, which I believe > would just use this Lucene functionality underneath. I’d be happy to use > those if it were easier but seems like I should be able to do this with > just Lucene. > > Here is the combination of toolkits I’m trying to use: > > compile group: 'org.apache.lucene', name: 'lucene-core', version: '4.10.4' > compile group: 'org.apache.lucene', name: 'lucene-analyzers-common', > version: '4.10.4' > compile group: 'org.apache.lucene', name: 'lucene-spatial', version: > '4.10.4' > compile group: 'com.spatial4j', name: 'spatial4j', version: '0.5' > compile group: 'com.vividsolutions', name: 'jts', version: ‘1.13' > > I’ve spent more time figuring this out than I thought I’d have to and > think I must be missing something obvious, and am wondering if someone can > help me out. > > Thanks, > Randy > >