Коллеги, помогите разобраться:
Есть большой список координат (гео точек). Надо для каждой точки найти poi попадающие в радиус 100 метров.
Написал скриптик на баше, который циклом проходит по списку и ищет poi с помощью вот такого запроса:
curl -X GET "http://localhost:9200/poi-database/_search?filter_path=hits.hits._source&_source=poi_name,poi_type_name,location,poi_full_name&pretty=true" -H 'Content-Type: application/json' -d'
{
"from" : 0, "size" : 10000000,
"query": {
"bool": {
"should":
{
"geo_distance": {
"distance": "100m",
"location" : {
"lon" : "'${array_lon[$a]}'",
"lat" : "'${array_lat[$a]}'"
}
}
}
}
}
}
найденный список poi для конкретной координаты записывается в файл (app/pois.json) и затем происходит апдейт документа в эластике (дописываю найденные poi к каждому документу)
curl -X POST "http://localhost:9200/user_point/doc/${array_id[$a]}/_update" -H 'Content-Type: application/json' -d @app/pois.json
Так вот вся эта констукция работает очень медленно. Поиск poi для 100к юзерских точек занимает почти сутки. При этом кластер у меня из можных серверов в количестве 7 нод.
И сколько бы я не запускал экземпляров своего скрипта, в мониторинге индекса содержащего poi (poi-database) search rate всегда в районе 5 запросов в секунду (и при одном скрипте и при пяти скриптах)
Не понимаю почему так медленно работает и как ускорить ?