История колоссального успеха ДубльГИС
Проект зародился внутри новосибирской компании «Техноград плюс». Она занималась производством профессиональных ГИС по заказу НГТС и других организаций. На массовом рынке «Техноград плюс» предлагал несколько тиражей компакт-дисков с картой Новосибирска. Также компания выпустила CD «Строительные фирмы и организации» — приложение к газете «Стройка».
В 1998 году, после кризиса, многие заказчики «Технограда плюс» оказались не в состоянии оплачивать дорогостоящие разработки «не первой необходимости». Возникла потребность в поиске новых клиентов и способов применения ГИС. Более того, с выпущенных ранее тиражей компакт-дисков разошлась масса пиратских копий, и продавать их стало бессмысленно.
Было принято решение выпустить бесплатный продукт, который будет служить демоверсией профессиональной ГИС. Опыт с газетой «Стройка» показал, что электронный справочник, объединённый с картой города, может быть интересен рекламодателям. Александр Сысоев сформулировал концепцию нового проекта: бесплатное распространение и окупаемость за счёт рекламы. Продукт получил название ДубльГИС: ГеоИнформационная Система плюс Городской Информационный Справочник.
Первый выпуск ДубльГИС вышел 25 апреля 1999 года. Весной 2001 года был разработан интерфейс ДубльГИС 2.0, чуть позже открылся сайт www.2gis.ru и появился сервис обновлений.
Первое время компания пыталась сотрудничать со сторонними организациями — покупала базы данных, обращалась в рекламные агентства, приглашала специалистов для создания рубрикатора. Но эта практика оказалась неэффективной. Компанией было принято решение развивать собственные службы по каждому из основных бизнес-процессов. Поэтому, в том же 2001 году начал формироваться информационный отдел и отдел продаж.
В 2002 году приложение ДубльГИС впервые было бесплатно доставлено на компакт-дисках в 15 тысяч офисов Новосибирска.
В 2004 году проект был выделен в самостоятельную бизнес-единицу — ООО «ДубльГИС». В этом же году был открыт первый филиал ООО «ДубльГИС» в Омске, а также были заключены договоры коммерческой концессии с партнёрами в Томске, Барнауле и Новокузнецке. С этого момента началась экспансия ДубльГИС в города России.
В 2006 году выпущены онлайн-версия справочника и версия для КПК на базе Windows Mobile. ДубльГИС в Новосибирске разделился на управляющую компанию и филиал для продажи рекламных позиций.
В 2007 году выходит ДубльГИС 3.0, новая версия программы с интерфейсом в стиле MS Office 2007.
В 2010 году впервые проводится IT-конференция CodeFest.
В 2011 году компания проводит ребрендинг, в результате которого продукты получают название 2ГИС (ДваГИС)[17]. Спустя 12 лет после первого выпуска 2ГИС приходит в столицу — выпущен справочник Москвы. Релиз мобильных приложений для Android и iOS
В 2012 году 2ГИС выходит в итальянских городах Венеции и Падуе. Это первый выпуск за пределами СНГ
В 2013 году происходит очередное обновление фирменного стиля.
Зарубежная экспансия продолжается: 2ГИС появляется в Чехии и на Кипре.
Выходит приложение для Windows Phone. Анонсирована концепция и интерфейс нового 2ГИС.
2014 год: ещё несколько новых рынков, в том числе Чили. В августе 2014 года выходит карта Дубая.
В декабре 2014 года компания серьёзно расширила головной офис в Новосибирске, выкупив половину 22-этажного новосибирского бизнес-центра «Сан Сити». Сумма сделки составила более 1 млрд рублей, кредит на покупку выдал Сбербанк.
В ноябре 2015 года «2ГИС» выходит в Киргизию, первым городом присутствия стал Бишкек.
В ноябре 2016 года компания отказалась от проектов, не набравших ожидаемой аудитории, и провела оптимизацию штата.
Президент компании Вера Гармаш заявила, что оптимизация затронула менее 5 % специалистов управляющей компании и сети собственных филиалов.
В этом же месяце «2ГИС» и «Рамблер» объявили о начале сотрудничества. Его первым результатом стал единый поиск организаций по всем городам России на сайтах Rambler&Co.
В апреле 2017 года 2ГИС запустил пешеходную навигацию с построением пеших маршрутов на своих картах.
В июле 2017 года компания выпустила туристические путеводители по крупнейшим городам в странах присутствия. Путеводители включают описания основных достопримечательностей, общепита и шопинга.
В ноябре 2017 года компания заключила соглашение о сотрудничестве с китайской компанией Huawei. В результате на смартфонах Huawei и Honor, которые продаются в России, начали предустанавливать приложение 2ГИС.
Ранее сервис начали предустанавливать на свои российские модели компании LG, Fly, DEXP и Micromax.
В марте 2018 года Apple встроила данные о компаниях из справочника 2ГИС в свои российские карты.
В апреле 2018 года на картах 2ГИС появляются Дорожные события: информация о камерах контроля скорости, ДТП, ямах и так далее. Сервис позволяет пользователям публиковать на карте не только сообщения об инцидентах, но и их фото.
Ключевые фигуры, основатели
Александр Вадимович Сысоев, генеральный директор (70%)
Дмитрий Александрович Сысоев (30%)
Электронные справочники и карты
1 065 846 000 ₽ (2017)
3 046 012 000 ₽ (2017)
3 122 878 000 ₽ (2017)
Главный офис «2ГИС» находится в Новосибирске. Компания имеет справочники для многих городов России, а также нескольких городов за рубежом — в Казахстане, Италии, Чехии, Чили, ОАЭ, Киргизии, на Украине и Кипре.
По данным компании на июль 2018 года, карты-справочники 2ГИС работают более чем в 350 городах, а их месячная аудитория превысила 40 миллионов пользователей. Сервис ежедневно обрабатывает более 2,2 млн поисковых запросов.
Все версии 2ГИС, как и обновления к ним, бесплатны для пользователей. Основной источник доходов компании «2ГИС» — продажа рекламных мест на карте и в справочнике (баннер, место в списке, дополнительный текст)
Входит в десятку лучших работодателей России по версии HeadHunter
В 2013 году компания заработала 3 млрд рублей
История одного запроса
Представьте ваш первый день на новой работе. Офис находится в районе совершенно незнакомой вам станции метро Курская. Приближается время обеда. Вы открываете поисковое приложение, пишете «поесть на Курской» и получаете подборку вариантов, где можно отобедать.
Что стоит за запросом «поесть на Курской» и как он обрабатывается, чтобы найти именно то, что нужно вам? В статье я расскажу, как команда Поиска 2ГИС делает всё возможное для того, чтобы жизнь в городах была удобнее и комфортнее для пользователей.
Важно понимать, что текст поискового запроса — лишь верхушка айсберга, малая часть того, с чем непосредственно взаимодействует пользователь. Сам поисковый запрос, помимо текста, содержит множество других данных. В них входит персонализированная информация о местоположении пользователя, участке карты, который он видит, набор записей из его избранного и информация о режимах поиска. Например, поиск по карте или в здании, а может и поиск проезда. Данные — залог успеха хорошего поискового функционала.
Мы уделяем большое внимание нашим данным и их структуре. Более того, сам алгоритм поиска в 2ГИС мы называем структурным поиском, потому что он заточен под эффективный и быстрый поиск в наших структурированных данных. Мы особым образом подготавливаем поисковый индекс и данные, из которых он строится. Не буду углубляться в детали, скажу лишь, что данные организованы так, чтобы быть достаточно простыми в обработке, хорошо сжимались, а главное позволяют нам быстро их обрабатывать даже на мобильных устройствах.
Более того, поиск умеет работать офлайн, а потому предъявляет особые требования к быстродействию и объёму поискового индекса. Этой особенности мы уделяем большое внимание — постоянно сжимаем поисковый индекс, оцениваем быстродействие на всевозможных платформах и ускоряем функционал там, где специфичные поисковые кейсы превышают установленный лимит времени. К слову, можем похвастаться тем, что рядовой поисковый запрос в 2ГИС на мобильном устройстве выполняется быстрее, чем приложение рисует выпадающий список по результатам.
Ниже я приоткрою завесу тайны, покрывающей магию нашего поиска. В качестве примера возьмём упомянутый запрос «поесть на Курской». Рассмотрим этапы его обработки и что происходит на каждом из них. Итак, поехали!
Этап 1. Парсинг
Входные параметры: запрос «поесть на Курской»
Прежде всего, нам необходимо провести парсинг текста запроса. Это важно, потому что после парсинга мы сможем работать не с текстом запроса, а с набором токенов, из которых он состоит. Токены — это отдельные слова запроса. В нашем случае мы получим набор из трёх токенов: «поесть», «на», «курской». Казалось бы, всё просто, но дьявол в мелочах. И порой всё бывает не так очевидно: например, в запросах «wi-fi» или «2-я» мы должны понимать, что обрабатывать такие сочетания следует целиком.
Сами по себе токены содержат информацию о тексте слова, о позиции в запросе, о наличии разделителя следующего за словом и некоторую характеристику слова — регистр его символов, представляет ли слово собой число, порядковое числительное, номер телефона, адрес или другие данные.
Этап 2. Словарный поиск
Входные параметры: токены «поесть», «на», «курской»
С готовым списком токенов запроса мы приступаем к этапу словарного поиска, то есть к этапу, на котором для каждого токена находим список словоформ из наших данных. Словоформа — это закодированная информация о корне слова и его окончании.
Словарный поиск мы представляем как алгоритм анализа словаря, представленного в виде графа. Узлы в нём — это буквы, а точнее — символы. Граф состоит из узлов-символов и переходов между этими узлами. Результатом обхода нашего графа-словаря является множество словоформ, которые мы можем получить на основе переданных токенов из предыдущего этапа. Так мы пробуем найти в нашем словаре последовательность символов, которая совпадает с очередным токеном из запроса. При этом, как мы все с вами знаем, пользователи допускают опечатки, пропускают буквы или даже ошибаются в раскладке клавиатуры. Поэтому при обходе словаря мы применяем некоторые манипуляции с тем, чтобы учесть возможный человеческий фактор или попробовать угадать, что человек набирает прямо сейчас. В ход идут различные преобразования цепочки символов: вставки, замены, дописывание символов и тому подобное.
В результате для каждого токена запроса из графа мы извлекаем набор словоформ с информацией о корне и окончании слова, информацию о числе символов в словоформе и оценку найденности. Оценка найденности — оценка, характеризующая словарное расстояние найденной последовательности символов к искомой последовательности. Оценка характеризует насколько сильно отличается найденная цепочка символов от токена запроса.
Так для токенов найдём словоформы:
Так для токенов будут созданы термины:
Этап 3. Поиск вхождений в данные
Вход: набор терминов для каждой части запроса
Для каждой из частей запроса и для каждого из терминов этих частей мы ищем документы, содержащие слова, закодированные в терминах. Так, для частей запроса по всем терминам будут найдены вхождения:
Попаданием мы считаем соответствие слова из поискового запроса слову из конкретного документа. Эти попадания сохраняются в список, который будет анализироваться на следующем этапе. При добавлении попадания мы не только копируем из термина данные о слове в документе, но и вычисляем лучшую оценку того, как слово могло быть найдено. Иными словами, выбираем морфологическую оценку термина, либо оценку того, как термин был найден в словаре, в зависимости от того, какая из оценок ближе к токену запроса.
Этот этап — прелюдия к старту самого поиска. Мы подготовили набор попаданий в конкретные документы, на основе которых следующий алгоритм будет отбирать и оценивать, что нужно отдать пользователю в качестве результата.
Этап 4. Сердце поиска
Вход: список попаданий
Поэтому правильнее будет отобразить входные данные следующим образом:
Вход: контейнер узлов-документов
Этап 5. Анализ
Вход: Узел документ:
Начинается анализ с получения списка тайтлов из узла. Тайтл представляет собой заголовок и список попаданий, пришедшихся в этот заголовок документа. Эти заголовки и будем оценивать на первом этапе. Нам важно узнать полезность каждого тайтла. Полезность может быть хорошей, слабой и мусорной.
Для каждого из тайтлов отбираются лучшие из цепочки попаданий — лучшие по длине и словарной оценке, составленной из похожести попаданий. На основе лучшей цепочки и будет проведена оценка полезности тайтла. Чтобы определить полезность цепочки, мы в том числе используем механизм на основе частотности слов в документах. Грубо говоря, чем чаще слово встречается в документе, тем оно важнее (TF-IDF). Так, если цепочка содержит попадание в важное слово из заголовка документа без сильных морфологических отличий, например отличное число или род — считаем тайтл полезным. Тайтл также может быть полезным, если его попадания полностью покрывают слова из заголовка документа.
С помощью полезности все тайтлы образуют маску полезности для узла. Эта маска даёт нам представление о токенах запроса, покрываемых анализируемым узлом. И с её помощью мы во многом определяем, следует ли дальше анализировать узел.
В качестве результата мы имеем не просто один документ из индекса, а набор структурных данных, представляющих потенциальный результат с информацией о том, как она может быть найдена.
Этап 6. Оценка
Вход: Узел документ:
В зависимости от маски полезности, мы либо будем обрабатывать узел, либо сразу перейдём к следующему. Из множества обработанных узлов мы накапливаем различную информацию об их совокупности. Например, множество тайтлов узлов, отношения узлов между собой и некоторые другие данные.
Дальше начинается анализ тайтлов узлов, взаимосвязанных друг с другом. По факту множество узлов объединяются в граф узлов, который мы оцениваем.
Из тайтлов узлов графа получаем список отранжированных тайтлов. Говоря проще, из множества узлов мы составляем единый список тайтлов, в котором для каждого элемента также добавляется оценка и совокупность факторов из попаданий тайтлов всех участвующих узлов.
Оценка — структура с информацией о числе задействованных в тайтле слов из запроса и множество других факторов о том, как слово было найдено и обработано — начиная с этапа словарного поиска. Важно, что эти оценки из ранжированного тайтла будут участвовать в отборе лучших оценок. Некоторые из них будут помечены как выбранные и внесут свой вклад в конечную оценку того результата, который увидит пользователь.
Общая оценка наделяет результат информацией, которая будет крайне важна при сортировке всей выдачи. Она содержит такие факторы, как, например, пропуски слов из запроса. Эта мера характеризует число слов, которые не были покрыты узлом с его структурной информацией.
На основе информации о полезности тайтлов определяется ясность результата. Ясность может быть хорошей, слабой и плохой. И вычисляется она с участием всех выбранных тайтлов для обрабатываемого узла. Все эти данные оказывают драматическое влияние на дальнейшую судьбу результатов и порядок их выдачи.
Постепенно мы приближаемся к окончанию анализа узла. Прежде чем узел окончательно покинет пределы анализатора и станет потенциальным результатом, мы проводим ещё несколько уточняющих манипуляций. Например, на совместимость выбранных заголовков документов.
Узел, прошедший все круги анализатора, образует результат, содержащий в себе информацию о выбранных заголовках и документ. Результат, дающий хорошее покрытие поискового запроса, отправляется в постобработку.
Этап 7. Постобработка
Вход: результат, сконструированный из узла
Анализатор отсеивает множество записей из индекса, прежде чем те станут результатами. Однако в ходе анализа может быть оценено и отправлено на обработку множество потенциальных результатов. Чтобы показать пользователю только самые полезные из них в порядке релевантности, нам нужно отсечь худшие варианты, найденные анализатором.
На предыдущем шаге упоминалась общая оценка результата. Общая оценка позволяет нам на этапе постобработки отсечь худшие результаты. Градация следующая. Результаты, не покрывшие какие-либо токены запроса, очевидно, хуже тех результатов, которые полностью покрывают запрос пользователя. Результаты с худшей ясностью, очевидно, менее желательны, чем результаты с хорошей ясностью. Постобработчик накапливает сведения о поступающих результатах и отсеивает те, что заведомо хуже. Остальные добавляет в список.
Перед тем, как отдать голодному пользователю информацию о кафе, мы проводим завершающую обработку — сортируем по релевантности. В сортировке участвует множество факторов, рассчитанных и агрегированных на разных этапах поиска. И в конечном итоге поисковая выдача по запросу «поесть на Курской» составляет более 500 результатов. Многие из них были найдены одинаковым путём, а потому имеют одинаковую оценку. Они будут отсортированы по степени популярности у пользователей.
Вывод
Мы получили выдачу с множеством кафе и ресторанов и, радостные, отправляемся обедать. Все результаты мы получили за доли секунд. И при этом нам даже не нужно интернет-соединение.
Приложение хранит поисковые индексы на устройстве. Такая схема обеспечивает нас нетривиальными задачами по оптимизации сжатия данных и скорости их обработки — ведь поиск должен быстро работать на самых разных мобильных устройствах! Впрочем, это уже совсем другая история.
Сегодня же я постарался приоткрыть капот нашего поискового движка и показать, как мы помогаем пользователям находить в городе то, что им нужно, причём делать это быстро и удобно. Надеюсь, было познавательно.
Как пользоваться новым 2ГИС
Мы запустили новую веб-версию 2ГИС — более быструю, удобную и красивую. Она заменила прежнюю версию на 2gis.ru.
Главные особенности новой веб-версии 2ГИС:
Как вращать карту
Зажмите правую кнопку мыши (или Ctrl+левую кнопку мыши) и перемещайте курсор.
Как построить маршрут проезда между городами
Нажмите на кнопку «Поиск проезда» справа от поисковой строки, задайте начальную и конечную точки маршрута и выберите способ проезда «На авто».
Строить маршруты между городами для других видов транспорта 2ГИС пока не умеет.
Как искать компании сразу в нескольких городах
Введите нужный запрос в поисковую строку. 2ГИС выполнит поиск по всей территории, карты, открытой на экране. Приближайте, отдаляйте и просто двигайте карту, чтобы рассмотреть результаты поиска на нужной вам территории.
Чтобы сразу поискать что-то в другом городе, наберите в поиске нужный запрос и название города, например, «тверская москва» — 2ГИС откроет карту Москвы и покажет улицу Тверскую.
Как искать товары
Подробно о том, как искать товары, мы рассказали в статье «Поиск товаров и цен в 2ГИС: как работает».
Если вы представитель компании и хотите, чтобы ваши товары или услуги появились в 2ГИС, читайте статью «Как добавить свои товары и цены в 2ГИС».
Как вернуться в старый 2ГИС
С 22 октября старый 2ГИС стал недоступен. Новый 2ГИС лучше старого — попробуйте с ним поработать, и вы его полюбите так же, как любим мы.
Как поделиться впечатлениями о новом 2ГИС
Если что-то мешает вам полюбить новый 2ГИС, расскажите нам об этом через форму обратной связи в правом нижнем углу экрана.
Если просто хотите поделиться впечатлениями и пожеланиями, тоже не стесняйтесь нам писать! Нам важно знать, что вы думаете.
Как сменить город
Напишите название нужного города в строке поиска и кликните на него в выпадающем меню. Или просто найдите нужный вам город на карте.
Почему поисковый запрос перебрасывает в другой город
Новый 2ГИС выполняет поиск по всем городам сразу. Если в соседнем городе нашлось более точное совпадение с вашим запросом, откроется этот город.
Мы всё время совершенствуем работу поиска. Будем признательны, если вы расскажете нам, при каких запросах 2ГИС перебрасывает вас в другой город — сделать это можно через форму обратной связи в правом нижнем углу экрана.
Как вернуться на главный экран
Нажмите на иконку 2ГИС в левом верхнем углу.
Как распечатать карту
Чтобы распечатать фрагмент карты из онлайн-версии, нажмите значок принтера в правом нижнем углу страницы.
Подробнее о том, как это сделать, читайте в статье «Как напечатать фрагмент карты или справочника».
Почему не получается сообщить о неточности
Сообщить о неточности в справочнике или на карте, а также добавить отсутствующие объекты можно кликнув на «Нашли ошибку в данных?» или «Добавить организацию» в карточке места или компании.
Подробнее о том, как это сделать, читайте в статье «Как сообщить об ошибке в 2ГИС».
Если вы не видите таких кнопок — значит, вы пытаетесь сообщить о неточности там, где такой возможности мы пока не предусмотрели. Пришлите нам скриншот карты 2ГИС с описанием неточности через кнопку обратной связи в нижнем правом углу карты — мы передадим информацию нашим специалистам.
Почему новый 2ГИС поддерживает не все браузеры
Мы бы очень хотели поддерживать все браузеры, но с некоторыми старыми браузерами это практически невозможно. Поэтому рекомендуем обновить ваш браузер до свежей версии: это не только позволит познакомиться с новым 2ГИС, но и большинство других сайтов станут работать быстрее и без ошибок.
Какая информация попадает в 2ГИС
Мы собираем информацию обо всех компаниях и организациях, которые работают в городе, продают товары и оказывают услуги. Наша задача — знать как можно больше и узнавать об изменениях как можно быстрее.
Мы сами собираем информацию из открытых источников и на местности силами наших специалистов, а также получаем её от компаний и пользователей.
Все изменения, которые мы вносим в 2ГИС, проверены нашими специалистами.
Какие организации размещаются в справочнике
Все компании, которые работают прямо сейчас, делают это законно и имеют соответствующие документы.
Мы размещаем в 2ГИС только зарегистрированные компании. Если бизнес существует, но не оформлен как бизнес, в справочник он не попадёт.
Есть сферы, которые не требуют создания юридического лица — так работают нотариусы, адвокаты и т. д., — но требуют разрешения на работу. В этих сферах достаточно такого разрешения, чтобы попасть в 2ГИС.
Если сфера работы компании требует лицензирования, а у компании нет лицензии, мы не сможем разместить её в справочнике.
Какая информация о компании необходима
Любая информация, поступившая в 2ГИС, проверяется перед публикацией. Чем больше информации вы укажете, тем больше шансов, что компания скоро появится в справочнике.
Постарайтесь сразу указать:
Очень важно указать хотя бы один способ связаться с компанией — иначе нам будет практически невозможно проверить информацию.
Если вы увидели новое кафе или магазин и сообщаете о нём в 2ГИС, попробуйте найти в поисковиках его номер телефона или сфотографируйте визитку. Помогите компании поскорее появиться в 2ГИС.
Какие данные размещаются на карте
На карте мы обозначаем здания, улицы, заборы, входы в организации и подъезды, парковки, места (дачные и гаражные территории, лесопарковые зоны, и т.п.), достопримечательности (фонтаны, памятники, декоративные сооружения) и прочие объекты (детские площадки, беседки, площадки для выгула собак, спортивные объекты и т.п.), остановки и маршруты общественного транспорта — всё, что находится на открытых и доступных к посещению территориях.
Мы не размещаем на карте: любые объекты на частной территории (кроме жилых домов), торговые уличные и рыночные палатки (не киоски), временные конструкции (ярмарки, цирки-шапито), детские площадки на территориях детских садов, железнодорожные ветки на территориях предприятий. На карту также не попадают объекты, размещение которых запрещено законом, например, внутренние территории исправительных учреждений, военные объекты, некоторые технические объекты на закрытых территориях.
В 2ГИС отображаются подъезды в многоквартирных домах и входы в организации, которыми могут воспользоваться жители города. В 2ГИС не отображаются служебные входы в здания, входные двери в частные дома, гаражи, подвалы, теплицы, овощехранилища и прочие подобные постройки.












