Задавайте вопросы, мы ответим
Вы не зашли.
Всем добрый здрасти!
Есть некая база данных, в которой у каждой позиции есть тэги. Их может быть от одного до бесконечности. Они все хранятся в одном поле, и разделены скобками типа
[тэг один][тег 2][тег еще][тег другой]
Что бы находить эти теги я использую запрос
SELECT * FROM places WHERE MATCH (tag) AGAINST ("[нужный тег]");
Соответственно все работает, FullText включен... Но вот какая незадача:
Есть два тега
[аптека]
[аптека 24]
И злостный MATCH выдает на запрос "[аптека]" и тот и другой тег. Как же бороться, подскажите, пожалуйста.
Тоже самое истинно для [стоматология][детская стоматология] и так далее…
Запросы из трех букв типа [азс][ДЕЗ] вообще игнорирует.
Отредактированно c'v (09.06.2009 20:29:50)
Неактивен
Полнотекстовый поиск ищет по словам. Квадратные скобки он игнорирует, а ищет только слова.
Возможно, Вам поможет булевый поиск http://dev.mysql.com/doc/refman/5.1/en/ … olean.html
AGAINST ('+Аптека +24' IN BOOLEAN MODE). Разумеется, чтобы работало +24, нужно, чтобы было
ft_min_word_len=2.
А вообще имеет смысл сделать отдельную табличку с тегами и пользоваться ей. Это будет гораздо
проще в данном случае.
Неактивен
Спасибо большое! В этом действительно есть рациональное зерно. Это, конечно, чуть-чуть усложняет понимание, но в целом работает отлично.
Неактивен
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)
Неактивен