Реализация поисковой системы, прменяя full-text индексы...

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
VAC
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 03.03.2002 (Вс) 3:32
Откуда: Russia

Реализация поисковой системы, прменяя full-text индексы...

Сообщение VAC » 12.05.2005 (Чт) 11:09

Суть:
написал поисковую систему в локальной сети по шарам пользователей.
Т.е. программка шарится по всем открытым папочкам в сети и всё что найдёт записывает на mssql server.
Табличка выглядит так: Table: Files
CompName: nvarchar(50), Share: nvarchar(256), Path: nvarchar(601), Name: nvarchar(256), id: numeric(9)

Сеть насчитывает около 3000 компьютеров, потому сканнер сканирует примерно часов пять всю сеть, после чего ждёт 7-мь часов и запускается заново.

Сервер очень слабенький: Селер 400, 384 мб оперы.
Стоит связка w2kas+mssql2k+iis
На iis один срипт - запрос
На sql - одна табличка.
Табличка в среднем содержит около 2500000 записей - число варьируется.

Принцип работы сканера следующий:
В сетевом окружении ищет включенные компы, перед подключением пингует и если связь нормальная, на sql выполняет (delete from Files where (CompName = ‘\\DOMAIN\’)) - убивает все записи ранее найденных файлов на этом компе. Далее сканирует шары и записывает все, что нашёл заново.

Всё бы ничего, но искать, применяя LIKE не возможно, если в запросе есть знаки % - ‘kerio%’. Скрипт вываливается по таймауту.

При использовании full-text search (select * where contains(Name,’kerio’) order by CompName, Share, Path) ищет отлично, но тут тоже столкнулся с проблемами.
Индексировал два поля в табличке - Path: nvarchar(601), Name: nvarchar(256). Но полное индексирование происходит слишком долго – три дня, к тому же табличка индексируется при обязательном условии, что в ней имеются не повторяемые поля, пришлось воткнуть счётчик (id). Но пока табличка индексируется, поисковая программа перезаписывает почти всю табличку заново. Соответственно найти в базе ни чего не получается.

Посоветуйте пожалуйста какое-нибудь решение.
За ранее благодарен.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.05.2005 (Чт) 11:25

попробуй разделить процессы сканирования и поиска по разным таблицам, т.е. у тебя будет одна главная таблица, где ведется поиск и таблица куда скидывает инфу твой индексатор при сканировании сети. После окончания сканирования он переписывает актуальные данные в главную таблицу на основании индекса по 3 полям в таблице CompName+FileName+FilelastUpdateDate

VAC
Новичок
Новичок
 
Сообщения: 26
Зарегистрирован: 03.03.2002 (Вс) 3:32
Откуда: Russia

Сообщение VAC » 12.05.2005 (Чт) 11:51

Такой вариант с двумя табличками рассматривал, но как это реализовать, что бы изменения записывались быстро?!

Мало того, наряду с вновь появившимися записами, нужно удалить те, которых уже нет...

Концепция понятна, но реализуемо ли это малой кровью? =))

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.05.2005 (Чт) 12:00

почему нет?
пиши хранимые процедуры - все должно достаточно быстро работать


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList