SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.06.2009 20:23:15

c'v
Участник
Зарегистрирован: 09.06.2009
Сообщений: 2

Точный поиск слова с строке. FullText

Всем добрый здрасти!

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

[тэг один][тег 2][тег еще][тег другой]

Что бы находить эти теги я использую запрос

SELECT * FROM places WHERE MATCH (tag) AGAINST ("[нужный тег]");

Соответственно все работает, FullText включен... Но вот какая незадача:
Есть два тега
[аптека]
[аптека 24]

И злостный MATCH выдает на запрос "[аптека]" и тот и другой тег. Как же бороться, подскажите, пожалуйста.

Тоже самое истинно для [стоматология][детская стоматология] и так далее…
Запросы из трех букв типа [азс][ДЕЗ] вообще игнорирует.

Отредактированно c'v (09.06.2009 20:29:50)

Неактивен

 

#2 10.06.2009 17:13:49

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

Re: Точный поиск слова с строке. FullText

Полнотекстовый поиск ищет по словам. Квадратные скобки он игнорирует, а ищет только слова.
Возможно, Вам поможет булевый поиск http://dev.mysql.com/doc/refman/5.1/en/ … olean.html
AGAINST ('+Аптека +24' IN BOOLEAN MODE). Разумеется, чтобы работало +24, нужно, чтобы было
ft_min_word_len=2.

А вообще имеет смысл сделать отдельную табличку с тегами и пользоваться ей. Это будет гораздо
проще в данном случае.

Неактивен

 

#3 15.06.2009 22:51:04

c'v
Участник
Зарегистрирован: 09.06.2009
Сообщений: 2

Re: Точный поиск слова с строке. FullText

Спасибо большое! В этом действительно есть рациональное зерно. Это, конечно, чуть-чуть усложняет понимание, но в целом работает отлично.

Неактивен

 

#4 14.11.2011 16:12:50

inhell
Участник
Откуда: Киёв
Зарегистрирован: 14.11.2011
Сообщений: 1

Re: Точный поиск слова с строке. FullText

paulus написал:

Полнотекстовый поиск ищет по словам. Квадратные скобки он игнорирует, а ищет только слова.
Возможно, Вам поможет булевый поиск http://dev.mysql.com/doc/refman/5.1/en/ … olean.html
AGAINST ('+Аптека +24' IN BOOLEAN MODE). Разумеется, чтобы работало +24, нужно, чтобы было
ft_min_word_len=2.
...

paulus, подскажите, если знаете. Использую fulltext in boolean mode, так вот слова только из цифр, как у Вас в примере "+24" вообще не находятся (ни на Денвере, ни на сервере), это как-то можно поменять где-то? ft_min_word_len установлен 2, это не влияет на мой случай.

upd: сорри, после изменения ft_min_word_len = 2, пересоздал индексы (на Денвере) и всё заработало!

Вопрос: а что значит перекомпилировать MySQL? Как это делать на сервере (vds). Денвер рестартанул и заработало, vds что-ли тоже просто перегрузить?

Отредактированно inhell (14.11.2011 17:45:55)

Неактивен

 

Board footer

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