Lucene geo空间环查询

时间:2017-11-21 05:51:09

标签: solr lucene geospatial spatial spatial-query

我想使用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。虽然感觉很酷。这会有用吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

由于你在你的情况下使用简单的圆环,你可以在geoDist函数上使用frange,以达到你想要的结果。

例如。要获得半径2km到3km之间的结果,你可以使用这样的东西,

    fq={!frange l=2 u=3}geodist()