2013-04-22 2 views
1

У меня есть столбец varchar в моем db, который я бы хотел найти для слов, используя запрос mysql MATCH/AGAINST. Однако, если есть несколько слов, он, похоже, не работает.mysql match/против синтаксиса

INSERT INTO mytable (title) VALUES ('my id 123'); 

SELECT * FROM mytable WHERE MATCH (title) AGAINST ('+my +id +123' IN BOOLEAN MODE); 

Результаты не возвращаются. Я что-то пропустил в синтаксисе запроса? Обратите внимание, что поле title не имеет полнотекстового индекса.

ответ

0

my, id & 123, вероятно, ниже, чем ft_min_word_length. Я колебался, будут ли числы считаться словами, быстрый тест показывает, что они есть, но минимальная (строка) длина по-прежнему применяется.

+0

@ wrikken-- нет полнотекстового индекса, применяется ли ft_min_word_length? – user101289

+0

@ user101289: Да, в соответствии с [руководством] (http://dev.mysql.com/doc/refman/5.5/en//fulltext-boolean.html): _ «Минимальная и максимальная длина слова в полнотекстовом параметры применяются. "_ – Wrikken

1

Вам нужно настроить следующее:

ШАГ 01: Создание списка стопслов

echo "a" > /var/lib/mysql/stopwords.txt 
echo "an" >> /var/lib/mysql/stopwords.txt 
echo "the" >> /var/lib/mysql/stopwords.txt 
chown mysql:mysql /var/lib/mysql/stopwords.txt 

Это предотвратит индексирование большинство комментариев словарных статей

ШАГ 02: Добавьте это в/и т.д. /my.cnf

[mysqld] 
ft_min_word_length=1 
ft_stopword_file=/var/lib/mysql/stopwords.txt 

ШАГ 03: Перезапуск MySQL

service mysql restart 

ШАГ 04: Создать полнотекстовый индекс

ALTER TABLE mytable ADD FULLTEXT ft_title (title); 

После этого Ваш запрос должен работать, или, по крайней мере, ощутимые результаты.

Дайте ему попробовать !!!

Смежные вопросы