<BOBER-3>

<BOBER-3>
Рейтинг
71
Регистрация
16.07.2005
rst:
ну почему... PR его (ведь вывод основывается на PR ) можно посчитать сразу (при краулинге). Так и делается. После этого отсортировать массивы по PR. А они отсортированны изначально - при краулинге. После этого найти интерсекшен, и опять же отсортировать по убыванию PR. А после этого уже выполнять текстовый поиск по первым 10.. А точнее - пока не наберется 10 результатов.
Как сортировать страницы - поисковик знает заранее. Это определяется PRом. А в вашем случае (если вы дойдете до PR) можно хранить отдельно. И сортировка 4000 ссылок по убыванию PR это будет опять же быстрее чем полнотекстовый поиск.

анализ контента, ссылочное ранжирование, фильтры и прочее - все это в учет не берется, да? тогда это бул бы не Гугл

а PR... это же смешно, говорить что сайт с высоким PR займет высокие позиции это все равно, что смотреть на цифры на счетчике и говорить, что хх% от них это переходы с поисковика

ДА, это было бы вполне закономерно, но это не критерий, это скорее показатель

в общем смысл - один PR ничего не решает, т.к. этот PR может быть проказан ссылками по "запрос1" в то время, как поиск ведется по "запрос2"

имхо

rst:
Естественно не все так просто. Но поверьте - это один из принципов. Вы можете посмотреть это даже сами : сделайте запрос по какому-либо слову, где вы будете ожидать, 50 результатов, к примеру. Гугль скажет вам - 50 результатов, и кликните сразу на 5-ю страницу поиска. Гугль вам покажет 3-ю страницу, и скажет, что больше нет страниц. Такое весьма часто встречается. Поэкспериментируйте. Это и яндекса касается и других.

угу, мне кажется, я даже могу примерно объяснить почему так выходит

но дело не в этом... ну вот сами задумайтесь - как можно определить наиболее релевантную десятку, не СРАВНИВ ее с остальными сайтами? никак 🙅

rst:
Нет. Переход ring3->ring0 и обратно в случае виртуальной машины - это ОЧЕНЬ ресурсоемкий процесс. Это не 5000 тактов, как на реальной машине. Это НАМНОГО дольше. А работа ядра всегда есть.

это вы про *nix говорите? 😕

за пример спасибо, завтра уже проанализирую, просто щас уже настрой не тот, наконец-то собрались, сегодня вечером покидаю родной город и немного покатаюсь по стране :буги_вуги_смайлик: 😂 🍻

50мс не хватит для осознания увиденного, но для получения какой-то оценки от подсознания - вполне

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

rst:
Исходя из вашего поста, я понял, что вы находили пересечение трех массивов , где каждый состоит из 4000 элементов. И это вы делали 1.5 часа? Честно, не верю. Ну или я не знаю на чем это писать нужно 😕

как я делал: беру первый адрес из первого файла, ищу его во втором, третьем... беру второй адрес, третий, четвертый и т.д.

есть вариант пооптимальней?

rst:
Можете проанализировать тот же гугль , или более приближенный, и с открытыми исходниками - многосерч. Они выдают и ищут отлько первые 10 результатов. Искать следующие 10 результатов они начинают _ТОЛЬКО_ при нажатии кнопки next. Они никогда не формируют весь result set сразу.

я не компетентен

но-помоему это уже ЧУШЬ: Гугл и прочие наши вэь-поисковики основываются на принципе не "найди первые 10 соответствий и давай выдачу", а найди ВСЕ соответствия, что для них, имхо, явно вообще проблемы не составляет т.к. далее идет более важная задача - СОРТИРОВКА по релевантности... иначе как вы предлагаете получить наиболее релевантную десятку, не сравнив ее со всеми остальными сайтами? хотите сказать, что топ сразу одним махом выбирается? извольте... 😂

rst:
То, что гостевая машина работает быстрее чем реальная? Зря вы так :)

если ее ничего более не обременяет (т.е. не запущено никаких более приоритетных ресурсоемкий процессов), считайте соотношение близким 1 к 1, виртуальная/гостевая машина получит 100% свободных ресурсов даже для нулевого процесса

rst:
А мой поисковик сейчас имеет в файловой системе больше 2 миллионов файлов

он локальный?

и как там организовано все, так как мне предлогали?

rst:
А кто мешает, когда вы найдете список адресов для каждого слова, найти вначале пересечение массивов - чтоб построковый поиск выполнять в тех файлах, в который однозначно есть указанные слова. Этим действием вы еще больше сократите объем информации, которую нужно обработать.

или я Вас не так понял, или именно это я и делал на протяжении 1.5 часов ;)

rst:
И не забывайте - вначале вам нужно всего первые 10 результатов.

сорри, глупости :)

rst:
Как видите - разница в скорости _очень_ существенна.

я бы сказал _вполне_ ожидаема 🙄

Interitus:
Ну так как раз если списки отсортированы - то их слияние выполняется мгновенно, за время, необходимое на чтение.

ааа... вы имеете в виду, что для каждого запроса надо формировать ПОЛНЫЙ список адресов? утопия какая-то... или я снова ниче не понял? 😂

ЗЫ: блин, аж самому интересно, как это всякие вэб поисковики могут так работать? там особых мощностей им не надо - все их мощностя вынуждены лишь большим количество запросов, а тут если сотня за сутки будет - уже хорошо...

Interitus:
Немного не так. В каждом файле храните отсортированный список документов, в котором слово встречается. Тогда при запросе "слово1 слово2 слово3" вы открываете одновременно 3 файла, и последовательно их сканируете. В итоге получение списка документов выполняется за время, необходимое для последовательного чтения с диска трех файлов. Даже если там они объемом 15 мегабайт - это на обычном винте 7200 оборотов - меньше секунды. А еще же не забывайте что кешируется всё, и для популярных слов читать не надо будет. Плюс ещё если файлы открывать mmap'ом - параллельные запросы памяти жрать лишней не будут.

каких доменов? :)

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

конечно, я юзал самый простой алгоритм, сортировка хорошая идея, но практика показала - это в любом случае не в какие ворота не лезит 😒

ладно, это не так все просто, спасибо за помощь, пусть сами думают че делать...

на горьком опыте моих знакомых могу подтвердить слова топикстартера

rst:
Не так.
размер базы (кстати, а кто сказал что это база должна быть (об этом позже) = количество общеупотребимых слов в языке + количество терминов предметной области. А это не больше 500000 слов, а реально это порядка 30000.

ну да, точно :d

rst:
Т.к. если слово в документе встречается 10 раз, то в таблице ссылка-то должна быть одна.
Не так ли?

ну да, а кто спорит?

rst:
получим 400000 ссылок. Это не так уж и много кстати. Всего 12 мегабайт информации

всего 12 мегабайт 😮 😂 и то там вложенность файловой структуры такая, что я думаю, скорее все 24 МБ выйдет в результате... ;)

а теперь попробуем посмотреть на алгоритм, как все это будет работать для средненького запроса "слово1 слово2 слово3", предположим что каждое из слов встречается всего в 1% файлов - по 4000 ссылок на каждое из слов, что нам надо сделать? берем файл с адресами файлов для "слово1", разбиваем его на подстроки - 4000 адресов и ДЛЯ КАЖДОГО 😮 ищем вхождение подстроки в файлы с адресами для "слово2" и "слово3", а если вдруг еще понадобится проверка частичного вхождения, прийдется со ствигом +1 проверять все файлы попарно, пока не останется одна пара

в общем это огромная нагрузка явно будет, но я щас все же устрою тест

по поводу хранения в файлах - есть свои "+" и "-", не думаю, что это хорошая идея, удобная, но не надежная и значительно более тормознутая

+++

результаты теста: проверка наличия 4000 адресов в одном файле с 400000 адресами занимает... 40-45 минут :D (само чтение файла примерно 0.03 сек)

т.е. лишь составление списка документов для 3-х словного запроса займет полтора часа и мы получим просто список документов, в которых есть эти слова и ничего более - мы даже не будем знать идут ли они подряд - т.е. так как нам и надо или просто встречаются в тексте - формат хранения даннх не предусматривает сохранения этих данных... :(

Sadie:
подобное слово можно и занести в разряд стоповых

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

ЗЫ: ладно, отвлекусь пока немного, пойду на Яндекс поищу учебник по русскому языку, почитаем... 😂

+++

так, немного почухав свою сонную репу, я все же пришел к выводу что и этот алгоритм не подойдет, объясняю почему: мало того, что хранить даже пусть не 200000-300000, а всего даже 1000 ссылок на файлы к каждому слову будет оочень накладно по объемам, так еще если нам надо осуществить поиск по запросу "слово1 слово2", нам прийдется обломаться т.к. данный алгоритм не представляет никаких данных о последовательности слов в документах, лишь о их наличии... вариант когда идет просто [слово - документ - порядковый номер в документе] не подходит т.к. даже при скромных подсчетах (количество файлов*примерное количество слов в каждом файле=количество строк в бд): 400000*2500=1 000 000 000, а то и более 😮

ну что, я сделал все что мог? 🍾

rst, ну по сути это то же самое что писала Sadie

теперь непонятно как поступать:

- просто резать материал на слова в исходной форме и забивать их в таблицу с адресом файла? глупо - тогда количество строк будет равно количеству слов индекса, не знаю какая БД такое потянит

- добавлять новое слово с адресом файла только в том случае, если слова там нет? и добавлять новый адрес файла к слову, если оно там уже есть? ну, а как быть если это не стоповое слово и оно есть в большенстве документов? и таких слов будет мноого, ставить на них до 400000 и более указателей? это грубо говоря по 30-40мб информации о файлах на каждое такое слово + это же еще и парсить прийдется, не просто тянуть как ношу, нам ведь надо будет определить набор документов

я в замешательстве :(

Всего: 897