Pull to refresh

metabus — платформа для построения тематических поисковых систем

Reading time7 min
Views1.5K
Всё началось с того, что в какой-то момент я понял: искать в интернете товары, услуги и места «реальной» жизни достаточно сложно. Да, практически всё можно найти через популярные интернет-поисковики, но когда начинаешь искать что-то из реальной жизни, привязанное к физическому адресу, то становится сложнее. А когда еще надо уточнить запрос, задать ряд характеристик, время работы, местоположение или цену товара, то становится еще сложнее. В итоге поиск сводится к ручному перебору множества страниц и массе потраченного времени. На каждую тематику есть свои ресурсы. Мы ищем киносеанс — идём на Афишу, электронику — выбираем на Маркете. Далее кто-то заказывает через интернет, а кто-то идет в ближайший магазин и покупает выбранное. Ищем банкомат — часто это приложение на твоем телефоне. В итоге получается множество сервисов, суть которых сводится к одному — поиску товаров, услуг и мест в реальной жизни. В тот момент мне захотелось единого, удобного сервиса, который бы всё это делал.

Как результат, спустя почти два года я наконец закончил разрабатывать проект. Как и задумывалось, получилась платформа, позволяющая искать любые товары, услуги и места. Все данные имеют свою структуру, что позволяет делать сложные запросы по множеству характеристик. Также все данные имеют геосоставляющую, что позволяет делать геоориентированные запросы. Запросы можно делать как одной фразой, например, «найти гостиницу с бассейном около Киевской», так и с помощью специальных фильтров.

metafind — пример такого поиска


Поиск начинается с единой строки поиска. В запросе можно указать адрес в свободной форме. Если адрес не указан, то будет произведена попытка геолокации. В результатах поиска выводятся сгруппированные по месту продажи товары, их цены, телефоны, адреса, время работы и специфичные для искомой тематики характеристики. Также в результатах содержатся карта и фильтр для уточнения запроса. Для примера, вот как выглядит поиск лекарств:



При поиске еды или иных тематик — автоматически покажутся другие фильтры и дополнительные характеристики, специфичные для искомой тематики. Также доступна мобильная версия:



Примеры


На данный момент в зону покрытия входит только Москва, по следующим тематикам: лекарства и аптеки, АЗС с ценами на бензин, автомойки и их услуги, банкоматы, терминалы оплаты, гостиницы, кафе, рестораны, еда (из меню), бассейны, билетные кассы и билеты.

Как я уже сказал, можно делать сложные запросы со множеством характеристик: искать по диапазону цен, по времени работы, задавать радиус поиска, задавать характеристики, специфичные для конкретной тематики. Вот несколько примеров:
  1. черная икра в ресторане с караоке около кремля
  2. гостиница с бассейном около киевской
  3. комплексная мойка в выхино
  4. преображенская площадь бассейн 50 метров
  5. банкомат с долларами рядом с пушкинской
  6. спящая красавица на курском вокзале

Покрытие данных пока не полное. Желающие могут оставить заявку на добавление данных.

Почему платформа?


Потому что сейчас это целый комплекс сайтов и сервисов.
  • Непосредственно сам сервис поиска и его открытый API. Сюда же можно отнести паука, который индексирует данные с сайтов, разбирает структуру данных, подсистему мониторинга и многое другое, не видимое для посторонних глаз.
  • metafind.ru — основной поисковик, демонстрирующий все возможности поиска. Плюс мобильная версия.
  • SMS-сервис — возможность делать поисковые запросы по SMS. В ответ приходит большое сообщение (чаще всего из пяти частей) с результатами поиска. Стоимость сообщения около 3,5 руб¬лей с учетом НДС. Пример сообщения: «поиск банкомата Сбербанка около Пушкинской». Можно писать транслитом.
  • playground.metabus.ru — песочница для тестирования API. Позволяет просматривать, редактировать, запускать и отлаживать готовые примеры использования API.
  • export.metabus.ru — подсистема экспорта данных. Например, можно сохранить поисковый запрос, выбрать шаблон RSS и получать новые товары/услуги/места из результатов поиска в свой RSS-ридер. Можно использовать существующие шаблоны и создавать свои (на XSLT).
  • docs.metabus.ru — документация для разработчиков.

Данные индексируются с нужных мне сайтов (у меня нет задачи проиндексировать весь интернет, только сайты по заданным тематикам). Это или первоисточники (например, официальные сайты банков или кафе), или сайты-агрегаторы (например, сайты со списком бассейнов или автомоек). Но в любом случае я всегда вывожу ссылку на источник информации и не претендую на авторство данных. Для большинства источников данные обновляются раз в сутки. В перспективе нескольких лет я планирую, что заинтересованные организации сами начнут выгружать свои данные с помощью API (или прайс-листов), которые будут добавляться в поисковый индекс в режиме реального времени. Данная функция уже реализована, но пока закрыта для публичного использования из-за невостребованности.

Уже сейчас с помощью API можно делать различные поисковые сервисы. Можно встраивать поиск в существующие сайты, делать тематические мобильные приложения или приложения для социальных сетей. Например, для тестирования поиска лекарств я сделал форму, ищущую только лекарства и аптеки:



Разработка


Проект разрабатывается почти два года. Команды нет, я работаю один. Изначально использовал .NET и MSSQL Server. Спустя полтора месяца я понял, что эти технологии не совсем подходят для решения моей задачи, и перешел на Java. По ошибке углубился в технологии: первую версию сделал с использованием Hadoop, HBase и Lucene. В качестве протокола обмена данными между модулями использовался Thrift. Сейчас технологическую основу составляет связка MongoDB и Apache Solr. Все сайты работают в облаке Google App Engine. Сама платформа работает на одном выделенном сервере (EQ4 у Hetzner), паук — на другом (тоже EQ4). Так как я один, то решил по максимуму всё автоматизировать: работает отдельный CI сер¬вер (тоже у Hetzner), множество юнит, функциональных и интеграционных тестов. Публикация на девелоперское и боевое окружение происходит полностью автоматически. Также для внутренних целей активно используется NodeJS. Сервера работают под Ubuntu Server 10.10.

Производительность


Почти уверен, что от хабраэффекта сервер ляжет. Пытался тестировать: все сайты хостятся в Google App Engine, а его тестировать нет смысла. Остается протестировать на нагрузку API (на JavaScript), а это уже сложнее (нужно слать множество уникальных, но при этом реальных запросов). В теории в архитектуре нет узких мест по производительности, все узлы можно горизонтально масштабировать. Но сейчас всё хостится на одном сервере: и база, и поисковые индексы, и веб-сервер приложения. По-хорошему, всё нужно разнести по нескольким серверам, что делать только на время хабраэффекта нецелесообразно.

Суровая реальность


В реальности же многие пользователи не знают даже о существовании адресной строки в браузере. Есть только Яндекс/Google. С них и начинается интернет. Даже если через metabus искать товары и услуги значительно удобнее, всё равно приучить пользователей делать это — крайне тяжело. Есть привычка искать всё через Яндекс/Google — и с этим ничего не поделаешь. Или тратить миллионы на раскрутку. Или искать другие методы.

Как я уже сказал, продвинуть проект как «единый поиск любых товаров и услуг» очень тяжело. Я планирую продвигаться путем создания тематических поисковых систем, тематических мобильных приложений и приложений для социальных сетей. Также планирую развить партнерскую сеть. При этом единый поисковик (сейчас это metafind) будет продолжать работать, постепенно аккумулируя всё больше и больше данных.

Моя цель — сделать удобный, единый, геоориентированный поисковик товаров, услуг и мест, где их можно приобрести. Прозвучит как абсурд, но в базе должны быть абсолютно все данные: начиная от наименований со строительного рынка во Владимирской области и заканчивая меню в московском ресторане. И так будет. Другое дело, что это будет нескоро, и скорее всего — увы, как бы это ни было для меня грустно, — сделано это будет поисковыми гигантами. Не нужно будет в будущем звонить, искать непонятно где в интернете и тем более посещать места нахождения в реальной жизни, чтобы найти искомый товар или услугу. Будет некая единая шина обмена данными, куда организации будут выгружать данные, а множество приложений, сервисов и сайтов будут использовать эти данные для поиска, анализа и обработки. И это будет повсеместно.

Предложение


Если вам понравился проект, то я с радостью готов к разного рода сотрудничества:
  • Конечно же, я готов добавить любые данные(удовлетворяющие минимальным требованиям) или покрыть любые тематики для любых городов и стран. Что вам это даст? Это позволит производить удобный поиск (как через metafind, так и через все остальные сервисы, которые подключены к API) по вашим данным. Соответственно, больший трафик на ваши сайты.
  • Вы можете создать сайт/мобильное приложение/приложение для соц. сети. Я вам предоставляю качественный, обновляемый контент, удобный поиск, возможность поиска по SMS. Вы — делаете приложение. Пример: приложение для автолюбителей, где будут все АЗС, все автомойки, все автосервисы, посты ДПС и т. п. Повторюсь: тематика данных ничем не ограничена.
  • Вы можете создать портал, где будет ценная узко¬специали¬зиро-ванная информация на основе данных, полученных от меня. Пример: я собираю подробные данные с сайтов поставщи¬ков/про¬дав¬цов металлопроката вашего региона, включая цены, наименования, наличие. Вы делаете портал с данными по ценам на металлопрокат, наличием, поиском и т. п. То же самое можно делать для других направлений: поиску автозапчастей, стройматериалов и т. п.
  • У вас уже есть некий ресурс, где можно разместить соответствующие данные. Например: у вас блог о здоровье/красоте. В статьи, где упоминаются лекарства, вы можете добавить блок с ценами или блок с указанием ближайших аптек, где можно купить данные лекарства. У вас ресурс о музыкальных звездах? В профиль музыканта можете добавить блок с ценами билетов на ближайший концерт или местами, где можно купить данные билеты. И всё это без изменений на вашей серверной стороне. Просто статичная вставка HTML- и JavaScript-кода.
  • Если вы создаете промосайт товара, то можете разместить форму поиска мест, где этот товар можно приобрести. Или информацию о ценах на данный товар.

Буду рад сотрудничеству как на коммерческой, так и на некоммерческой основе с людьми, умеющими продвигать подобные сервисы, Java- или JavaScript-программистами, дизайнерами, тестировщиками и любой другой помощи.

Повторюсь, т.к. по запросам вижу, что ищут всё подряд — искать можно только лекарства и аптеки, АЗС с ценами на бензин, автомойки и их услуги, банкоматы, терминалы оплаты, гостиницы, кафе, рестораны, еда (из меню), бассейны, билетные кассы и билеты. Только в Москве.
Tags:
Hubs:
Total votes 55: ↑50 and ↓5+45
Comments24

Articles