我正在使用 java lucene 4.3 开发一个搜索引擎。我想了解如何添加空间功能。特别是,我想使用 geohash 来启动。我研究了所有的在线文档。我找到了以下参考资料:
我已经使用 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 字符串。
哪个是正确的方法?
这个问题可能与此有关,但有所不同。
提前致谢。