我正在使用java lucene 4.3开发一个搜索引擎。 我想了解如何添加空间特征。 特别是,我想用geohash开始。 我研究了所有的在线文档。 我找到了以下参考文献:
Lucene / Solr 4 Spatial deep dive video
SpatialExample from lucene source code
我使用spatial4j以geohash格式编码lat / lng,并在索引时将字符串添加到文档的字段中,如下面的代码
String geohash = GeohashUtils.encodeLatLon(lat, lng);
doc.add(new StringField("geohash", geohash, Store.YES));
在搜索方法中我想用搜索lat / lng参数创建一个过滤器,我被困在这里
SpatialContext ctx = SpatialContext.GEO;
int maxLevels = 11;
SpatialPrefixTree grid = new GeohashPrefixTree(ctx, maxLevels);
SpatialStrategy strategy = new RecursivePrefixTreeStrategy(grid, "geohash");
...
我该怎么办? 我应该从搜索lat / lng创建geohash并创建一个与此类似的矩形吗?
String searchGeoHash = GeohashUtils.encodeLatLon(searchlat, searchlng);
Filter filter = strategy.makeFilter(new SpatialArgs(SpatialOperation.Intersects, GeohashUtils.decodeBoundary(searchGeoHash, ctx)));
我认为这是错的。在我看来,我认为我应该给出一些字符串比较查询,给出匹配精度来比较geohash字符串。
哪种方法正确?
这个问题可能与this有关,但它有所不同。
提前致谢。