Comments 27
Очень хорошая статья. Прямо бальзам на душу. Всегда и везде объясняем, что лучше дать пользователю ввести адрес сразу в одну строку, а потом проверить. И что побуквенный ввод имеет ряд принципиальных недостатков. К указанным выше я бы добавил:
1.Необратимость ошибок. Если пользователь выбрал не ту строку — то узнать что же имелось ввиду невозможно.
2.Что делать если нет такого элемента в КЛАДР/ФИАС.
3.Что делать с латиницей.
4.Совершенно нет никакой методики сортировки вывода, которая б удовлетворила всех.
Кстати почему не включили в сравнение наш сайт  www.iqdq.ru? Хотя сразу скажу — у нас где-то 300-500 мс. В середнячки по подбору. Мы на разбор целой строки нацелены.
Все-таки мои эксперименты показывают, что польза от подсказок есть, особенно для людей, которые печатают не очень уверенно. Взять например, улицу Орджоникидзе. Лично мне тяжело ввести название этой улицы правильно без подсказок. Или другой пример. Адрес находится в каком-нибудь районе дальнего региона и пользователю тяжело ввести все правильно. А подсказки позволяют выбрать именно нужный адрес.
По поводу сравнения с другими сервисами, я выложила исходники на гитхабе, так что можно добавлять новые модули для других сервисов и самостоятельно проводить тесты или попросить меня это сделать.
Тогда прошу и нас попробовать. Что б была объективная оценка и нашего сервиса, а не мои предположения как заинтересованного лица.
Что касается ошибок, то я как раз и говорю. Пусть человек введет как может всю строку, с ОрджАникидзе или МоскАва. И после ввода разобрать всю! строку. А вот если нет однозначности — то да мы можем подсветить варианты. Нюанс в том, что имея всю строку — я резко сокращаю количество вариантов в случае неоднозначности. Оператору гораздо проще выбирать из двух-трех, чем в случае побуквенного ввода будет вываливаться полтора десятка.
Собственно, то что я сейчас говорю проверено на работе операторов. Через нас ежедневно проходят сотни тысяч адресов. И мы пробовали разные версии интерфейсов для работы операторов. Идею подсказок отмели. Так как оператор очень быстро устает выбирать из большого количества вариантов при побуквенном вводе. Да и в разных случаях нужна разная сортировка. Где-то сначала город, где-то улица, а где-то хотелось бы населенный пункт.
В общем при побуквенном вводе количество ошибок на порядок больше.

Что касается тех, кто медленно вводит, то где-то могу согласится, хотя сегодня большинство людей довольно уверенно работают с клавиатурой даже в телефоне. Но вопросы остаются: какую сортировку подразумевает пользователь? Что делать с неполнотой эталона? Что делать с латиницей?

Ну и технически: Надо понимать, что побуженный ввод это поисковый запрос к базе при вводе каждой новой буквы и сортировка! А это дорого. Даже с учетом хешей. А разбор строки целиком даже с учетом ошибок и опечаток — это один запрос.
Оператору гораздо проще выбирать из двух-трех, чем в случае побуквенного ввода будет вываливаться полтора десятка.
В статье я указала, что выбор подсказки осуществлялся из пяти, а не из полутора десятков вариантов. Согласитесь, что пять все-таки ближе к вашим «двум-трем». Поэтому полагаю, что мой эксперимент приближен к реальности.

В общем при побуквенном вводе количество ошибок на порядок больше.
При выборе подсказок человек перестает набирать все буквы адреса. В моем эксперименте в случае успешной подсказки для города пользователю не приходилось набирать название региона, а это уже не мало. Город попадает в топ 5 подсказок примерно по трем первым буквам. Это вы видите из моей первой таблицы. А улица выбирается в среднем по первым двум буквам. Поэтому не понятно, почему при вводе 3+2 букв адреса количество ошибок растет.

Надо понимать, что побуженный ввод это поисковый запрос к базе при вводе каждой новой буквы и сортировка! А это дорого.
В статье я оцениваю полезность подсказок как процент времени, которое экономит пользователь. Пользователь может сэкономить 70% своего времени на операции ввода почтового адреса, это очевидная польза для человека и для владельца интернет-магазина. Поэтому я не могу разделить с вами беспокойство по поводу излишней нагрузки на сервера. В конце концов, вычислительные системы призваны помогать человеку, а не наоборот.
И да, есть канальные задержки. Каковы бы ресурсы небыли. Скорость интерфейса, тормоза машины и браузера. В общем все равно 4 буквы — это 400-500 миллисекунд в сумме. А разбор пусть и грязной строки — 10-100 миллисекунд в среднем.
Решительно не понятно, как так получается, что у вас 400-500 миллисекунд в сумме, при сотнях тысяч запросов в день. Вы используете mysql? Почему вы не кешируете данные в память? У вас скрипты на php? Посмотрите в сторону демона на golang, который держит всё сразу в памяти.

Я сталкивался с такими задачами, и мой результат — 20-30мс. Цена вопроса — 3-4 дня.

К слову, сортировали мы по частоте клика в тот или иной пункт (выбор аэропорта, билетный сервис).
Да, что-то много 500мс. Даже на 4 подбора.
1. пробег от клиента до сервера 3-30мс (зависит от расстояния между пользователем и сервером)
2. выборка из кэша первой буквы 1-5 мс
3. пробег обратно 3-30 мс (зависит от расстояния между пользователем и сервером)
Итого 7-65 мс. в большинстве случаев.
Так 4 раза (от 7 до 65)х4 от 28 до 260мс.

Хотя проще клиентско закешировать адрес и всё=)
Чаще всего мы же 2-3 адреса вводим. Дом, работа и еще что нибудь.
Нет, у нас не PHP и не MySQL. С точки зрения сложности — побуквенный ввод задача действительно довольно примитивная. Это может написать любой мало-мальски способный программист. Поэтому ее продажа как сервиса мне всегда была странной идеей. Проще самим написать. На месте заказчика — так бы и сделал. Цифры я приводил в один поток на виртуальной машине. Реально конечно многопочность, конечно в памяти и конечно хеши. На счет 20-30 милисекунд — это на сервере, а есть еще формирование выборки, ее вывод. Короче накладные. И не забывайте — выборка первой, она может и 5 мс, но дальше все зависит от массы условий, в том числе от методов сортировки, количестве записей на вывод, канал, тормозами скриптов клиентской части. Вот и выходит — что 10-300 мс. В среднем выливаются в 100. Да собственно, приведенная автором статистика это и подтверждает. От 20 на город, до 200 на улицу и еще на дом. Надо ж суммировать подбор по всем уровням. А еще учитывать, что человек пробует первым вводить — область или улицу или населенный пункт, сервис подсовывает свою приоритетность. Ну допустим мои написанные 400-500 — это максимум. Пусть от 200 до 500. Пусть в среднем и 300. Ну а реально нашу скорость — можно потестировать на IQDQ.RU.
Собственно, идеологически мне кажется лучше давать вводить в одну строку с ошибками и потом разбирать. Повторюсь, это мое частное мнение и оно как и любое другое может быть оспорено.
В итоге на почтовом конверте человек пишет СПб., и письмо нормально приходит в Питер, а на всяких самописных сайтах нужно вбить Санкт-Петербург как регион, потом перепробовать несколько вариантов с район/область, а потом ещё и вписать Санкт-Петербург как город :-)

Переход с формальных описаний на естественный язык и обратно — вовсе нетривиальная задача.
Соглашусь. Нюансы есть. Сокращения, часто употребимые топонимы надо б коллекционировать.
 Хотя вт замерили сегодня — с сервера у нас 30-50 милисекнд на сервере. Сам на себя наговорил. Тем не менее — концепция ввода строки «как есть» остается.
«Хотя сразу скажу — у нас где-то 300-500 мс. В середнячки по подбору.» Что то много 3-50 мс по факту.
Пользуясь случаем выражаю своё фе в адрес YouDo

Мой адрес оно не жрёт. Произвольный адрес ввести нельзя. На карту ткнуть точку нельзя. В итоге приходится вводить только адрес улицы для заданий.

А ещё (оффтоп) в графе «начать» подсказка к времени «укажите, когда задание должно быть выполнено». Но позвольте, ведь «выполнено» — это не начать, а закончить!

Браво! Масштабное исследование. Дополню немного (дисклеймер: я развиваю один из рассмотренных сервисов — Дадату).


Польза от подсказок не лежит в вакууме, а определяется сценарием использования. Так, если речь идёт об адресе в интернет-магазине, нужен правильный почтовый индекс или координаты (для курьерской доставки). Индексы отдают только Дадата, Кладр в облаке и Фиас24. Координаты отдаёт только Дадата.


Для расчёта стоимости доставки иногда надо знать район города. Дадата его отдаёт, остальные нет.


Человеку удобно, когда ему в первую очередь подсказываются «локальные» адреса (из того города, где он находится). Дадата это умеет, остальные нет. Кстати, именно с этим связно отсутствие города Мирного в вашем тесте — видимо, вы не в Якутии ツ


С точки зрения минимизации лишних телодвижений для человека максимум удобства достигается, если он может ввести адрес вообще в одну строку, не прыгая по полям. Для этого подсказки должны поддерживать ввод до дома или до квартиры. До дома из перечисленных сервисов умеют Дадата, Кладр в облаке, Фиас24 и Яндекс. До квартиры только Дадата.


Как работают подсказки в Яндекс Картах, можно посмотреть на… Яндекс Картах, поэтому ссылку на «демо» давать не буду.

А зря, потому что SuggestView намного «тупее», чем Яндекс-карты. Демка его здесь: https://tech.yandex.ru/maps/jsbox/2.1/search_control_ppo

Не только Дадата делает это. И индексы и качество. Поэтому «только» это мягко говоря — преувеличение. Зачем обманывать людей?
Мы в Ахантере не стали вываливать в подсказки кучу дополнительной информации, о которой вы пишите, т.к. считаем, что пользы от неё именно в подсказках нет.

Вот, например, какая польза от того, что человек в подсказках увидит индекс и район города? Это ведь лишняя информация, которая только мешает человеку искать среди подсказок свой адрес. Подсказка должна быть предельно лаконичной, именно тогда от неё будет польза.

Координаты, индекс и прочую информацию об адресе можно получить уже после того, как пользователь завершит вводить адрес. Для этого у нас есть отдельное API. Собственно также можно поступать, используя другие сервисы, о которых здесь написано.

По поводу «локальных адресов», чаще всего магазины доставляют по своему городу, вряд ли вы будете пиццу заказывать во Владивостоке. В этом случае правильнее не рассчитывать на геолокацию по IP-адресу, а просто зашить ограничение на город в самом интернет-магазине. Это можно сделать с любым из рассмотренных сервисов. Гораздо хуже, как мне кажется, когда в подсказках вместо «города Березовский» вываливается «Березовский сельский р-н». Не понятно, почему вы это позиционируете, как фичу?

По поводу номеров домов и квартир. Вы серьезно считаете, что человеку нужны подсказки для его дома и квартиры? Выше я написал про лаконичность, на мой взгляд, когда перед пользователем вываливается избыточная информация, он начинает отвлекаться на неё, как результат одну-две цифры своего номера он вводит дольше с подсказками, чем без них. Интересно, у вас есть свои оценки полезности подсказок для домов, можете их привести? Может быть мы тогда тоже добавим эту возможность у себя.

Ну а возможность ввести адрес одной строкой есть, вроде бы, у всех сервисов, про которые тут сказано. По крайней мере, в Ахантере вводить дом и кваритру в одну строку с адресом можно без проблем, поэтому с «минимизацией лишних телодвижений для человека» тут полный порядок.
Согласен с коллегами, мы тоже придерживаемся в этом вопросе схожей идеологии. Хотя подбор домов добавили сразу.
Автору спасибо за статью, она шикарная, очень интересный подход к тестированию автокомплита.
Ребята из Ахантера, я вот ваше API тестировал для имен (и даже в похожей статье сравнения вас упоминал), а потом для адресов. С именами ладно, вот по адресам много вопросов к вам возникло тогда :) А сейчас читаю ваш коммент и, простите, не удержусь его разобрать публично:

Вот, например, какая польза от того, что человек в подсказках увидит индекс и район города?


Про индекс не знаю, а вот про районы очень даже знаю :) Мне были нужны районы городов, чтобы стоимость доставки считать, а вы в них не умеете.

чаще всего магазины доставляют по своему городу


Что значит «чаще всего»? :) Много кто доставляет по всей России, потому что отправляет товар почтой по всей России. Будем предлагать пользователю выбрать город руками?

Координаты, индекс и прочую информацию об адресе можно получить уже после того, как пользователь завершит вводить адрес. Для этого у нас есть отдельное API.


То есть вы мне под предлогом «избыточности» отдаете куцые данные, а если мне надо больше данных – предлагаете для решения задачи юзать ваше платное API стандартизации адресов, прикручивать на бэкенд дополнительную логику обработки адресов, и считаете что это окей и называется «можно получить»? :) Нет, нельзя, во всяком случае очень неудобно. Зато есть офигенно полезный параметр request_process_time.

По крайней мере, в Ахантере вводить дом и кваритру в одну строку с адресом можно без проблем


Можно узнать, как? Мне вот ваше API Подсказок отдает пустой ответ на «санкт-петербург ул 2 жерновская д 26».
Мне были нужны районы городов, чтобы стоимость доставки считать...
Подскажите, а в каких городах РФ стоимость доставки зависит от района города? Я сам в Москве живу, и где бы я не находился, доставка мне всегда обходится в 300 рублей, независимо от района. Вопрос без иронии, просто хочу понять, насколько ваш кейс распространён.
А по существу вашего вопроса, я не понял какое отношение расчёт стоимости доставки имеет к тому, что пользователь видит в подсказках? Выше я написал про избыточность информации, которая мешает пользователю искать свой адрес. Вот давайте вернемся к примеру с «городом Березовский», покупатель видит подсказку для него «г Краснодар, Березовский сельский р-н». Сколько пользы получит он от такой подсказки?

Что значит «чаще всего»? :) Много кто доставляет по всей России, потому что отправляет товар почтой по всей России. Будем предлагать пользователю выбрать город руками?
Я сослался на пример про пиццу, как на пример местечкового магазина, который не рассчитывает продавать продукцию в соседние города. Мне кажется, что таких маленьких магазинов по статистике больше, чем крупных, которые ориентированы на охват всей России. Возможно, я ошибся, если у вас есть иная статистика, приношу извинения. Ну а касательно крупных магазинов, в которых пользователь заказывает из другого города, то, на мой взгляд, проблемы указать свой город явно здесь нет. Цена вопроса, вроде бы, две-три буквы. Наоборот, пользователь видит явно свой город, его уверенность в том, что он делает всё правильно растёт. Это, конечно, вопрос юзабилити и здесь важно мнение конечных пользователей. Тем не менее, мне кажется, это лучше, чем получать «проезд Мирный 2-ой» вместо «города Мирный».

То есть вы мне под предлогом «избыточности» отдаете куцые данные, а если мне надо больше данных – предлагаете для решения задачи юзать ваше платное API стандартизации адресов
Здесь каждый для себя выбирает сам. Либо вы платите за подсказки, либо платите за проверку адресов в уже оформленных заказах.На Ахантере вам не надо платить за подсказки и не играет никакой роли, в каком количестве ваши покупатели нащёлкают их у вас на сайте. Да, в нашем случае вам придётся заплатить 10 копеек за получение координат и прочей информации об адресе. Но заказ-то уже оформлен, неужели 10 копеек сильно снизят вашу прибыль от него?

Можно узнать, как? Мне вот ваше API Подсказок отдает пустой ответ на «санкт-петербург ул 2 жерновская д 26».

Вот так у нас на сайте выглядит ввод вашего адреса.



Как видно, подсказки появляются без проблем. После выбора вашей улицы просто вбейте номер дома в конце строки. Подсказки для номеров домов вы там не увидите, т.к. мы считаем их бесполезными, поскольку полагаем, что человек больше времени тратит на поиск и выбор своего дома в предложенном списке. Я об этом выше написал. Если у вас есть другой опыт, поделитесь, пожалуйста, а мы со своей стороны охотно добавим этот функционал в наш сервис.
Дадата как можно утверждать что вы круче всех, если не перечислили всех конкурентов. По крайней мере это не порядочно. И навивает мысли а почему умалчиваем а?

Я понимаю что создатель данной ВЕЛИКОЛЕПНОЙ (без иронии) статьи мог про нас и не слышать, но вы то нас хорошо знаете.

Что касается вывода доп параметров так Ахантер Вам ответил. Это дело 5 минут и выделанного яйца не стоит для программистов. Вопрос в потребности.
Я понимаю что создатель данной ВЕЛИКОЛЕПНОЙ (без иронии) статьи мог про нас и не слышать
Да, ваш сервис с ходу не попался на глаза. Постараюсь включить его в обзор в ближайшие выходные.
Да будет интересно. Как я уже говорил сервис на ms sql написан за пол дня. посему любые замечания для нас будут очень Важны. к тому же он у нас бесплатен от слова совсем и даже не планируем его делать платным. Кому интересно могу в личку прислать исходный код
Автору статьи большой респект.

Чисто из любопытства, подскажите сколько дней вам потребовалось, чтобы выполнить тест для Google с учётом обозначенных квот?

Вообще по всем сервисам интересно, удалось ли уложиться в лимиты или тест длился несколько дней?
В анонимные квоты гугла уложиться, конечно, не получилось. А вот лимита в 150 000 запросов хватило, так что весь тест удалось выполнить за один день. Суммарно по остальным сервисам весь эксперимент прошел за 3 дня.
По просьбе нескольких читателей я добавила в статью обзор еще одного сервиса. Соответствующие исходники также залила на гитхаб.
Добрый день, просьба перетестировать сервис IQDQ.RU  мы исправили проблемы со скоростью.Теперь все очень даже быстро.
Спасибо, уважаемый автор!
Буду следовать вашим идеям в разработке.

А что если «задом наперёд»?
Было бы круто вбивать сначала номер дома (и корпуса) — потому что он короткий и его по любому надо указать. Потом улицу — выборка из «подходящих» по номеру дома улиц и проспектов. И так далее.
Вдруг так будет быстрее?
Only those users with full accounts are able to leave comments. Log in, please.