Lucene geo空间环查询
Lucene geo spatial ring query
我想使用 Lucene 空间搜索在具有内半径和外半径的环中查找点。查询应 return 外半径内但内半径外的点。你怎么做到这一点?下面的代码是我尝试这样做的。这是正确的做法吗?
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。虽然感觉很老套。这行得通吗?有没有更好的方法?
由于您使用的是简单的圆环,您可以在 geoDist 函数上使用 frange,以达到您想要的结果。
例如。要获得半径在 2 公里到 3 公里之间的结果,您可以使用这样的东西,
fq={!frange l=2 u=3}geodist()
我想使用 Lucene 空间搜索在具有内半径和外半径的环中查找点。查询应 return 外半径内但内半径外的点。你怎么做到这一点?下面的代码是我尝试这样做的。这是正确的做法吗?
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。虽然感觉很老套。这行得通吗?有没有更好的方法?
由于您使用的是简单的圆环,您可以在 geoDist 函数上使用 frange,以达到您想要的结果。
例如。要获得半径在 2 公里到 3 公里之间的结果,您可以使用这样的东西,
fq={!frange l=2 u=3}geodist()