我想使用Lucene Spatial搜索来查找具有内半径和外半径的环中的点。查询应该返回外半径内的点,但是在内半径之外。你怎么做到这一点?下面的代码是我尝试这样做的。这是正确的方法吗?
SpatialContext ctx = SpatialContext.GEO;
Circle innerCircle = ctx.makeCircle(lng, Lat, innerRadius);
SpatialArgs innerArgs = new SpatialArgs(SpatialOperation.IsDisjointTo, innerCircle);
Filter filter = strategy.makeFilter(innerArgs);
Circle outerCircle = ctx.makeCircle(lng, Lat, outerRadius);
SpatialArgs outerArgs = new SpatialArgs(SpatialOperation.Intersects, outerCircle);
Query query = strategy.makeQuery(outerArgs);
IndexSearcher searcher = new IndexSearcher(indexReader);
TopDocs docs = searcher.search(query, filter, 50);
基本上使用Query和Filter在两个空间操作之间实现AND。虽然感觉很酷。这会有用吗?还有更好的方法吗?
答案 0 :(得分:1)
由于你在你的情况下使用简单的圆环,你可以在geoDist函数上使用frange,以达到你想要的结果。
例如。要获得半径2km到3km之间的结果,你可以使用这样的东西,
fq={!frange l=2 u=3}geodist()