2017-11-21 6 views
0

Lucene空間検索を使用して、内径と外径のリング内の点を検索します。クエリは、内側の半径の外側にある外側の半径の内側の点を返す必要があります。これどうやってやるの?以下のコードはこれを行う私の試みです。これは正しい方法ですか?Lucene geo空間リングクエリ

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

クエリとフィルタを基本的に使用して、2つの空間操作のANDを実現します。しかし、ハッキーな感じ。これは使えますか?より良い方法がありますか?

答えて

1

あなたのケースでは単純な円形のリングを使用しているので、geoDist関数でfrangeを使用すると、目的の結果が得られます。

たとえば、半径を2kmと3kmの間で結果を得るには、このようなユーザーを使用できます。

fq={!frange l=2 u=3}geodist() 
関連する問題