Гео-фильтр эластичной иерархии, но расстояние указано в документе, а не в запросе - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть записи с "xyz", желающими проехать определенное расстояние до персоны.

диапазон находится в документе, а не наоборот

как я смогу структурироватьзапрос для выполнения этого требования?

спасибо

мои записи выглядят примерно так

{
  "name": "XYZ",
  "pin": {
"name": "Bradford",
"location": {
  "lat": 51.5,
  "lon": 0.1
}
  },
  "max_travel_radius": "25km"
}

обычный запрос географического расстояния даст неверные результаты, потому что он не о том, как далеко "искатель" находится от записи

запись имеет радиуси может быть достигнуто "искателем"

1 Ответ

0 голосов
/ 28 сентября 2018

Вам необходимо создать документ с гео-формой вместо местоположения.Geo_shape, который вы должны использовать, это круг, где вы указываете местоположение человека и max_travel_distance в качестве радиуса.Пожалуйста, отметьте кружок по этому URL .Ваш входной документ может выглядеть следующим образом:

{
  "name": "XYZ",
  "pin": {
      "name": "Bradford",
     "location": {
        "type": circle, 
        "coordinates" : [101.0, 1.0],
        "radius" : "25000m"
      }
  }
}

Далее вы должны использовать запрос geo_shape , чтобы проверить, находится ли точка в форме документа, который вы создали выше.Пример запроса будет выглядеть следующим образом (вам нужно изменить его для вложенного запроса. Просто приведите пример здесь)

GET /example/_search
{
    "query":{
        "bool": {
            "must": {
                "match_all": {}
            },
            "filter": {
                "geo_shape": {
                    "location": {
                        "shape": {
                            "type": "point",
                            "coordinates" : [102.0, 2.0]
                        },
                        "relation": "contains"
                    }
                }
            }
        }
    }
}
...