如何在lucene下使用geohash创建过滤器

时间:2013-06-29 20:17:53

标签: java lucene geohashing

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

outdated IBM article

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有关,但它有所不同。

提前致谢。

0 个答案:

没有答案