От поисковика на сайте до собственной поисковой системы
В этой статье хочу обсудить с Вами такую проблему как поиск на сайте и предложить свой вариант ее решения. В сети огромное множество сайтов, которые оснащены отвратительным поиском, еще больше сайтов вообще без этой функции. Даже вошло в привычку не искать на сайте, а вбивать в поисковик «запрос site:domain.com» или просто «запрос domain». Почему такой важной вещи, как поиск, уделяется так мало внимания? Давайте разбираться вместе.
Давным давно, когда можно было увидеть Pege Rank, а вебмастера играли на ТИЦ в карты, я создал свой первый сайт на тему автомобилей. Работая на простой CMS, он висел на дешевом хостинге без возможности установить базу данных. Тогда впервые мне пришла идея претворить свой первый проект в крупный портал с удобным поиском. Как только я поделился этой идеей со своим другом, который в то время успешно занимался разработкой и продвижением сайтов в поисковых системах (ПС), сразу же получил неутешительный фидбэк. Мол, это возможно, и даже одному клиенту он попытался это сделать, однако это настолько сложно, что проще сделать еще несколько сайтов и добавить их в сапу, чем заморачиваться над одним проектом с туманными перспективами монетизации. Что-то подобное я уже слышал от сварщика дяди Васи, когда пришел к нему с просьбой сварить две алюминиевых детали. Он долго рассказывал о специальных электродах, которых у него нет в наличии, аргоне, и что в молодости он с напарником из алюминия смастерил небольшой летательный аппарат, но в моем случае проще отказаться от алюминия и сделать все из обычного железа.
С тех пор прошло много апдейтов ПС, и что же мы видим сейчас? Есть ли простое и быстрое решение, дабы сделать поиск на сайте? Так сказать, появилась ли у дяди Васи аргоновая сварка? Расцвели ли яблони на Марсе? Провел ли Илон Маск тест-драйв новой Tesla Mars? Запустили ли Джеймса Уэбба в космос или до сих пор его тёзка переворачивается в гробу?
Итак, вернемся к нашим баранам. Когда говоришь фразу «поиск на сайте», у ребят, которые в теме, сразу есть готовый ответ Elastic или Sphinx. А когда говоришь «собственная поисковая система», то они отвечают — Elactic Site Search, но это очень дорого! Так, стоп, здесь, пожалуйста, поподробнее! Есть бесплатное решение, а есть такое же, но по высокой цене. Кто покупал Windows у Microsoft в нулевых, когда работали радиорынки?
Как говорится, дьявол кроется в деталях. Elastic и Sphinx- это поисковые движки, которые ищут по базе данных сайта и являются достаточно хорошим решением, если у вас один сайт. Если сайтов большее количество или нет возможности получить доступ к базам данных сайта, или она вообще отсутствует, то это не лучший вариант. Теоретически можно написать краулер, который будет сканировать сайты, сохранять полученную информацию в базу и там уже использовать для поиска Elastic или Sphinx. Но это лишь умозрительно, я, по крайней мере, готовой реализации не встречал.
А что там с платным Elactic Site Search?
За поиск только по одному домену до 5К страниц необходимо будет заплатить $79/month, а если нужен поиск по большему количеству сайтов и страниц, то — $199/month + $30 за каждый сайт и столько же за каждые дополнительные 5К страниц. Если я захочу сделать поисковую систему, где будет 1000 интернет магазинов, то это будет стоить $199 + $30*1000 = $30 200 без одного доллара в месяц?
Да!
А как это вывести в профит?
Никак!
А ведь так хотелось сделать поисковик, в котором можно было бы искать рецепты с картинками или агрегировать сайты по недвижимости и выводить в серпе адрес, планировку квартиры, телефон продавца/арендодателя или собрать информацию о продаже автомобилей со всех досок объявлений и не только.
Неужели все эти мечты разобьются о непреодолимую скалу высотою в $30 200/month? Неужели мечты о собственной поисковой системе останутся лишь слабыми электромагнитными импульсами в глубинах моего мозга, периодически вспыхивающие воспоминаниями в момент троллинга знакомыми программистами, которые неосторожно были посвящены в эту безумную идею?
Нет! Not! Non! Net! Não! No! Nie! Нi!
Именно столько языков понимает поисковая система Kavunka, автором которой я являюсь. Как и обещал в начале статьи, это мой вариант решения проблемы поиска на сайте и создания маленькой поисковой системы. Прям как маленький свечной заводик, к которому потянется вереница интернет-верующих в силу товаров и услуг. В поисках низких цен и заветных скидок, они создадут, пусть небольшой, но такой вожделенный интернет-трафик. А в период великих праздников, как-то «черная пятница» и «предновогодние скидки», мощности домашнего датацентра будет не хватать и придется отправляться в святая святых — на небеса к Амазон и заказывать дополнительные серверы для покрытия поисковых нужд интернет-поломников. Уж прости меня, дорогой читатель, но без стеба над столь авантюрной идеей это выглядело бы по-детски наивно. Несмотря на то, что в современном мире принято раздувать щеки, демонстрировать важность и революционность своего продукта, даже если это всего лишь приложение «фонарик», я убежден, что самокритика и самоирония принесут больше пользы продукту, нежели безумная любовь к своему творению и болезненная реакция на хейт.
Давайте посмотрим, что там у нас под капотом у Kavunka 2.1
Более 20K строк кода чистокровного Си будут стабильно работать на одном ядре с 1 GB RAM под управлением CentOS 7 и держать в индексе 10 сайтов по 1000 страниц. Если у Вас домашний ПК или сервер с большим объемом оперативной памяти, то легко можно загнать в индекс миллионы страниц. Кеш с индексом одного миллиона будет весить всего 150GB. Вы спросите, почему так мало? Потому что в кэше хранится чистый текст без тегов и javascript — кода.
Как было уже сказано выше, софт распознает 8 языков: ru, en, it, fr, pt, es, pl, uk. В индекс попадут страницы нужного вам языка, а встроенные алгоритмы будут фильтровать страницы с неуникальным контентом и плохим качеством.
В Kavunka 2.1 реализован стемминг, добавлена возможность присоединять к выдаче результаты веб-скрепинга, это позволило сделать выдачу более репрезентативной. Для сканирования javascript сайтов предусмотрен способ получения html-кода с помощью Firefox при использовании Selenium WebDriver.
Более подробнее о веб-скрепинге
Делается сие чудесное действие параллельно с краулингом по заранее созданному шаблону. Для этого в админ-панеле присутствует вкладка TESTER где легко создаются и тестируются регулярные выражения, производятся другие настройки веб-скрепинга.
Можно установить пороговое значение количества полученных полей для добавления страницы в индекс.
Управление поисковой системой и мониторинг процесса сканирования осуществляется с помощью дружественного веб-интерфейса. Администратор ПС максимально избавлен от необходимости работать с консолью.
Особенности и недостатки
Основной особенностью является то, что Kavunka не использует базы данных, индекс и данные хранятся в файлах. Является ли это недостатком? Считаю, что нет! Теперь, справедливости ради, о недостатках:
- ассоциативный массив состоит только из словоформ запроса;
- отсутствует база знаний;
- отсутствует сознание и, как следствие, поисковая система не может рассуждать о смысле жизни.
Где можно увидеть пример и как установить?
В качестве демонстрации я создал агропоисковую систему. Можете посмотреть на результат запроса «саженцы абрикосов» или «клубниииииика»
Для установки поисковой системы нам понадобится CentOS 7 с уже установленными apache и php. Устанавливаем wget:
sudo yum install wget
Скачиваем скрипт, который произведет необходимые настройки и установит софт:
wget -P /tmp/ https://kavunka.biz/downloads/x6w7dfty5f87se4d1fg7o3sdr/install/kavinstall.sh
Делаем скрипт kavinstall.sh исполняемым, устанавливаем владельца и приступаем к установке:
chmod +x /tmp/kavinstall.sh
chown -R root:root /tmp/kavinstall.sh
/tmp/kavinstall.sh
Далее величайшее произведение Казимира Малевича будет осквернено следующими надписями:
KAVUNKA installation
1) KAVUNKA + Selenium & additional repositories + firewall, iptables and SELinux configuration"
2) KAVUNKA + firewall, iptables and SELinux configuration"
3) exit
На первый взгляд кажется все предельно понятным, но позвольте мне дать некоторые рекомендации:
- если Вы максималист и хотите взять от ПС все по максимуму, не раздумывая, жмите 1;
- если Вы оптималист и не собираетесь добавлять в поисковую систему javascript-сайты — пункт 2 то, что Вам нужно;
- если же Вы скептик, и доверяете только известным брендам в сфере поиска, пункт 3 создан специально для Вас.
После завершения установки и перезагрузки сервера необходимо в браузере набрать http://[IP-address]/kavunka-admin/
[IP-address] — комбинация натуральных чисел и точек, которые можно узнать, набрав в консоли волшебную последовательность букв:
ifconfig
На этом этапе Вы должны попасть на страницу авторизации (admin:123456). Далее Вас будет ожидать зеленая надпись «Getting License!» требующая ввести License ID и KAY. За всем этим отправляемся сюда, регистрируемся и создаем лицензию в CL Panel. В поле «Server IP» необходимо ввести внешний IP-адрес. Для получения используйте:
wget -O - -q icanhazip.com
Выбираем язык и жмем +New. После этого будет сгенерирована лицензия с определенным ID и KAY. Срок действия лицензии составит 14 дней, если Вы не собираетесь использовать программное обеспечение Kavunka в коммерческих целях, по запросу в сапорт ее можно бесплатно подлить на 180 дней.
Процедура добавления сайтов очень проста. Переходим во вкладку «TASKS», нажимаем длинную синюю кнопку «add+», выбираем «Octopus» и в поле «Start Page» вводим страницу, с которой краулер начнет сканировать сайт. Если Вы не максималист и не хотите сильно нагружать сканируемый сайт, уменьшите число в поле «nit» до 200. Далее опять длинная кнопка «add+», выбираем «Worder», жмем «OK», и последний раз жмем «add+» потом «Kavunka» и «OK». В бордовой таблице «List Table» находим кнопку «Start», жмем, выбираем «Start» потом «OK». Теперь можно откинуться на спинку кресла и наблюдать, как работает поисковая система. После завершения всех процессов, вы можете перейти во вкладку «SEARCH» и попытаться найти интересующую Вас информацию на том сайте, который вы отсканировали.