You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Grondin Luc <lu...@umontreal.ca> on 2017/09/12 21:07:45 UTC

Sorting by distance resources with WKT polygon data

Hello,

I am having difficulties with sorting by distance resources indexed with WKT geolocation data. I have tried different field configurations and query parameters and I did not get working results.

I am using SOLR 6.6 and JTS-core 1.14. My test sample includes resources with point coordinates plus one associated with a polygon. I tried using both fieldtypes "solr.SpatialRecursivePrefixTreeFieldType" and "solr.RptWithGeometrySpatialField". In both cases, I get good results if I do not care about sorting. The problem arises when I include sorting.

With SpatialRecursivePrefixTreeFieldType:

The best request I used, based on the documentation I could find, was:
select?fl=*,score&q={!geofilt%20sfield=PositionGeo%20pt=45.52,-73.53%20d=10%20score=distance}&sort=score%20asc

The distance appears to be correctly evaluated for resources indexed with point coordinates. However, it is wrong for the resource with a polygon

<result name="response" numFound="5" start="0" maxScore="20015.115">
  <doc><float name="score">2.3913236</float></doc>
  <doc><float name="score">4.3242383</float></doc>
  <doc><float name="score">4.671504</float></doc>
  <doc><float name="score">4.806902</float></doc>
  <doc><float name="score">20015.115</float></doc>
</result>

(Please note that I have verified the polygon externally and it is correct)

With solr.RptWithGeometrySpatialField:

I get an exception triggered by the presence of « score=distance » in the request « q={!geofilt%20sfield=PositionGeo%20pt=45.52,-73.53%20d=10%20score=distance} »

java.lang.UnsupportedOperationException
                at org.apache.lucene.spatial.composite.CompositeSpatialStrategy.makeDistanceValueSource(CompositeSpatialStrategy.java:92)
                at org.apache.solr.schema.AbstractSpatialFieldType.getValueSourceFromSpatialArgs(AbstractSpatialFieldType.java:412)
                at org.apache.solr.schema.AbstractSpatialFieldType.getQueryFromSpatialArgs(AbstractSpatialFieldType.java:359)
                at org.apache.solr.schema.AbstractSpatialFieldType.createSpatialQuery(AbstractSpatialFieldType.java:308)
                at org.apache.solr.search.SpatialFilterQParser.parse(SpatialFilterQParser.java:80)

From there, I am rather stuck with no ideas on how to resolve these problems. So advises in that regards would be much appreciated. I can provide more details if necessary.

Thank you in advance,


 ---
  Luc Grondin
  Analyste en gestion de l'information numérique
  Centre d'expertise numérique pour la recherche - Université de Montréal
  téléphone: 514-343-6111 p. 3988  --  luc.grondin@umontreal.ca<ma...@umontreal.ca>


Re: Sorting by distance resources with WKT polygon data

Posted by David Smiley <da...@gmail.com>.
Hello,

Sorry for the belated response.

Solr only supports sorting from point or rectangles in the index.  For
rectangles use BBoxField.  For points, ideally use the new
LatLonPointSpatialField; failing that use LatLonType.  You can use RPT for
point data but I don't recommend sorting with it; use one of the others
just mentioned.

~ David

On Tue, Sep 12, 2017 at 5:09 PM Grondin Luc <lu...@umontreal.ca>
wrote:

> Hello,
>
> I am having difficulties with sorting by distance resources indexed with
> WKT geolocation data. I have tried different field configurations and query
> parameters and I did not get working results.
>
> I am using SOLR 6.6 and JTS-core 1.14. My test sample includes resources
> with point coordinates plus one associated with a polygon. I tried using
> both fieldtypes "solr.SpatialRecursivePrefixTreeFieldType" and
> "solr.RptWithGeometrySpatialField". In both cases, I get good results if I
> do not care about sorting. The problem arises when I include sorting.
>
> With SpatialRecursivePrefixTreeFieldType:
>
> The best request I used, based on the documentation I could find, was:
>
> select?fl=*,score&q={!geofilt%20sfield=PositionGeo%20pt=45.52,-73.53%20d=10%20score=distance}&sort=score%20asc
>
> The distance appears to be correctly evaluated for resources indexed with
> point coordinates. However, it is wrong for the resource with a polygon
>
> <result name="response" numFound="5" start="0" maxScore="20015.115">
>   <doc><float name="score">2.3913236</float></doc>
>   <doc><float name="score">4.3242383</float></doc>
>   <doc><float name="score">4.671504</float></doc>
>   <doc><float name="score">4.806902</float></doc>
>   <doc><float name="score">20015.115</float></doc>
> </result>
>
> (Please note that I have verified the polygon externally and it is correct)
>
> With solr.RptWithGeometrySpatialField:
>
> I get an exception triggered by the presence of « score=distance » in the
> request «
> q={!geofilt%20sfield=PositionGeo%20pt=45.52,-73.53%20d=10%20score=distance}
> »
>
> java.lang.UnsupportedOperationException
>                 at
> org.apache.lucene.spatial.composite.CompositeSpatialStrategy.makeDistanceValueSource(CompositeSpatialStrategy.java:92)
>                 at
> org.apache.solr.schema.AbstractSpatialFieldType.getValueSourceFromSpatialArgs(AbstractSpatialFieldType.java:412)
>                 at
> org.apache.solr.schema.AbstractSpatialFieldType.getQueryFromSpatialArgs(AbstractSpatialFieldType.java:359)
>                 at
> org.apache.solr.schema.AbstractSpatialFieldType.createSpatialQuery(AbstractSpatialFieldType.java:308)
>                 at
> org.apache.solr.search.SpatialFilterQParser.parse(SpatialFilterQParser.java:80)
>
> From there, I am rather stuck with no ideas on how to resolve these
> problems. So advises in that regards would be much appreciated. I can
> provide more details if necessary.
>
> Thank you in advance,
>
>
>  ---
>   Luc Grondin
>   Analyste en gestion de l'information numérique
>   Centre d'expertise numérique pour la recherche - Université de Montréal
>   téléphone: 514-343-6111 <(514)%20343-6111> p. 3988  --
> luc.grondin@umontreal.ca<ma...@umontreal.ca>
>
> --
Lucene/Solr Search Committer, Consultant, Developer, Author, Speaker
LinkedIn: http://linkedin.com/in/davidwsmiley | Book:
http://www.solrenterprisesearchserver.com

Re: Sorting by distance resources with WKT polygon data

Posted by Ere Maijala <er...@helsinki.fi>.
Hi,

our strategy is to have a separate center coordinate field that we use 
for sorting. This has the additional benefit that it's possible to have 
the indexed center point differ from the polygon's centroid, which can 
be useful e.g. with cities, where the city center can be quite a bit 
offset from the centroid.

--Ere

Grondin Luc kirjoitti 13.9.2017 klo 0.07:
> Hello,
> 
> I am having difficulties with sorting by distance resources indexed with WKT geolocation data. I have tried different field configurations and query parameters and I did not get working results.
> 
> I am using SOLR 6.6 and JTS-core 1.14. My test sample includes resources with point coordinates plus one associated with a polygon. I tried using both fieldtypes "solr.SpatialRecursivePrefixTreeFieldType" and "solr.RptWithGeometrySpatialField". In both cases, I get good results if I do not care about sorting. The problem arises when I include sorting.
> 
> With SpatialRecursivePrefixTreeFieldType:
> 
> The best request I used, based on the documentation I could find, was:
> select?fl=*,score&q={!geofilt%20sfield=PositionGeo%20pt=45.52,-73.53%20d=10%20score=distance}&sort=score%20asc
> 
> The distance appears to be correctly evaluated for resources indexed with point coordinates. However, it is wrong for the resource with a polygon
> 
> <result name="response" numFound="5" start="0" maxScore="20015.115">
>    <doc><float name="score">2.3913236</float></doc>
>    <doc><float name="score">4.3242383</float></doc>
>    <doc><float name="score">4.671504</float></doc>
>    <doc><float name="score">4.806902</float></doc>
>    <doc><float name="score">20015.115</float></doc>
> </result>
> 
> (Please note that I have verified the polygon externally and it is correct)
> 
> With solr.RptWithGeometrySpatialField:
> 
> I get an exception triggered by the presence of « score=distance » in the request « q={!geofilt%20sfield=PositionGeo%20pt=45.52,-73.53%20d=10%20score=distance} »
> 
> java.lang.UnsupportedOperationException
>                  at org.apache.lucene.spatial.composite.CompositeSpatialStrategy.makeDistanceValueSource(CompositeSpatialStrategy.java:92)
>                  at org.apache.solr.schema.AbstractSpatialFieldType.getValueSourceFromSpatialArgs(AbstractSpatialFieldType.java:412)
>                  at org.apache.solr.schema.AbstractSpatialFieldType.getQueryFromSpatialArgs(AbstractSpatialFieldType.java:359)
>                  at org.apache.solr.schema.AbstractSpatialFieldType.createSpatialQuery(AbstractSpatialFieldType.java:308)
>                  at org.apache.solr.search.SpatialFilterQParser.parse(SpatialFilterQParser.java:80)
> 
>  From there, I am rather stuck with no ideas on how to resolve these problems. So advises in that regards would be much appreciated. I can provide more details if necessary.
> 
> Thank you in advance,
> 
> 
>   ---
>    Luc Grondin
>    Analyste en gestion de l'information numérique
>    Centre d'expertise numérique pour la recherche - Université de Montréal
>    téléphone: 514-343-6111 p. 3988  --  luc.grondin@umontreal.ca<ma...@umontreal.ca>
> 
> 

-- 
Ere Maijala
Kansalliskirjasto / The National Library of Finland