Страница 1 из 1

Доступ к документам по ключевым словам

Добавлено: 27 дек 2006, 10:29
Хыиуду
Есть некоторая БД, в которой хранятся документы и сопоставленные им ключевые слова. Связь между документами и КС - "многие ко многим". Пока не знаю, как лучше это организовать: то ли ввести в таблице документов поля КС1, КС2, КС3, КС4 (ключевых слов не больше 4 для каждого документа), то ли сделать поле типа "массив" (оно, кстати, есть в MySQL вообще?), то ли сделать таблицу с парами "КС - документ".
Так вот, доступ к БД происходит через РНР-скрипт: пользователь в строке вводит несколько ключевых слов, база должна выдать ему те документы, для которых все ключевые слова присутствуют в этой строке. Как лучше сделать: разбить строку на отдельные слова средствами РНР, а потом передать в MySQL массив слов (если да, то как это делается?), либо передать строку и разбивать ее уже средствами MySQL (если да, то опять же, как это делается?)

Re: Доступ к документам по ключевым словам

Добавлено: 02 янв 2007, 22:17
AiK
1) Массив передаётся через IN, т.е. что-то вроде

Код: Выделить всё

... where text in ('слово1', 'слово2','словоN')
2) Возможно, имеет смысл ознакомится с fulltext search...

Re: Доступ к документам по ключевым словам

Добавлено: 03 янв 2007, 14:55
Дионис
Думаю, надо делать три таблицы:
1. Табла Docs:
- IdDocs - счётчик
- Doc - мемо, текст документа
- куча полей типа Аффтар, дата, тема, и т.д.
2. Табла Dict:
- IdWord - счётчик
- Word - текстовый, само слово
- несколько полей типа признак слова (глагол, сказуемое, причастие...), словоформы и т.д.
3. Табла Scan
- IdScan - счётчик
- IdDocs - связь с таблицей Docs
- IdWord - связь с таблицей Dict

Далее, требуется модуль обработки (парсинга) документов, который производит поиск по документу слов и их форм (выпить, выпивать, напиться, напоить, запить...), вычленяет его (слова) основную форму и производит поиск в таблице Dict. Если не нашел, то заносит в таблицу Dict это слово и его формы (грамотный парсер нужон, или вручную). Когла и если в таблице Dict есть это слово, то в таблу Scan нужно внести IdDocs и IdWord.

Далее, весь поиск осуществляется выборкой по таблице Scan, либо по полю IdWord (ищутся документы, содержащие такое слово и/или его словоформы), либо по IdDocs (искать все словоформы данного документа), хотя последнее - не очень информативно.

Re: Доступ к документам по ключевым словам

Добавлено: 03 янв 2007, 17:15
Хыиуду
AiK писал(а):2) Возможно, имеет смысл ознакомится с fulltext search...
А где можно с этим зверем поближе познакомиться?

Re: Доступ к документам по ключевым словам

Добавлено: 03 янв 2007, 20:27
Yurich
Хыиуду писал(а):А где можно с этим зверем поближе познакомиться?
Он есть в MySQL'е. Смотри здесь: http://dev.mysql.com/doc/refman/4.1/en/ ... earch.html