package com.spatial4j.demo.app;
import org.apache.lucene.spatial.query.SpatialOperation;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
import java.io.Serializable;
public class Query implements Serializable
{
public String fq;
public String source ="(all)";
public String field = "geohash";
public SpatialOperation op = SpatialOperation.Intersects;
public String geo;
public Boolean score;
public Double distErrPct;
public String sort;
public SolrParams toSolrQuery( int rows )
{
SolrQuery params = new SolrQuery();
String q = "";
boolean hasGeo = (geo != null && geo.length() > 0);
if( hasGeo ) {
if (Boolean.TRUE.equals(score)) {
q += "{! score=distance}";
}
q += field + ":\""+op.toString()+"("+geo+")";
if( distErrPct != null ) {
q += " distErrPct=" + distErrPct;
}
q += '"';
}
else {
q = "*:*";
}
if( source != null && !(source.startsWith( "(" )) ) {
params.addFilterQuery( "source:"+source );
}
if( fq != null ) {
params.addFilterQuery( fq );
}
// Set sort
if( sort != null ) {
params.set( CommonParams.SORT, sort );
}
params.setQuery( q );
params.setRows( rows );
params.setFields( "id,name,source,score" );
return params;
}
}