SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.08.2010 19:50:39

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Оптимизация полнотекстового поиска.

Здравствуйте.
Есть ли возможность настроить полнотекстовый поиск что бы он не искал каждое подходящее слово т.е
в запросе "MySql для чайников" будут найдены все записи соответствующие каждому из слов. Особенно "для" вообще в огромном количестве записей встречается но это не беда можно занести "для" в стоп слова. Но что делать если в базе 700 тыс. записей. и среди них много часто встречающихся слов, например слово "пособие" его уже в чёрный список не засунуть.
При запросе  "Математика. Пособие  для подготовки к ЕГЭ" будет найдено огромное количество записей. В моём случае
более 50 тыс. что очень сильно отразится на скорости выполнения. Хотелось бы чтобы нашлось ни каждое вхождение слова, а что то более конкретное т.е чем длиней запрос тем меньше результатов поиска, а не на оборот.

Отредактированно Марк (25.08.2010 19:52:05)

Неактивен

 

#2 25.08.2010 20:36:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация полнотекстового поиска.

На самом деле тут Вы описали две задачки, а не одну.

1. Задачка «убрать часто встречающиеся слова из индекса». Она реализуется
автоматически: если слово встречается больше, чем в половине документов,
оно выкидывается из индекса как обычное стопслово.

2. Задачка «чем более длинный запрос, тем меньше результатов поиска» —
она решается полуавтоматическим способом — смотрите на логический режим
поиска: http://dev.mysql.com/doc/refman/5.1/en/ … olean.html

Неактивен

 

#3 25.08.2010 21:19:56

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Оптимизация полнотекстового поиска.

Да спасибо. Логический режим это хорошо но особо он не помогает к примеру взять обычный поисковый запрос
"Краткий лечебный справочник" на первом месте будут записи содержащие слово справочник потом лечебный и.д. (ни какой релевантности) т.е без спец. символов не обойтись, а от куда я могу знать к какому слову мне поставить + или > , а может я просто чего не знаю?

Неактивен

 

#4 25.08.2010 22:21:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация полнотекстового поиска.

Не-а, попробуйте AGAINST('"краткий лечебный справочник"') IN BOOLEAN MODE. Обратите внимание на двойные кавычки.

Неактивен

 

#5 26.08.2010 01:05:46

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Оптимизация полнотекстового поиска.

paulus написал:

Не-а, попробуйте AGAINST('"краткий лечебный справочник"') IN BOOLEAN MODE. Обратите внимание на двойные кавычки.

Вот так все же - AGAINST ('"краткий лечебный справочник"' IN BOOLEAN MODE) wink

Неактивен

 

#6 26.08.2010 03:07:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация полнотекстового поиска.

ээ.. а я как написал? Надо моноширинным шрифтом, наверное smile

Код:

'"краткий лечебный"'

Неактивен

 

#7 26.08.2010 14:25:09

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Оптимизация полнотекстового поиска.

Скобочка не там, а так всё в порядке smile

Неактивен

 

#8 26.08.2010 14:50:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оптимизация полнотекстового поиска.

Ах, точно, моя кривая голова. Спасибо за исправление wink

Неактивен

 

#9 26.08.2010 17:24:56

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Оптимизация полнотекстового поиска.

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

Отредактированно Марк (26.08.2010 17:25:27)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson