Guido, The field type solr.SpatialRecursivePrefixTreeFieldType can only participate in distance reporting for indexed points, not other shapes. In fact, I recommend not attempting to get the distance if the field isn't purely indexed points, as it may get confused if it seems some small shapes. For your use-case, you should index an additional solr.SpatialRecursivePrefixTreeFieldType field just for the points. You could do this external to Solr, or you could write a Solr UpdateRequestProcessor that parses the shape in order to then call getCenter(), and put those points in the other field.
~ David On 4/16/13 7:23 AM, "Guido Medina" <guido.med...@temetra.com> wrote: >Hi, > >I got everything in place, my polygons are indexing properly, I played a >bit with LSP which helped me a lot, now, I have JTS 1.13 inside >solr.war; here is my challenge: > >I have big polygon (A) which contains smaller polygons (B and C), B and >C have some intersection, so if I search for a coordinate inside the 3, >I would like to sort by the distance to the centre of the polygons that >match the criteria. > >As example, let's say dot B is on the centre of B, dot C is at the >centre of C and dot A is at the intersection of B and C which happens to >be the centre of A, so for dot A should be polygon A first and so on. I >could compute with the distances using the result but since Solr is >doing a heavy load already, why not just include the sort in it. > >Here is my field type definition: > > <!-- Spatial field type --> > <fieldType name="location_rpt" >class="solr.SpatialRecursivePrefixTreeFieldType" >spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFac >tory" > units="degrees"/> > > >Field definition: > > <!-- JTS spatial polygon field --> > <field name="geopolygon" type="location_rpt" indexed="true" >stored="false" required="false" multiValued="true"/> > > >I'm using the Solr admin UI first to shape my query and then moving to >our web app which uses solrj, here is the XML form of my result which >includes the query I'm making, which scores all distances to 1.0 (Not >what I want): > >|<?xml version="1.0" encoding="UTF-8"?> ><response> > ><lst name="responseHeader"> > <int name="status">0</int> > <int name="QTime">9</int> > <lst name="params"> > <str name="fl">id,score</str> > <str name="sort">score asc</str> > <str name="indent">true</str> > <str name="q">*:*</str> > <str name="_">1366111120720</str> > <str name="wt">xml</str> > <str name="fq">{!score=distance}geopolygon:"Intersects(-6.271906 >53.379284)"</str> > </lst> ></lst> ><result name="response" numFound="3" start="0" maxScore="1.0"> > <doc> > <str name="id">uid13972</str> > <float name="score">1.0</float></doc> > <doc> > <str name="id">uid13979</str> > <float name="score">1.0</float></doc> > <doc> > <str name="id">uid13974</str> > <float name="score">1.0</float></doc> ></result> ></response>| > > >Thanks for all responses, > >Guido.