2014-03-26 1 views
1

У меня проблема с MATCH AGAINST, когда я пытаюсь найти запись. В моей таблице пользователей я есть пользователь со следующими данными:ПРОЧИЕ ВОПРОСЫ Проблема с запросом

first_name: Алехандра Мария де лос Анхелес last_name: Кинтеро Barreiro Gutierrez

, когда я пытаюсь сделать следующие запросы:

SELECT * 
FROM articles 
INNER JOIN users ON articles.author_id = users.id 
WHERE MATCH(first_name,last_name) AGAINST('Alejanra Gutierrez') 

SELECT * 
FROM articles 
INNER JOIN users ON articles.author_id = users.id 
WHERE MATCH(first_name,last_name) AGAINST('A Barreiro') 

SELECT * 
FROM articles 
INNER JOIN users ON articles.author_id = users.id 
WHERE MATCH(first_name,last_name) AGAINST('los angeles') 

Все запросы возвращают правильную информацию, но если поиск заменяет «de los», который находится в first_name, запрос не работает.

У кого-то есть идея, почему или может помочь мне с этим?

P.D. Таблицы были в InooDB с MySQL 5.6.15, но я изменил его с помощью MyISAM. Когда у меня был InooDB, этот вид запросов работал, но с изменением двигателя не работает

ответ

0

Полностью текстовый поиск MySQL по умолчанию игнорирует слова длиной не более 4 символов. Читайте об этом here:

Минимальная и максимальная длина слов, которые будут индексироваться определяются innodb_ft_min_token_size и innodb_ft_max_token_size для InnoDB индексов поиска, и ft_min_word_len и ft_max_word_len для MyISAM из них. После изменения любого из этих параметров перестройте свои индексы FULLTEXT , чтобы изменения вступили в силу. Например, чтобы сделать двухзнаковые слова для поиска, вы можете поместить следующие строки в файл опций

(Хорошо, что ссылка не указывает, что по умолчанию «4», но она есть.)

Следуйте инструкциям: измените значение по умолчанию и перестройте индекс.

+1

Ссылка на _ "default 4" _ is [this] (https://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_ft_min_word_len) (так что не просто " но это"). Просто заметим. –

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