0

我正在使用 java lucene 4.3 开发一个搜索引擎。我想了解如何添加空间功能。特别是,我想使用 geohash 来启动。我研究了所有的在线文档。我找到了以下参考资料:

过时的 IBM 文章

Lucene / Solr 4 空间深潜视频

来自 lucene 源代码的 SpatialExample

我已经使用 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 字符串。

哪个是正确的方法?

这个问题可能与有关,但有所不同。

提前致谢。

4

0 回答 0