Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритмы поиска информации 
:(
    Опции темы
PROme2
Дата 22.1.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



Fin, что-то я совсем запутался, каким образом тогда представляется индекс какого-либо документа??? smile
PM MAIL   Вверх
knark
Дата 29.1.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 21.1.2006

Репутация: нет
Всего: нет



Что бы было быстро пиши Хеширование, с если еще и место хочешь экономить, то двоичное дерево полюбому.
PM MAIL   Вверх
Fin
Дата 29.1.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



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


--------------------
Пролетал мимо.
PM MAIL   Вверх
PROme2
Дата 7.2.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



тэкс, народ, наконец выкроил немного времени, по своим сооброжениям и алгоритмам, опираясь на вычитанный материал, разработал структуру индекса БД и методы быстрой выборки в ней, в итоге в тестовой БД на 20ГБ текста, мой рабочий комп выполняет поиск документов (200 тыс мнимых файлов)... ну достаточно быстро, до секунды занимает поиск, для моих целей даже минута не проблема, так что с этим моментом все ясно, спасибо за помощь

сейчас вот осталась только одна маленькая проблемка: поиск производится по каждому слову в отдельности т.е. если в поисковом запросе, например, 5 слов - это 5 независимых поисков по каждому из слов, там выходит очень длинный, но достаточно быстрый sql запрос, который производит выборку соответствующих id документов, в общем он нас не интересует и его можно принять, например, как SELECT id FROM indx WHERE `dat`='bla-bla-bla' так вот проблема в том, что по запросу "слово1 слово2 слово3 слово4 слово5" нужно сортировать документы в порядке убывания количества/порядка слов

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

но так как наш sql запросы для выборки id документа независимы друг от друга, мы запросто можем объеденить их в один огромный запрос и впихнуть туда сортировку документов, вот только как это сделать ума не приложу

или есть другой путь?

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

в общем я опять в полном тупике, буду благодарен за любую помощь и подсказки
PM MAIL   Вверх
Fin
Дата 7.2.2006, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



По каждому слову у тебя будет какой то массив индексов так? Ну в чем же дело. Тут уже алгорит слияния массивов. Сначало отсортировываеш все массивы. потом начиная с первых членов массива, идеш вверх по массивам и смотриш соответствия всех документов.
Например:
В первом запросе получился массив индексов
2 7 25 64 188 269 365
2 8 26 64 189 282 365

Тут не трудно заметить, что в документе под индексов 2 64 365 есть сразу два слова.



--------------------
Пролетал мимо.
PM MAIL   Вверх
SoWa
Дата 8.2.2006, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Кстати, чтобы быстрее искать слово, можно создать для него автомат и тогда сложность поиска станет O(n)


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
PROme2
Дата 8.2.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 4.1.2006

Репутация: нет
Всего: нет



SoWa, спасибо, с этим уже проблем нет

Fin, по результатам эксперемента по среднему запросу получали массив на 20 тыс элементов
опять же, даже при 5 словах в запросе это уже 5 массивов и нам надо же провести довольно много сравнений: документ входит во все 5 сассивов, в один из 4-х (это уже не одна проверка ;)), 3-х, 2-х и т.д.

кроме того специфика там такая, что запросы все будут длинными, 5 слов это минимум

в общем можно и массивами, сегодня погонял на их сервере, довольно шустро, но это очень ресурсоемко выходит, думаю, можно было бы как-то организовать, чтобы после sql запроса уже получать отсортированные данные, вот только как, пока не ясно
PM MAIL   Вверх
Fin
Дата 8.2.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



PROme2 Первое. Как ты организовал все таки поиск? Чтобы от этого можно было плясать.
Второе, Когда индексируеш документ, индексы в словах нужно сортировать сразу. Тогда все индексы по слову будут выходить в отсортированном порядке.
Да кстати, есть алгоритм битовой сортировки. Он является самым быстрым алгоритмом сортировки. Единственный недостаток его, нужно все время настраивать его на данные. Когда я эксперементировал с ним, у меня были следуюшие результаты. На Pentium III 850 Мгц, массив из 1 миллиона 32 байтных значений, алгоритм сортировал примерно за 28 секунд. При этом я алгоритм не слишком оптимизировал. Количество полных проходов данного алгоритма по массиву будет равно количеству бит в числе, по которому идет сортировка.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1492 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.