Как я создавал поисковик с нуля: личный опыт
Всем привет. Меня зовут Азат Юлдашев. Я учусь на первом курсе образовательного центра «Алабуга Политех» по специальности «Программирование Python». Хочу поделиться с вами опытом создания поисковика.
В начале учебного года нам выдали задание по созданию поисковой системы. На первом этапе необходимо было сделать максимально простой поисковик, который получал слово и возвращал предложения в блок, в котором оно содержится. Здесь делался упор на алгоритм поиска.
На втором этапе нам нужно было реализовать полноценный проект поисковика: самим придумать его концепцию и добавить различные функции. Я не стал добавлять много фишек, а решил сделать продукт максимально удобным, быстрым, красивым и завершенным.
Разработка началась с проектирования. Идея заключалась в том, чтобы сервер распознавал статьи с новостных сайтов и загружал их в базу данных. После чего пользователи могли зайти на сайт, ввести поисковый запрос и увидеть список новостей из мира технологий.
Расписав концепт проекта, я приступил к дизайну. Оформление сайта постарался сделать простым и понятным для посетителей. Дизайн всех страниц поисковика создавался в программе Figma. Дизайн мне хотелось сделать в стиле минимализм, чтобы он выглядел аккуратно и красиво. Для этого я начал изучать дизайн схожих сайтов и пришел к выводу, что главная страница должна состоять из строки поиска, названия сайта, переключателя темы и моего тега для подчеркивания авторства. Выполнить сайт решил в монохромных цветах, чтобы он не сильно бросался в глаза. Максимальную ширину ограничил 800 пикселями для того, чтобы на широких мониторах поиск не разъезжался по сторонам и находился в центре. Далее по подобию главной страницы я оформил и остальные. Упор был сделан на то, чтобы это было легко реализовать и анимировать все элементы.
После работ над дизайном я сделал мобильные версии всех страниц. На завершающей стадии посмотрел на удобство при пользовании с телефона и компьютера.
Затем началась самая сложная и ответственная работа по разработке. В процессе разработки возникали сложности и пришлось обучаться по ходу работы. Начал с создания сервера, затем установил библиотеки: для серверной части проекта использовались Django и Django Rest Framework, а для клиентской — React.
Cоздал проект, под которым я подразумеваю создание определенной структуры папок и автоматической установки дополнений необходимых для удобной разработки. Для создания проекта на сервере необходимо ввести команду: python manage. py startproject. А на клиенте: npx create-react-app
Затем описал структуру базы данных. У любой базы данных есть определенная структура хранения данных и ее нужно определять заранее. Так, в библиотеке Django она описывается в файле models. py, в данном случае потребовалось создать лишь одну таблицу для новостей, состоящей из заголовка, текста статьи, ссылки на исходник и даты создания.
Далее, так как по задумке на моем сайте поиск осуществлялся по новостям с других сайтов, их нужно было загрузить к себе в базу данных. Для загрузки я узнал url- адреса страниц с новостями и с помощью библиотеки requests загружал их, а затем парсил с помощью библиотеки Beautiful soup 4 и заносил в базу данных через Django ORM.
Теперь осталось реализовать функцию поиска. В качестве поискового движка и базы данных для хранения поисковых индексов использовался Elasticsearch.
Как все это работает: пользователь заходит на сайт и пишет поисковый запрос, React отправляет запрос на сервер, который принимает его и формирует поисковый запрос для ElasticSearch. Далее он возвращает отсортированные результаты поиска от лучших к худшим, а также подсвечивает найденные совпадения. Во время поиска используется проверка похожих слов, в связи с этим не стоит беспокоиться, если вы ошиблись при запросе — в результатах все равно выйдет нужная вам информация.
Больше всего проблем при разработке доставила настройка всего этого на сервере с использованием Docker, который по факту должен был упростить работу, но только усложнил ее.
К примеру, ElasticSearch никак не хотел запускаться внутри Docker-контейнера на сервере с 1 гб оперативной памяти, для этого пришлось устанавливать переменные окружения для ограничения его потребления. В данном проекте было использовано много крутых технологий, с которыми я еще не работал. Открытием для меня стало использование TypeScript, благодаря которому редактор кода автоматически дополняет код, рекомендую использовать его на всех более менее крупных проектах, так как это сильно ускорит разработку. Также новинкой для меня стало встроенное в браузер распознавание голоса, которое я использовал для голосового ввода.
На финальной стадии сверстанный сайт объединил с сервером и поисковик был готов.
Перед презентацией руководителю я протестировал работу следующих функций: скачивание, парсинг, сохранение новостей, поиск по словам, голосовой ввод, переключение сайта и другие. Лишь после финального теста поисковик был запущен на сайте и готов к демонстрации перед широкой публикой.
Работа над проектом заняла месяц, за это время я узнал много нового для себя. В процессе создания поисковика лишний раз убедился в том, что информация лучше всего запоминается именно на практике, когда ты сталкиваешься с проблемами и находишь пути их решения.
На кого рассчитана эта статья?
Скачал твой ценный комментарий на память.
Поясняю: молодой человек учится разработке, учится писать тексты на русском языке. У него вроде бы кое-что получается.
Что в таком случае делают приличные люди? Правильно, одобряют.
А я вот ваш комментарий скачаю. Если я буду готовке учиться, например, вам будет интересен опыт первой яичницы? Я не против поддержки начинаний, но заходя на информационный ресурс я ожидаю определенный уровень информации, определенную тему и тп.
Идея «а давайте всякую фигню про разработку фигачить на вц» - хреновая идея. Почему автор на Хабре это не написал, например? Потому что статья такого уровня там не прокатит, наберет минусов по самые помидоры, и скорее всего вообще не выйдет из песочницы. И поэтому Хабр имеет авторитет.
Круто, что парень учится, но учиться он может на своем блоге. Для чего такой статье аудитория ВЦ? Что полезного для вц от этой статьи?
Просто берете, пролистываете на главной и всё. Нет, обязательно надо зайти, свою душноту излить. Эту стрелку и в обратку можно развернуть - не нравится, ищите другие ресурсы без подобного материала, подходящие именно вас.
Парнишка молодец, желаю успехов в развитии!
Я вижу интересный заголовок - как человек делал поисковик с нуля. Ух ты, думаю, сейчас какие-нибудь интересные алгоритмы или кейсы будут.
По факту, вся суть статьи сводится к "как я сделал курсовую работу на первом курсе".
Почему это должно быть нормально?
Вы на VC приходите за интересными кейсами, новостями и тд или кого-то по головке погладить за что-то даже не выдающееся, а просто обязательную проделанную работу? Ну давайте позовем всех однокурсников парня, расскажут что у них получилось, всем напишите какие они молодцы. Потом и с других ВУЗов и групп подтянем. Вот классно будет на VC.
Если вам такое интересно - рекомендую вам поискать ресурсы или форумы, чаты для новичков и тд, где народ делится своими начинаниями и радоваться там за них. Я со своей стороны не хочу, чтобы любимый ресурс превращался в площадку с бесполезной информацией.
Вы извините за прямоту, но подобный токсичный стиль - это то, что приходится изживать при коммуникации в интернациональных командах.
Статья этого парня вполне приличная, похвалить толкового новичка - так нет же, опять желчь полилась.
P.S. Репутация хабра вполне известная, и минусов у тамошнего коммьюнити предостаточно.
При чем тут желчь? Если что-то встречает позитивный отклик, этого становится больше. Вы хотите чтобы такого на VC стало больше? Чем это полезней котиков и мемасиков? Почему вы их тут не ожидаете и если вам это интересно идете в другое место?
Еще раз - парень молодец, но такой статье на VC - не место.
Если кому-то хочется потешить ЧСВ или чтобы его по головке погладили - есть другие ресурсы для новичков. В особо критичных ситуациях - психологи.
Я - не психолог и здесь не подходящий для этого ресурс, о чем я и написал.
А знаете что? Я частично с Вами соглашусь.
Скорее всего эта статья вполне профильная для VC - это еще одно продвижение, теперь это "образовательный центр XXX".
Но статья, замаскированная под статью новичка. А дебаты в комментах вполне помогают этому продвижению :)
Мы оба с Вами попались на один крючок, только наживка для нас выглядела по-разному :)
Чувак, я передумал скачивать твой коммент :)
Молодец, классно получается.
Большая часть любой поисковой системы - это краулинг.
Было бы неплохо его тоже реализовать
Что то мне подсказывает, что студент уже превзошел преподавателя.
Ожидание: о, сейчас чувак расскажет как реализовал инвертированный индекс.
Реальность: просто использовал готовое решение.
Ну окей.
ну чо вы сразу. школьник бы начал с инвертированного индекса. а это студент Политеха, сразу понял что изобретать велосипед ни к чему. взрослеет ребенок.
Ну если цель подготовить собирателя крупных блоков, то да, новый собиратель уже готов.
А если цель создать высоклассного программиста, то тут уже pip install не обойтись, он должен уметь писать свое. И написать инвертированный индекс хорошая практика для начала.
.... вот так появился не имеющий аналогов поисковик "Спутник" за 25 млрд. рублей