2017-11-21 30 views
0

내부 반지름과 외부 반지름이있는 링에서 점을 찾기 위해 Lucene Spatial 검색을 사용하고 싶습니다. 쿼리는 외부 반경 내부의 점을 반환해야하지만 내부 반경 밖에 있어야합니다. 어떻게 할 수 있니? 아래 코드는이 작업을 시도한 나의 시도입니다. 이것이 올바른 방법일까요?Lucene geo spatial ring query

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);  

기본적으로 쿼리와 필터를 사용하여 두 공간 작업 간의 AND를 얻습니다. 생각 해키. 이게 효과가 있니? 더 좋은 방법이 있습니까?

답변

1

케이스에 원형 링을 사용하고 있으므로 원하는 결과를 얻으려면 geoDist 함수에 frange를 사용할 수 있습니다.

예 : 반경 2km에서 3km 사이에서 결과를 얻으려면 다음과 같이 사용자에게 문의하십시오.

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