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 elisabeth benoit <el...@gmail.com> on 2014/07/22 09:12:00 UTC

spatial search: find result in bbox OR first result outside bbox

Hello,

I am using solr 4.2.1. I have the following use case.

I should find results inside bbox OR if there is none, first result outside
bbox within a 1000 km distance. I was wondering what is the best way to
proceed.

I was considering doing a geofilt search from the center of my bounding box
and post filtering results.

fq={!geofilt sfield=store}&pt=45.15,-93.85&d=1000

>From a performance point of view I don't think it's a good solution though,
since solr will have to calculate every document distance, then sort.

I was wondering if there was another way to do this and avoid sending more
than one request to solr.

Thanks,
Elisabeth

Re: spatial search: find result in bbox OR first result outside bbox

Posted by elisabeth benoit <el...@gmail.com>.
Thanks a lot for your answer David!

I'll check that out.

Elisabeth


2014-07-24 20:28 GMT+02:00 david.w.smiley@gmail.com <
david.w.smiley@gmail.com>:

> Hi Elisabeth,
>
> Sorry for not responding sooner; I forgot.
>
> You’re in need of some spatial nearest-neighbor code I wrote but it isn’t
> open-sourced yet.  It works on the RPT grid.
>
> Any way, you should consider doing this in two searches: the first query
> tries the bbox provided, and if that returns nothing then issue a second
> for the closest within the a 1000km distance.  The first query is
> straight-forward as documented.  The second would be close to what you gave
> in your example but sort by distance and return rows=1.  It will *not*
> compute the distance to every document, just those within the 1000km radius
> plus some grid internal grid squares *if* you use spatial RPT
> (“location_rpt” in the example schema).  But use LatLonType for optimal
> sorting performance, not RPT.
>
> With respect to doing this in one search vs two, that would involve writing
> a custom request handler.  I have a patch to make this easier:
> https://issues.apache.org/jira/browse/SOLR-5005.  If in your case there
> are
> absolutely no other filters and it’s not a distributed search (no
> sharding), then you could approach this with a custom query parser that
> generates and executes one query to know if it should return that query or
> return the fallback.
>
> Please let me know how this goes.
>
> ~ David Smiley
> Freelance Apache Lucene/Solr Search Consultant/Developer
> http://www.linkedin.com/in/davidwsmiley
>
>
> On Tue, Jul 22, 2014 at 3:12 AM, elisabeth benoit <
> elisaelisaelisa@gmail.com
> > wrote:
>
> > Hello,
> >
> > I am using solr 4.2.1. I have the following use case.
> >
> > I should find results inside bbox OR if there is none, first result
> outside
> > bbox within a 1000 km distance. I was wondering what is the best way to
> > proceed.
> >
> > I was considering doing a geofilt search from the center of my bounding
> box
> > and post filtering results.
> >
> > fq={!geofilt sfield=store}&pt=45.15,-93.85&d=1000
> >
> > From a performance point of view I don't think it's a good solution
> though,
> > since solr will have to calculate every document distance, then sort.
> >
> > I was wondering if there was another way to do this and avoid sending
> more
> > than one request to solr.
> >
> > Thanks,
> > Elisabeth
> >
>

Re: spatial search: find result in bbox OR first result outside bbox

Posted by "david.w.smiley@gmail.com" <da...@gmail.com>.
Hi Elisabeth,

Sorry for not responding sooner; I forgot.

You’re in need of some spatial nearest-neighbor code I wrote but it isn’t
open-sourced yet.  It works on the RPT grid.

Any way, you should consider doing this in two searches: the first query
tries the bbox provided, and if that returns nothing then issue a second
for the closest within the a 1000km distance.  The first query is
straight-forward as documented.  The second would be close to what you gave
in your example but sort by distance and return rows=1.  It will *not*
compute the distance to every document, just those within the 1000km radius
plus some grid internal grid squares *if* you use spatial RPT
(“location_rpt” in the example schema).  But use LatLonType for optimal
sorting performance, not RPT.

With respect to doing this in one search vs two, that would involve writing
a custom request handler.  I have a patch to make this easier:
https://issues.apache.org/jira/browse/SOLR-5005.  If in your case there are
absolutely no other filters and it’s not a distributed search (no
sharding), then you could approach this with a custom query parser that
generates and executes one query to know if it should return that query or
return the fallback.

Please let me know how this goes.

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


On Tue, Jul 22, 2014 at 3:12 AM, elisabeth benoit <elisaelisaelisa@gmail.com
> wrote:

> Hello,
>
> I am using solr 4.2.1. I have the following use case.
>
> I should find results inside bbox OR if there is none, first result outside
> bbox within a 1000 km distance. I was wondering what is the best way to
> proceed.
>
> I was considering doing a geofilt search from the center of my bounding box
> and post filtering results.
>
> fq={!geofilt sfield=store}&pt=45.15,-93.85&d=1000
>
> From a performance point of view I don't think it's a good solution though,
> since solr will have to calculate every document distance, then sort.
>
> I was wondering if there was another way to do this and avoid sending more
> than one request to solr.
>
> Thanks,
> Elisabeth
>