Pull to refresh

Comments 17

1. Для фиас использование Solr действительно оправдано? Насколько быстрее ищет? У меня она лежит в pg покрытая триграмм индексами по текстовому полю, поиск+иерархия по идентификатором родителей и работает таки довольно шустро.

2. Показываете хинты только по началу первого слова или по началу каждого?

3. По улицам тоже есть хинт? Как вы отделяете названия улиц от прочего мусора?

4. Какие карты используете для сервиса маршрутизации?

5. На скриншоте какойто лютый индусский код. strtolower и preg_replace по маске \W укоротит его сразу в трое. За CitiName, уж простите, хочется убивать: если нет знания английского то либо смотрим в словаре либо пишем транслитом (очень уж много раз я натыкался на приколы в стиле «mont, mons, month, mesyac» в пределах одного проекта).

1. Сейчас уже и не смогу ответить так, чтобы звучало аргументировано. Думаю, решение о выборе Solr-а принималось на основе того, что у нас был хороший опыт его использования для каталога товаров. Работает быстро: простые запросы 1-2 мс, запросы посложнее (например, с проверкой вхождения точки в полигон) — 20-30 мс. Железа много не требует.

2. Не совсем понял вопрос. Отвечу как понял. Например, если ввести «Новгоро», то в саджесте будет «Нижний Новгород», да.

3. Да, есть хинт по улицам. А мусор — это что? Если речь про разные объекты, которые в ФИАС притворяются улицами, то самые назойливые кейсы исправляем точечными переопределениями их «уровня в иерархии».

4. Вроде бы Яндекс.Карты, но зуб не дам (давно не видел этот интерфейс).

5. Не скажу, что в нашем коде не может встретиться чего-то такого, но вот конкретно CitiName — не наше изобретение :) Это поле из API одной из служб доставки.
Если речь про разные объекты, которые в ФИАС притворяются улицами

Они самые

то самые назойливые кейсы исправляем точечными переопределениями их «уровня в иерархии»

Любите вы ручной труд) Я думал исключающий справочник типов объектов.

Не скажу, что в нашем коде не может встретиться чего-то такого

Бывает, но все же от ['Крым респ.', 'Крым Респ.'] малость глаза кровоточат.
Любите вы ручной труд) Я думал исключающий справочник типов объектов.

Любим, да не очень, как видите :)



То есть, что-то исправлено, но все исправить — чертовски сложно.

Могли бы Вы показать свою реализацию работы с фиас?
Подложка карты — 2Гис, геокодер — Яндекс, подсказки для пользователя — OpenstreetMap. Ну и зоопарк, я уж не говорю о том, что яндекс за такое пользование своих данных просит 500к.
2Гис я использовал только для иллюстраций к презе (это не настоящие скриншоты), так-то у нас в основном Яндекс.Карты (по лицензии). Из OpenstreetMap мы пополнили базу домами для Украины и Белоруссии, а также координатами домов для всех стран.
У гугла тарифы только начинаются от 10к USD. Да и 2Гис при ближайшем рассмотрении выглядит не дешевле. Все это а так же куча правил в стиле «запрашивать можно, хранить нельзя» отбивает всякое желание работать с чем то кроме OSM
Я себе в закладки положил Here Maps. Честно, говоря, бегло читал соглашение, но вроде, у них не было этой убийственной формулировки.
Да, они единственные кто дает геокодер без кучи ограничений. И даже на бесплатном плане. Сам их использую теперь во всех проектах.
Расскажите, пожалуйста, в двух словах, как вы храните и используете полигоны?
Вот те самые где «попадает точка в полигон — есть доставка, не попадает — нет».

Используем для этого PostGIS, модуль для PostgreSQL.


Так у нас объявлена колонка в таблице для хранения полигона:


CREATE TABLE delivery_zone (
    ...
    gis_polygon geometry(Polygon),
    ...
);

А вот так проверяется попадание точки в полигон:


SELECT a, b, c
FROM delivery_zone
WHERE
    St_Intersects(POINT(37.505982, 55.774919), gis_polygon)
Спасибо! Было любопытно, как это делают серьезные дядьки.
Как внезапно выясняется на конкретной задаче своё работает лучше чем дадата. Ребят из HFLabs можно нанять на интеграцию, но это дорого, большие миллионы вроде. А своё работает бесплатно в целом и настраивается своими.
Другая причина, почему datata не подошла нам — у нас четыре страны, и нужно иметь одинаковый набор фич и функций работы с адресами для каждой из них.

А собственно почему dadata? В какой то старой статье видел такой же вопрос как у оратора выше, статья вроде была про разбивку адреса на составляющие (выделить улицу, дом, корпус, квартиру), взял рандомный реальный адрес из заказа, потестил на dadata, в ответ получил, уж простите, полную херню. Да, у нас адреса пишут в свободной форме, сделано для удобства пользователей.
В итоге тоже пришлось пилить свой велосипед который покрывает большинство наших кейсов. Согласен с asm0dey, свое работает бесплатно, свои задачи решает так как нужно нам, и если что-то нужно будет допилить — это будет проще и быстрее.

Sign up to leave a comment.