Conditional query for geo location lookup


(utkarsh2012) #1

I have a usecase where I have 2 types of locations (i.e. with geo_point
type):

  1. Location 1: Has a lat/lon with say radius=90 miles (it will vary) and
    type=outgoing
  2. Location 2: Has a lat/lon with no radius and type=incoming

Now, when a query comes in with: lat/lon and radius=20, I expect this to
happen:

  1. Simple geo lookup: If the input lat/lon is within 20miles of location 2,
    return location 2.
  2. If input lat/lon is within 90 miles of Location 1, return location 1 too
    in the result. If you notice, I want input radius to be overwritten by the
    saved radius for a specific type of location.

This is what I have come up with using script:
{
"query": {
"match_all": {}
},
"filter": {
"script": {
"script": "!doc['geopoint'].empty && doc['coverage_type'].value ==
'outgoing' ? doc['geopoint'].distanceInMiles(37,-121) <=
doc['radius'].value : doc['geopoint'].distanceInMiles(37,-121) <= 20"
}
}
}
Where "37,-121" is input lat/lon and 20 is the input radius.

What do you think?

--
Thanks,
-Utkarsh

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CADjjot-aRjyyuHCfvPa2BrSFG6%3DPhqAcG1AwoszQF3dazXBHxQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


(utkarsh2012) #2

Bumping this one up. Any advice on the query?

On Tue, May 13, 2014 at 6:17 PM, Utkarsh Sengar utkarsh2012@gmail.comwrote:

I have a usecase where I have 2 types of locations (i.e. with geo_point
type):

  1. Location 1: Has a lat/lon with say radius=90 miles (it will vary) and
    type=outgoing
  2. Location 2: Has a lat/lon with no radius and type=incoming

Now, when a query comes in with: lat/lon and radius=20, I expect this to
happen:

  1. Simple geo lookup: If the input lat/lon is within 20miles of location
    2, return location 2.
  2. If input lat/lon is within 90 miles of Location 1, return location 1
    too in the result. If you notice, I want input radius to be overwritten by
    the saved radius for a specific type of location.

This is what I have come up with using script:
{
"query": {
"match_all": {}
},
"filter": {
"script": {
"script": "!doc['geopoint'].empty && doc['coverage_type'].value ==
'outgoing' ? doc['geopoint'].distanceInMiles(37,-121) <=
doc['radius'].value : doc['geopoint'].distanceInMiles(37,-121) <= 20"
}
}
}
Where "37,-121" is input lat/lon and 20 is the input radius.

What do you think?

--
Thanks,
-Utkarsh

--
Thanks,
-Utkarsh

--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CADjjot9Qxaq2Zd%2BdsCcX3YjJ4%3DKhAQ_fzv0BsUva5R-KWcSKOg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


(system) #3