Медленно работает geo поиск


(Михаил) #1

В продолжении ранее заданного мною вопроса (Сложный поисковый запрос) Наступил на следующие грабли:
Есть большой список координат (гео точек). Надо для каждой точки найти 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 запросов в секунду (и при одном скрипте и при пяти скриптах)

Не понимаю почему так медленно работает и как ускорить ?


(Igor Motov) #2

То что вы описали действительно будет работать медленно, но я не очень понимаю, какую проблему вы пытаетесь решить, и поэтому не могу ничего в данном случае порекомендовать.


(Михаил) #3

Проблему решил уменьшением индекса с poi, выдернув из нее нужный мне регион. Но это так скажем полумера.

Хотелось бы узнать причину медленности. Когда geo_distance поиск происходит по большому индексу он работает медленно, при этом сервера практически не испытывают нагрузки. Т.е. я не уперся в железо, я уперся в сам elasticsearch .


(Igor Motov) #4

Вы не пробовали объединять несколько запросов geo_distance в один?

И вы уверены, что замедление происходит из-за поиска, а не из-за update?


(Михаил) #5

нет, не пробовал. В теории я должен получить прирост по скорости или неизвестно?

Уверен.

Странным еще выглядит то что во сколько бы потоков (экземпляров запускатора "geo_distance" поиска) я не стучался в elastic, в мониторинге эластика search rate индекса по которому происходит поиск остается одинаковым. Как будто лимит где-то стоит.


(Igor Motov) #6

А вы не могли бы hotthreads прислать для кластера во время исполнения скрипта - желательно штук 5 - для полноты картины.


(system) #7

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.