Как я могу использовать asticsearch для поиска по специальным командам в запросе?
У меня эластичный индекс со многими документами. Документ представляет какое-то событие. У каждого события есть своя дата и геолокация.
Я хотел бы отправить такие запросы: "Некоторое событие в Лос-Анджелесе", "Некоторое событие завтра", "Некоторое событие рядом со мной"...
Как я мог построить это решение с эластичным?
1 ответ
У Elasticsearch есть несколько инструментов, чтобы сделать это просто. Например, у нас есть пин-код в определенном месте (широта, лонг), например:
{
"pin" : {
"location" : {
"lat" : 40.12,
"lon" : -71.34
}
}
}
Для поиска в диапазоне 200 км мы можем сделать запрос, подобный этому:
{
"bool" : {
"must" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"pin.location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}
Это действительно легко И для дат вы можете использовать запрос диапазона, как это:
{
"range" : {
"date" : {
"gte" : "now/d",
"lt" : "now+1d/d"
}
}
}
Для получения дополнительной информации см. Документацию https://www.elastic.co/guide/en/elasticsearch/guide/current/geoloc.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html