lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Willnauer <simon.willna...@googlemail.com>
Subject Re: Does spatial lucene in lucene 3.0 work at all?
Date Fri, 05 Feb 2010 18:59:53 GMT
Try this:
    DistanceQueryBuilder dq = new DistanceQueryBuilder(39.9260, -75.1566, 1d,
        LAT_FIELD, LON_FIELD,TIER_PREFIX_FIELD, true);

instead of
    DistanceQueryBuilder dq = new DistanceQueryBuilder(39.9260, -75.1566, 1d,
        LAT_FIELD, LON_FIELD, true);

you are usesing the wrong ctor, the one with 2 strings is String
geoHashFieldPrefix, String tierFieldPrefix, you are looking for
String lat_field, String lon_field, String tierFieldPrefix


simon
On Fri, Feb 5, 2010 at 6:48 PM, Liang, Jay (YBUSA-KOP)
<Jay.Liang@yellowbook.com> wrote:
> Hi, all
>
>
>
> I was trying to add some distance search capabilities to an index using
> spatial lucene in lucene 3.0 but could not get it working. So I wrote a very
> small test example to try out the api. However, even the simplest test case
> would NOT function correctly either.
>
>
>
> Anyone has ideas/experiences about spatial lucene in 3.0?
>
>
>
> My codes
>
>
>
> //tested using core-3.0, misc-3.0, spatial-3.0, the following code snippet
> does not return any results but it should
>
>
>
> import java.io.IOException;
>
>
>
> import org.apache.lucene.analysis.WhitespaceAnalyzer;
>
> import org.apache.lucene.document.Document;
>
> import org.apache.lucene.document.Field;
>
> import org.apache.lucene.document.Field.Index;
>
> import org.apache.lucene.document.Field.Store;
>
> import org.apache.lucene.index.IndexWriter;
>
> import org.apache.lucene.index.Term;
>
> import org.apache.lucene.index.IndexWriter.MaxFieldLength;
>
> import org.apache.lucene.search.IndexSearcher;
>
> import org.apache.lucene.search.Query;
>
> import org.apache.lucene.search.TermQuery;
>
> import org.apache.lucene.search.TopDocs;
>
> import org.apache.lucene.spatial.tier.DistanceQueryBuilder;
>
> import org.apache.lucene.spatial.tier.projections.CartesianTierPlotter;
>
> import org.apache.lucene.spatial.tier.projections.IProjector;
>
> import org.apache.lucene.spatial.tier.projections.SinusoidalProjector;
>
> import org.apache.lucene.store.Directory;
>
> import org.apache.lucene.store.RAMDirectory;
>
> import org.apache.lucene.util.NumericUtils;
>
>
>
> public class SpatialLuceneExample{
>
>     private static final String LAT_FIELD = "lat", LON_FIELD = "lon",
> TIER_PREFIX_FIELD = "_localTier";
>
>
>
>     private double maxMiles = 25, minMiles = 1; // anything lower than 1
> mile will just give tier 15
>
>     // see
> http://www.nsshutdown.com/projects/lucene/whitepaper/locallucene_v2.html
>
>     private IProjector projector = new SinusoidalProjector();
>
>     private CartesianTierPlotter ctp = new CartesianTierPlotter(0,
> projector, TIER_PREFIX_FIELD);
>
>     //startTier is 14 for 25 miles, 15 for 1 miles in lucene 3.0
>
>     private int startTier = 5, endTier = 15;
>
>
>
>     /**
>
>      * Add the lat, lon, and tier box id to the document
>
>      * see
> http://www.nsshutdown.com/projects/lucene/whitepaper/locallucene_v2.html
>
>      * @param lat
>
>      * @param lon
>
>      * @param document a geo document
>
>      */
>
>     private void addSpatialLcnFields(double lat, double lon, Document
> document){
>
>         document.add(new Field(LAT_FIELD,
> NumericUtils.doubleToPrefixCoded(lat), Field.Store.YES,
> Field.Index.NOT_ANALYZED));
>
>         document.add(new Field(LON_FIELD,
> NumericUtils.doubleToPrefixCoded(lon), Field.Store.YES,
> Field.Index.NOT_ANALYZED));
>
>
>
>         for(int tier = startTier ; tier<= endTier; tier++){
>
>             CartesianTierPlotter ctp = new CartesianTierPlotter(tier,
> projector, TIER_PREFIX_FIELD);
>
>             double boxId = ctp.getTierBoxId(lat, lon);
>
>             document.add(new Field(ctp.getTierFieldName(),
> NumericUtils.doubleToPrefixCoded(boxId), Field.Store.YES,
> Field.Index.NOT_ANALYZED_NO_NORMS));
>
>         }
>
>     }
>
>
>
>
>
>     private void addLocation(IndexWriter writer, String name, double lat,
> double lon) throws IOException{
>
>       Document doc = new Document();
>
>       doc.add(new Field("name", name, Field.Store.YES, Index.ANALYZED));
>
>       doc.add(new Field("metafile", "doc", Store.YES, Index.ANALYZED));
>
>       addSpatialLcnFields(lat, lon, doc);
>
>       writer.addDocument(doc);
>
>     }
>
>
>
>       public static void main(String[] args) throws Exception{
>
>             SpatialLuceneExample sle = new SpatialLuceneExample();
>
>             Directory dir = new RAMDirectory();
>
>             IndexWriter writer = new IndexWriter(dir, new
> WhitespaceAnalyzer(), MaxFieldLength.UNLIMITED);
>
>
>
>             sle.addLocation(writer, "test", 39.9260, -75.1566);
>
>
>
>             writer.commit();
>
>             writer.close();
>
>
>
>             IndexSearcher searcher = new IndexSearcher(dir);
>
>             DistanceQueryBuilder dq = new DistanceQueryBuilder(39.9260,
> -75.1566, 10d, LAT_FIELD, LON_FIELD, true);
>
>
>
>             Query tq = new TermQuery(new Term("metafile", "doc"));
>
>             TopDocs hits = searcher.search(tq, dq.getFilter(), 10);
>
>             for(int i =0; i<hits.totalHits; i++){
>
>                   Document doc = searcher.doc(hits.scoreDocs[i].doc);
>
>                   System.out.println(doc.get("name"));
>
>             }
>
>       }
>
> }

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org


Mime
View raw message