Кто-то разбирается в поисковых алгоритмах? Нужна помощь.

<BOBER-3>
На сайте с 16.07.2005
Offline
71
1930

хороший друг попросил меня

я, к сожалению, только развел руками

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

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

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

в принципе все легко, нинадо даже ничто никак католагизировать, просто нужно осуществлять поиск текста по документам

оказалось бы тут можно даже системными средствами windows справится, но не тут то было: документов таких около 400000 файлов общим весом примерно 15гб...:rolleyes: :eek:

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

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

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

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

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

итак, конкретные проблемы:

- организация базы данных - как и в каком формате хранить индекс файлов?

- алгоритм поиска - как в готовой базе данных найти участок текста (документ), воответствующий запросу?

всем заранее большое спасибо за любое содействие в решении проблемы

«Катастрофы дизайна (http://designs-crash.blogspot.com/
R
На сайте с 19.01.2006
Offline
60
rst
#1

Сэкономь им деньги, убеди использовать mnogosearch, или sharepoint (последний предпочтительнее). а то получаетя - но мы пойдем своим путем.

а по теме - самый простой способ - храниь в базе текст документов. потом делать по ним поиск типа select .. like . потом сохранять результат в кеш. при переиндексации ресетить кеш.

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

www.captchabot.com (www.captchabot.com) - распознавание captcha (http://www.captchabot.com)
Sergey Petrenko
На сайте с 23.10.2000
Offline
482
#2

Во-первых, есть куча поисковиков с открытым кодом - mnogosearch, aspseek и т.д.

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

.kero.
На сайте с 03.04.2005
Offline
142
#3

Индекс где находиться будет, откуда будет вестись поиск?

A
На сайте с 19.08.2005
Offline
47
#4

Да просто поставьте себе программу типа Архивариус 3000 - поиск по локальным документам любого формата. Создает индекс на диске и ищет по нему со скоростью ветра :)

I
На сайте с 22.10.2005
Offline
58
Iso
#5

Если не ошибаюсь, google desktop резво ищет по локальному компьютеру. Может это и есть самое простое решение?

<BOBER-3>
На сайте с 16.07.2005
Offline
71
#6
.kero.:
Индекс где находиться будет, откуда будет вестись поиск?

в этом то и вопрос 🙄

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

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

благодарю за ответы

если еще у кого какие мысли, буду рад выслушать тут / в личке

R
На сайте с 19.01.2006
Offline
60
rst
#7

Пришла еще одна мысль в голову :

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

А дальше лучше заниматься не генерацией индексов и т.д. (представь сколько ты разрабатывать это будешь), а распараллеливанием. Пусть купят 3-4 сервера под это дело, и распредели базу по этим серверам. При поиске сразу же запрос распределяй на 4 сервера параллельно, а потом объединяй результаты. Будет достаточно быстро. А насчет индекса (могу конечно ошибаться) - мускуль сам проиндексирует поля.

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

<BOBER-3>
На сайте с 16.07.2005
Offline
71
#8

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

а пока устрою тест селекта...

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

Sadie
На сайте с 11.04.2005
Offline
64
#9

А вот зачем-нибудь мне захотелось высказаться... :)

Итак, на этапе индексации обходим все документы. Как уже предложил rst, переводим слова в базовые формы. Составляем индекс встречаемых в документах слов. Индекс можно организовать примерно как:

-слово

--адрес документа

--кол-во употреблений слова в документе

--адрес следующего документа...

...

--нечто, что указывает, что документы к данному слову кончились

При желании, составляем вспомогательный индекс, содержащий только само слово и адрес его секции в основном индексе.

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

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

Ранжируем по счетчику из той же базы - по сумме употребления всех слов из запроса.

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

Новости без комплексов (http://www.kompleksov.net/) | ЖЖ (http://sad-sadie.livejournal.com/)
R
На сайте с 19.01.2006
Offline
60
rst
#10

Бобер, вы зря недооцениваете возможности мускуля.

В свое время я работал с базами размером в несколько миллионов записей. Все было весьма шустро. Так что (имхо) наворачивать бесполезно.

Рекомендую скорость селекта погонять.

А индексы строить - это (имхо) будет весьма долго по разработке. И не думаю, что быстрее по скорости. Мускуль он ведь тоже индексы строит :)

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