Алгоритмы Хранение индексированнйинформации в БД и поиск по ней

12
M
На сайте с 24.04.2002
Offline
1
1698

Пишу поисковик. Есть поле в БД, кот. содержит очищенный от тегов текст на странице. При тестировании проиндексировал 80 тыс. страниц. При таком количестве записей суммарнвй размер поля для поиска 130 Мбайт. Проблема - поиск по такому(минимальному обьему) займет огромное кол-во времени.

Вопрос: какой алгоритм хранение информации и поиск по ней. и где можно найти описание подобных алгоритмов

[This message has been edited by Mambur (edited 24-04-2002).]

[This message has been edited by Mambur (edited 24-04-2002).]

С Ув. Олег Бойко (MamburSoft Inc.)
Sergey Petrenko
На сайте с 23.10.2000
Offline
482
#1

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

Топик переезжает в раздел о сервисах.

M
На сайте с 24.04.2002
Offline
1
#2

Единственное решение, кот. я придумал это создать таблицу уникальных слов, разбивать выбраный на страничке текст по отдельным словам и записывать в таблицу связей: ключ_по_слову - ключ_по_тексту и дальнейший поиск по словам.

Если есь другие интерестные решения, я бы их с удовольствием выслушал!

AiK
На сайте с 27.10.2000
Offline
257
AiK
#3

Как мне кажется, поисковики примерно так и работают.

Только создаётся не таблица уникальных слов, а словоформ.

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

Дальше алгоритм примерно такой: производится "грубый" поиск по всем документам, в которых присутствуют искомые словоформы, а уже затем точный поиск ведётся по какому-то проценту "лучших" документов. С учётом того, что в том же Яндексе с первой страницы досутпны только первые 80 документов (при стандартных настройках), то точный поиск ведётся не более чем по 1000 документов (думаю, что гораздо меньше чем по 1000). Кроме того, поскольку физически все документы рассредоточены по разным серверам, то грубый поиск осуществляют сразу несколько машин. Далее, результаты поисков по наиболее часто встречающимся запросам можно кэшировать, а для самых дотошных посетителей (тех, которые что-то захотят отыскать за пределами первых 8-ми страниц) производить уточнение по мере продвижения их в глубь результатов.

Возможно в реальности всё обстоит не совсем так (или совсем не так ), но такой подход избавляет от поиска по текстовым массивам безразмерных объёмов, а поиск по индексу производится существенно быстрее.

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

Sergey Petrenko
На сайте с 23.10.2000
Offline
482
#4

Совет - выбрось стоп-слова. Наверняка индекс заметно похудеет.

M
На сайте с 24.04.2002
Offline
1
#5

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

И по какому принципу определять так называемые "некоторые веса" словоформ?

Gray, а что Вы понимаете под определением "стоп-слова".

Sergey Petrenko
На сайте с 23.10.2000
Offline
482
#6

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

AiK
На сайте с 27.10.2000
Offline
257
AiK
#7

Нужно в достаточной мере знание языка

Ну без знания языка точно не обойтись

А если поисковик индексирует не рускоязычные сайты!?

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

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

И по какому принципу определять так называемые "некоторые веса"

Этого не знает никто, кроме разработчиков.

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

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

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

Например:

<A HREF="" TARGET=_blank>

Список, понятно, неполный.

[This message has been edited by AlexA (edited 26-04-2002).]

С уважением, Антонов Александр.
VT
На сайте с 27.01.2001
Offline
130
#9

Алгоритмы еще можно глянуть здесь:

M
На сайте с 24.04.2002
Offline
1
#10

А вообще кто-нибудь сталкивался с прогами лексоанализа.

Должны быть шаровые под Unix.

[This message has been edited by Mambur (edited 26-04-2002).]

12

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