Hi Dirk,

The RPT field type can be used for distance sorting/boosting but it’s a
memory pig when used as-such so don’t do it unless you have to.  You only
have to if you have a multi-valued point field.  If you have single-valued,
use LatLonType specifically for distance sorting.

Your sample query doesn’t parse correctly for multiple reasons.  You can’t
put a query into the sort parameter as you have done it.  You have to do
sort=query($sortQuery) asc&sortQuery=…   or a slightly different equivalent
variation.  Lets say you do that… still, I don’t recommend this syntax when
you simply want distance sort — just use geodist(), as in:  sort=geodist()
asc.

If you want to use this syntax such as to sort by recipDistance, then it
would look like this (note the filter=false hint to the spatial query
parser, which otherwise is unaware it shouldn’t bother actually
search/filter):
sort=query($sortQuery) desc&sortQuery={!geofilt score=recipDistance
filter=false sfield=geometry pt=51.3,12.3 d=1.0}

If you are able to use geodist() and still find it slow, there are
alternatives involving using projected data and then with simply euclidean
calculations, sqedist():
https://wiki.apache.org/solr/FunctionQuery#sqedist_-_Squared_Euclidean_Distance

~ David Smiley
Freelance Apache Lucene/Solr Search Consultant/Developer
http://www.linkedin.com/in/davidwsmiley

On Tue, Feb 24, 2015 at 6:12 AM, <dirk.thalh...@bkg.bund.de> wrote:

> Hello,
>
> we are using solr 4.10.1. There are two cores for different use cases with
> around 20 million documents (location descriptions) per core. Each document
> has a geometry field which stores a point and a bbox field which stores a
> bounding box. Both fields are defined with:
> <fieldType name="t_geometry"
> class="solr.SpatialRecursivePrefixTreeFieldType"
>
>  
> spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
>                    geo="true" distErrPct="0.025" maxDistErr="0.00009"
> units="degrees" />
>
> I'm currently trying to add a location search (find all documents around a
> point). My intention is to add this as filter query, so that the user is
> able to do an additional keyword search. These are the query parameters so
> far:
> q=*:*&fq=typ:strasse&fq={!geofilt sfield=geometry
> pt=51.370570625523,12.369290471603 d=1.0}
> To sort the documents by their distance to the requested point, I added
> following sort parameter:
> sort={!geofilt sort=distance sfield: geometry
> pt=51.370570625523,12.369290471603 d=1.0} asc
>
> Unfortunately I'm experiencing here some major performance/memory
> problems. The first distance query on a core takes over 10 seconds. In my
> first setup the same request to the second core completely blocked the
> server and caused an OutOfMemoryError. I had to increase the memory to 16
> GB and now it seems to work for the geometry field. Anyhow the first
> request after a server restart takes some time and when I try it with the
> bbox field after a requested on the geometry field in both cores, the
> server blocks again.
>
> Can anyone explain why the distance needs so much memory? Can this be
> optimized?
>
> Kind regards,
>
> Dirk
>
>

Reply via email to