Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Full-text search [D6, IB6.x, FireBird]


Dimedrol ©   (2004-03-05 00:29:00) 

Коллеги, вот приспичило мне подумать над сабжем
"в свете" FireBird-a...
Назревает проект, в котором будет использоваться FB
база, и неплохо бы организовать полнотекстовый поиск
по текстовой информации там.

Подозреваю, что это непростая задача,
а посему - прошу совета:
не подскажет ли кто, как можно организовать
несложную систему полнотекстового поиска по базе ?
Ну, вот как например это реализовали (наконец-то!)
в MySQL, или что-то подобное.

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

Никто не сталкивался ?
Подскажите плиз, куда копать ? С чего начать ?


Dimedrol   (2004-03-05 13:39:00) [1]

2 Карелин Артем ©
Ну это ведь, как я понимаю, то же что говорил "Sergey_Masloff" ?
Так ведь ?


Карелин Артем   (2004-03-05 12:55:00) [2]

Справочник слов завести. И ссылки на источник.


Dimedrol   (2004-03-05 12:48:00) [3]

Мда.
Это может быть вариантом.

А то, что предложил ув. "Sergey_Masloff" ?
Что ты думаешь об этом ?


Digitman   (2004-03-05 09:51:00) [4]


> Что посоветуете ?


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


Dimedrol   (2004-03-05 09:40:00) [5]

2 Sergey_Masloff
Ага...
Ну, кстати, я и подозревал, что так оно и будет.
То есть, это и есть реализация полнотекстового поиска. ;-)
У нас в ооочень древнем проекте такая штука уже есть.

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

2 Digitman
Дааа... вопрос конечно интересный ;-)
Даже растерялся немного ;-))

В принципе мне просто нужен механизм быстрого поиска
слов в тексте, или строке в базе данных.
Я слышал, что поиск where field1 like "%aaaa%"
не самый быстрый из возможных,
и поэтому производители СУБД начали
излогятся и придумывать различные фичи,
как-то "полнотекстовый поиск".
То есть это "алгоритм+иструмент" для обеспечения
более быстрого поиска текстовой информации.

Наверное наиболее понятно ;-) он реализован в последних версиях
MySQL-а.
Там при создании таблицы нужно указать
по каким полям строиться полнотекстовый индекс.
И потом если искать по этим полям с особым Sql синтаксисом,
то процесс поиска занимает куда более короткое время,
нежели поиск LIKE-ом.
Он описан тут:
http://www.mysql.com/doc/en/Fulltext_Search.html

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

Вот я и занялся поиском чего-нибудь более "легковесного"
и легкого в реализации.

Ну...
Что посоветуете ?


Sergey_Masloff   (2004-03-05 09:23:00) [6]

>С чего начать ?
1) С выбора средств адекватных задаче
2) Если уж приспичило именно FB то реализуй руками. Парси руками BLOB на словоформы, строй по ним индексы и ищи по индексной таблице. Конечно пару книжек прочитать придется но вобщем-то военного ничего нет.
Поясню свою мысль - у тебя появляется таблица из пары столбцов - строка и ссылка на таблицу с информацией. Допустим у тебя аннотация к книжке:
 "в этой книге приводится справочный материал по языку SQL, чтавшему промышленным стандартом интерфейса реляционных баз данных..."
 Записана в BLOB в таблице TABLE1 в кортеже с идентификатором ID = 12345.
 Твоя задача построить таблицу ссылок TABLE2
 INDEX_STR  TABLE1_REF
 "книга"      12345
 "справочный" 12345
 "материал"   12345  
 "стандарт"   12345
 "базы данных"12345
и так далее

Ну и потом отбирай нужные записи по наибольшему числу соответствий. Проблема в том как разобрать текст на словоформы - это уже наука в двух словах не рассказать. Читай умные книги.


Digitman   (2004-03-05 09:11:00) [7]

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


Dimedrol   (2004-03-05 09:03:00) [8]

Что прямо вот никто не сталкивался... ? :-(


Наверх

Титульная страница Поиск, карта сайта Написать письмо