как у них это все работает???

1 234
E
На сайте с 12.01.2004
Offline
17
#21
4LF:
eshum, честно говоря про "локальный инвертированный индекс" не стал читать = но примерно понял на каждом сервере хранится часть индекса одного слова, и тогда при запросе параллельно считываются пост-листы (поэтому получается так быстро?)

а если все организовать на одном сервере (не смейтесь), то как организовать индекс?

Для одной машины тоже лучше хранить индексы в нескольких файлах. Например можно их положить на разные диски, что ускорит чтение. Кроме того, так можно частично решить проблему обновления индекса, когда при доиндексировании нескольких документов прийдется "перелопатить" почти весь индекс. А так, разбив индекс на несколько файлов, уже будет легче, т.к. прийдется обновлять всего лишь его часть. Сооветственно при таком обновлении весь документ должен полностью сохраняться в одном файле индекса.

я просто делаю на BerkeleyDB (b+tree) key это id_слова value пост-лист (пока только массив id_страниц). Например предлог "и" то мой пост-лист будет содержать столько элементов сколько проиндексировано страниц (например 1 000 000).

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

Этот массив нужно как-то сохранить в value (делаю на perl'e использую функцию pack и unpack; итог pack ~1сек unpack ~1сек + 1сек на считывание value), прокомментируйте/посоветуйте пожалуйста

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

1) При поиске нескольких слов нужно объединять несколько пост-листов. При отсортированных списках это делается достаточно быстро - бинарным методом или другими более эффективным.

2) Для лучшей компресии, в отсортированных списках принято хранить не абсолютные значения id документов, а относителные (чем меньше значения - тем выше степень сжатия). Например 10, 15, 17, 18, 21 хранится как 10, 5, 2, 1, 3 (т.е. 10, 10+5, 15+2, 17+1, 18+3).

AA
На сайте с 16.04.2001
Offline
70
#22
Ну, во-первых, для слов вроде предлога "и" существует стоп-лист, или просто список служебных частей речи, которые сами по себе ценности в запросе не составляют
Например предлог "и" то мой пост-лист будет содержать столько элементов сколько проиндексировано страниц (например 1 000 000).

Не вижу серьезной проблемы в хранении и обработке "и".

Частотность этого предлога ~3%, следовательно хватит 5-6 бит на одно словоупотребление. Кладем с запасом байт, при скорости чтения 60 Мб/сек за 1 сек можно прочитать 60 млн словоупотреблений, этого хватит на базу с общим словоупотреблением примерно 1,8 млрд. Т.е. около 15 Гб текста. Достаточно для одной машины? И это при простейшем решении.

С уважением, Антонов Александр.
lagif
На сайте с 15.12.2004
Offline
30
#23

AlexA,

А зачем? - вот в чем вопрос? Чтоб жизнь себе усложнять и индекс увеличивать?

Нормальный человек не будет "и" вводить как ключевое слово запроса. Или вы собираетесь по нему искать? :)

Кроме того, поверьте - 3% - это ОЧЕНЬ много :)

При всем при том, 60 млн/ сек. - утопия. При остальных дисковых операциях и многопоточности поиска... или у вас получилось ? :)

Это тоже пройдет...
AA
На сайте с 16.04.2001
Offline
70
#24
А зачем? - вот в чем вопрос?

То, что это есть в яндексе и гугле, недостаточно?

Хорошо, например, для поиска точных фраз, а также инициалов: Иванов И.И. и Иванов А.А. - есть разница, правда?

... или у вас получилось ?

Вы про 60 Мб/с? Эти цифры давал не я - вопрос к постановщику данной задачи.

lagif
На сайте с 15.12.2004
Offline
30
#25

AlexA,

Конечно, недостаточно!

Яндекс и Гугль себе такое позволить могут. Не сравнивайте кластерную систему с одним-единственным сервером и СУБД - беркли ДБ.

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

Кроме того, если такая часть речи встречается в НОРМАЛЬНОМ запросе, не требующем точности, она, скорее всего, учитывается только в окончательном ранжировании.

AA
На сайте с 16.04.2001
Offline
70
#26

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

На второй вопрос я попытался ответить выше, а на первый - в предыдущем посте.

Что до реализации сего в локальном поисковике, то мы это сделали (да и не только мы) достаточно давно. Правда, базы тогда были до гигабайта, машины - первые пентюхи (помните такие?).

Artisan
На сайте с 04.03.2005
Offline
352
#27

Весь этот спор не имеет смысла потому что очень многое зависит от того для чего именно нужна поисковая система.

www.leak.info / ДАРОМ линки конкурентов и забытых доменов
lagif
На сайте с 15.12.2004
Offline
30
#28

AlexA,

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

И вообще - в данном случае "зачем" и "загнется" - две стороны одной проблемы.

Я сама занимаюсь поисковиком, поэтому представляю многие аспекты проблемы.

Artisan,

Конечно, не имеет :) но давай не тыкать пальцами в первого на деревне спорщика :)

AA
На сайте с 16.04.2001
Offline
70
#29

Если можно, Artisan, чуть конкретнее. Желательно, примеры, когда стоит экономить на стоп-словах, строя индекс, а когда нет.

В то, что Вы, lagif, представляете многие аспекты проблем ПС, у меня сомнений нет. Будет время, с удовольствием могу с Вами обсудить и проблемы ранжирования.

lagif
На сайте с 15.12.2004
Offline
30
#30

AlexA,

Правильное ранжирование - недостижимый идеалЪ :D

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий