Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > пишем поисковую машину


Автор: polosatij 9.10.2008, 22:15
был бы признателен, если кто поделился какой-путёвой интермацией, а не первым линком из гоогля..  smile

пасиба  smile

Добавлено через 4 минуты и 1 секунду

http://www.turtle.ru/db/architecture/3_5.html

Автор: fse 21.10.2008, 23:11
Привет. На мой взгляд так далеко непростая задача. Никакой толковой информации не видел по этому в инете, хотя интересовался.
Посему, начал писать с нуля, не сложного поискового робота.
Поделюсь соображениями.
Поисковики знают адреса сайтов, много URL. И для каждой страницы сохраняют её название и текст. Далее, как я понимаю, по запросу пользователя, поисковик ищет наибольшее совпадение текста запроса и в тексте всех страниц. Как я понимаю, это один из самых требовательных процессов... Наверно для ускорения можно придумать систему хеширования запросов. И систему рейтинговости (очередь из наиболее часто востребованных сайтов), чтобы не искать из ВСЕЙ базы данных. Что-то вроде...
Но основной вопрос - ОТКУДА робот знает столько URL?
Из двух источников.
1. Сами авторы регистрируют свои сайты в поисковиках, это выгодно в первую очередь им...
2. Автоматическое сканирование сайтов.
Я писал однажды программу подобную. Жаль инет дорогой, так бы проиндексировал побольше сайтов, интересное занятие...
Программа по сути состояла из трёх частей:
- HTML-парсер, который разделяет контент и теги со всеми ссылками (внешними и внутренне-сайтовыми)
- Сетевая часть (скачка HTML-содержимого по его URL)
- Логика программы: Вводится начальный адрес. Эта страница анализируется, внешние ссылки добавляются в очередь анализа, анализуются внутренние ссылки на некоторую глубину, переход к следующему сайту в очереди. И цикл повторяется.

По многим наблюдениям, все поисковики работают именно так!
Кстати... Подобный "домашний" поисковик может стать настоящим подарком спамера... Т.к. может и ящики находить... Что печально...

Автор: polosatij 1.11.2008, 13:28


fse, то, что ты описал всё о общих чертах.. я не перечёркиваю всю, даже грю спасибА за поддержку темы  smile 

по сути дела, тут "всего одна" трабла => смысловой поиск по системе и поиск с коректировкой.. это меня больше всего интересует  smile 
индескирование страниц просто сделать.. другое, если юзер наберёт "машинЫ", вместо "машина", нужно вытащить, и машина, и машины, и "машинёшки".. вот тут-то и начинается трабла по моему.. нужно писать некий парсер на какой-то язык и, возможно, плясать не только от граматики...  smile 

Автор: MaXL 3.11.2008, 09:36
Недавно передо мной встала такая же задача. Нужно проиндексировать как можно сайтов. И тоже проблема с грамматикой. Я вот думаю может к этому как-то можно расстояние Левенштейна прикрутить, но как пока не придумал. Не считать же при каждом поиске для каждого слова. Да и хранить такие объёмы данных не получиться.

Автор: maxdiver 30.11.2008, 23:03
Ну могу предложить такой вариант. Некто yandex.ru вроде как регулярно организует такие мероприятия (по-моему, даже есть какие-то "школы"), на которых рассказывает о своей поисковой системе, ну вероятно чем "дальше" пройдёшь по ихним мероприятиям - тем больше узнаешь smile
Я как-то случайно попал на подобное, и было весьма интересно послушать их алгоритмы, даже в общих чертах всё понятно было, но, к сожалению, я не смогу здесь восстановить хотя бы примерно их алгоритмы.

Ну ладно, попробую. Примерно такое вот:
По каждому слову есть список сайтов, в которых оно присутствует. Эти гигантские списки распределены между несколькими компами во внутренней сети поисковика, разумеется, там хитрая система над-серверов, которые кэшируют таблички и уменьшают нагрузку на сеть.
Далее, поступает запрос. Он обрабатывается, что-то типа того, что все слова приводятся в "нормальную" форму, предлоги выкидываются. Затем по каждому слову отдельно выполняется поиск (фактически - просто в сетку пускается запрос по такому-то слову, в ответ приходит табличка с сайтами по этому слову, естественно, не всеми, а что-то типа top-200). Затем значит обратно возвращается результат - куча таких списков. Их надо умно помёржить, с учётом структуры исходного запроса. По этому поводу было сказано почти ничего, я думаю, здесь много всяких нахаченных алгоритмов. Ну и при мёрже, да и при выборе top-200, надо уметь сравнивать два сайта. Система такая. У каждого сайта (конкретной страницы) есть перечень атрибутов, сейчас в яндексе их уже порядка сотни, и эти атрибуты - коэффициенты страницы, конкретные её характеристики. Затем по хитрой формулке с другими коэффициентами C1, ..., Cn эти атрибуты объединяются в одно число - общая характеристика страницы, по которой собственно они и сортятся. Ну а сама формулка - судя по всему, даже не полином, ну короче что-то достаточно хитрое и хаченное smile Ну а самое интересное - откуда берутся коэффициенты C1, ..., Cn. Сидят сотни челов, которые занимаются следующей интересной работой: они вбивают в поисковик запросы, смотрят, что им выдаёт поисковик, и потом проверяют, насколько хороший порядок резов получился. Фактически - они сами расставляют рейтинги выданным страницам. После всего этого коэффициенты C1, ..., Cn подбираются автоматически, хитрой программой, в соответствии с выставленными человекоботами рейтингами.

Вот примерно так smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)