Усе видящее Око :: Eye in the sky Панель Управления



Выпуск 207. "Как создать свой поисковик".
Список выпусков :: Как сделать популярный сайт Сделано в kocby.ru Как сделать популярный сайт. Выпуск 207. "Как создать свой поисковик". Сегодня мы затронем слегка такую интересную тему "Как создать свой поисковик". Написание своего поисковика, это такая задача, которая очень удобно масштабируется, удачно делится на подзадачи. Так, простую пробную версию можно не спеша создать за пару дней, а затем уже развивать ее до более серьезного проекта. Труд не пропадет зря. Даже если далее развивать проект не будет желания/потребности, первичная версия вполне подойдет и будет работать на каких-то узких локальных участках. Три источника, три составных части любого поисковика. Первая часть - это хранилище данных, в котором хранится собственно информация, по которой осуществляется поиск. Вторая часть - это Spider, т.е. паук, который ползает там и сям, захватывая информацию и помещая ее в хранилище. Третья часть - это функционал интерфейса, который реагируя на запросы пользователя, выдает наиболее подходящую информацию из хранилища.
© Перепечатка разрешается с установкой ссылки на ресурс http://kocby.ru
Как сделать популярный сайт. Выпуск 207.
"Как создать свой поисковик".
Уважаемые коллеги!

В нашем последнем выпуске...

Операционная система windows 8.1. Первые впечатления пользователя. ::
http://kocby.ru/post/webmaster/text/issue206.html

Мы поверхностно познакомились с опперационной системой windows 8.1, с типичными первыми впечатлениями пользователя. В том выпуске мы узнали, как правильно нажимать кнопку "Пуск", очистить экран, не заблудиться в дебрях, установить удобный и привычный способ переключения языков и т.п.

Сегодня мы затронем слегка такую интересную тему "Как создать свой поисковик".

Кто-то, может быть, возразит - зачем, мол, тратить силы на такую сложную задачу, когда у нас есть такие монстры, как Гугль и Яндекс, которые найдут что угодно и весьма быстро.

На это есть у меня целых 3 контрвозражения.

Во-первых, помимо, Гугля и Яндекса, есть еще несколько десятков разных поисковиков второго и третьего эшелона, которые вполне успешно были созданы, а некоторые даже весьма прилично работают.

Люди старались, тратили силы, время, энергию, деньги, значит, видели в этом какой-то смысл.

Во-вторых, каждый программист за свою жизнь должен написать свой "Тетрис", создать свою поисковую систему, а также придумать надежную защиту от взлома сайта "Пентагона". Кто-то тут подумал: "не придумать защиту, а взломать его к черту!" Но так будет не совсем политкорректно, а санкции и так уже замучали.

В третьих, написание своего поисковика, это такая задача, которая очень удобно масштабируется, удачно делится на подзадачи. Так, простую пробную версию можно не спеша создать за пару дней, а затем уже развивать ее до более серьезного проекта. Труд не пропадет зря. Даже если далее развивать проект не будет желания/потребности, первичная версия вполне подойдет и будет работать на каких-то узких локальных участках.

Три источника, три составных части любого поисковика.

Первая часть - это хранилище данных, в котором хранится собственно информация, по которой осуществляется поиск.
Вторая часть - это Spider, т.е. паук, который ползает там и сям, захватывая информацию и помещая ее в хранилище.
Третья часть - это функционал интерфейса, который реагируя на запросы пользователя, выдает наиболее подходящую информацию из хранилища.

Помощь в создании простейшего хранилища нам окажет сам Великий Гугль следующим образом.

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

Далее, будем считать, что у нас есть файл sitemap.xml, а также софт к нему, который позволяет поддерживать его содержание в актуальном состоянии.

Структура записи файла sitemap.xml примерно такая:
...
<url>
	<loc>http://usa2017.com/</loc>
	<lastmod>2014-12-13GMT11:45:31+00:00</lastmod>
	<changefreq>monthly</changefreq>
	<priority>1.0</priority>
</url>
...

Немного развив это структуру создаем страничку для БД MySQL -
CREATE TABLE IF NOT EXISTS `urls` (
	`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
	`loc` varchar(128) NOT NULL,
	`lastmod` varchar(32) NOT NULL,
	`changefreq` varchar(16) NOT NULL,
	`priority` float(6,2) NOT NULL,
	`title` varchar(192) NOT NULL,
	`description` text NOT NULL,
	`keywords` text NOT NULL,
	`content` text NOT NULL,
	`modirec` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	PRIMARY KEY (`ID`),
	UNIQUE KEY `loc` (`loc`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8; 

Опишим структуру этой таблицы, чтобы совсем все стало понятным.

`ID` - уникальный идентификатор записи.
`loc` - адрес странички в Интернете, очевидно, это сокращение от слова location.
`lastmod` - дата и время последнего изменения
`changefreq` - частота изменения странички
`priority` - рейтинг важности странички, может иметь значения от 0.0 (совсем не важная) до 1.0 (очень важная)
`title` - сюда запишем то, что найдем в теге title на страничке
`description` - сюда запишем то, что найдем в теге description на страничке
`keywords` - сюда запишем то, что найдем в теге keywords на страничке
`content` - сюда запишем то, что найдем в теге body (после очистки от тегов!)
`modirec` - дата и время последнего изменения записи

Теперь пишем программку, которая перетаскивает информацию из sitemap.xml в таблицу `urls`, по ходу захватывая информацию для полей `title`, `description`, `keywords`, `content` на соответствующих страничках.

Кстати, тут я так увлекся, что, заодно, "до кучи", написал также программку для решения обратной задачи: создать файл sitemap.xml на основании информации в таблице `urls`.

Механизм поиска для пользователя очень простой, суть его заключается в следующем SQL-коде:
$select_str = "SELECT `loc`, `priority`, `title`, `description` FROM `urls` 
WHERE (`title` LIKE ? OR `description` LIKE ? OR `keywords` LIKE ? OR `content` LIKE ?) 
GROUP BY `priority` DESC LIMIT " . MAX_RECS_TO_LOAD .";";

Пояснение: там, где знак ? осуществляется собственно подстановка поискового запроса пользователя с обрамленияем слева и справа знаками %.

Попробовать, как работает поиск можно здесь:
http://usa2017.com/search/
Примечание. Здесь и далее я использую для тестирования функционала поиска свой личный сайт usa2017.com на английском языке.

Небольшая инструкция для пользователя поисковика:

Введите поисковую строку на английском языке (в примере contact lenses, т.е. "контактные линзы") и нажмите кнопку "Submit".

Введите поисковую строку на английском языке и нажмите кнопку "Submit".
Введите поисковую строку на английском языке и нажмите кнопку "Submit".


В результате кнопка "Submit" должна принять статус "неактивна", чтобы избежать случайных многократных нажатий, а ниже должны отобразиться результаты поиска.

Отображение результаты поиска.
Отображение результаты поиска.


Для того, чтобы сделать новый поиск, следует починить кнопку "Submit" путем нажатия "кнопки ремонта" (обведена красным цветом ↑)

Вроде бы функционал работает вполне прилично для начинающего создателя поисковых машин.

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

Функционал легко расширяем, очень гибок, его можно использовать как для одного сайта, так и для нескольких.

Примитивный алгоритм ранжирования можно усилить разными способами. Например, придумать коэффициенты значимости, скажем, для `title` - 10, `description` - 5, `keywords` - 2, `content` - 1 и т.п. Можно также считать количество вхождений строк, можно дробить поисковую строку на слова и искать по словам... Короче, тут бесконечное поле деятельности для пытливого ума.

Стоит только иметь ввиду, чем сложнее алгоритм, тем выше нагрузка на сервер, а вот будет ли сложный алгоритм работать лучше простого - большой вопрос.

Вот и все, что хотелось рассказать о создании поисковика. Желаю успеха на данном поприще и создать новый Гугль или Яндекс.

Спасибо за внимание.

~~~~~ Обратная связь ~~~~~

У вас есть два способа реагирования на данный выпуск.

На форуме...

"Как сделать популярный сайт" на форуме :: http://kocby.ru/b/viewforum.php?f=5

Написать лично мне.

Данные для связи на контактной страничке :: http://kocby.ru/contact.html

Ниже дан мой работающий емейл, но доставка через форму на указанном урле надежнее, ее вероятность является почти 100%.
::::::::::::::::::::::::
::: Vladimir Abramov :::
::: va@sumat.ru ::::::::
::: http://sumat.ru/ :::
::::::::::::::::::::::::

### Конец выпуска.


###
Порыв.
Валерий Бородатов. "Порыв".

Если вы планируете вернуться сюда позднее...
Пожалуйста, запомните эту страничку -
URL: http://kocby.ru/post/webmaster/text/issue207.html
Спасибо за посещение этой странички и внимательное отношение к ее контенту и дизайну. Удачи и успеха!
© KOCBY.RU :: перепечатка материалов разрешается с указанием ссылки на домен KOCBY.RU ©
Basket is empty :: Корзина пустая
Close and hide in basket :: Закрыть и спрятать в корзину
***** Реклама *****
Посмотри в зеркало! Что там видно?
Красивая девушка брюнетка слева Красивая девушка блондинка справа
Красивая девушка блондинка слева Красивая девушка брюнетка справа
Наверх ↑