Мне нужна помощь, чтобы составить запрос, чтобы определить, какие места находятся на расстоянии менее 1000 метров от некоторых контрольных точек, используя эластичный поиск. IE: Какие аптеки находятся на расстоянии менее 1000 метров от определенного пользователем набора станций метро. У меня есть значения широты и долготы.
Я нашел несколько примеров этого типа поиска наasticsearch, но все они рассматривают набор c набора контрольных точек на фильтрах (жестко закодированный лат и lng).
Добавление дополнительной информации:
GET /places
{
"places" : {
"aliases" : { },
"mappings" : {
"properties" : {
"location" : {
"type" : "geo_point"
},
"name" : {
"type" : "text"
}
}
}
}
GET /references
{
"references" : {
"aliases" : { },
"mappings" : {
"properties" : {
"location" : {
"type" : "geo_point"
},
"name" : {
"type" : "text"
}
}
}
}
Я пытаюсь создать поисковый запрос, в котором я могу выбрать документы по индексу мест на основе списка документов по индексу ссылок. В большинстве примеров просто показано, как искать документы следующим образом:
GET /places/_search
{
"query": {
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "1000m",
"pin.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
}
Значение pin.location / origin в приведенном выше примере является фиксированным, но мне нужно это на основе ссылочного индекса.
In MySQL должно быть так:
select pl.latitude, pl.longitude from places as pl
where exists (
select rf.id from references as rf where ST_Distance_Sphere(
point(pl.longitude, pl.latitude),
point(rf.longitude, rf.latitude)
) < 1000 and rf.name = "subway"
) and pl.name = "drugstore"