В продолжении ранее заданного мною вопроса (Сложный поисковый запрос) Наступил на следующие грабли:
Есть большой список координат (гео точек). Надо для каждой точки найти poi попадающие в радиус 100 метров.
Написал скриптик на баше, который циклом проходит по списку и ищет poi с помощью вот такого запроса:
найденный список poi для конкретной координаты записывается в файл (app/pois.json) и затем происходит апдейт документа в эластике (дописываю найденные poi к каждому документу)
Так вот вся эта констукция работает очень медленно. Поиск poi для 100к юзерских точек занимает почти сутки. При этом кластер у меня из можных серверов в количестве 7 нод.
И сколько бы я не запускал экземпляров своего скрипта, в мониторинге индекса содержащего poi (poi-database) search rate всегда в районе 5 запросов в секунду (и при одном скрипте и при пяти скриптах)
Не понимаю почему так медленно работает и как ускорить ?
То что вы описали действительно будет работать медленно, но я не очень понимаю, какую проблему вы пытаетесь решить, и поэтому не могу ничего в данном случае порекомендовать.
Проблему решил уменьшением индекса с poi, выдернув из нее нужный мне регион. Но это так скажем полумера.
Хотелось бы узнать причину медленности. Когда geo_distance поиск происходит по большому индексу он работает медленно, при этом сервера практически не испытывают нагрузки. Т.е. я не уперся в железо, я уперся в сам elasticsearch .
нет, не пробовал. В теории я должен получить прирост по скорости или неизвестно?
Уверен.
Странным еще выглядит то что во сколько бы потоков (экземпляров запускатора "geo_distance" поиска) я не стучался в elastic, в мониторинге эластика search rate индекса по которому происходит поиск остается одинаковым. Как будто лимит где-то стоит.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.