Как я могу использовать 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

Другие вопросы по тегам