Полнотекстовый поиск MySQL не соответствует
Моя таблица MySQL не возвращает результаты с MATCH (col) AGAINST ('')
запрос.
Таблица проста:
id | url | fullTextIndex
И мой запрос
SELECT *, Match(fullTextIndex) AGAINST ("7f7f7f807f8080807f8080807f7f7f807c828888808a86967e8b858d7f89838a76829e958f7badb68084a3a38384899077848b877f799f9c85799fa2827d8c8a ") FROM Pictures;
Последний столбец, match, всегда равен 0. Кроме того, я точно знаю, что приведенная выше строка дословно содержится в одном из значений.
Что следует отметить:
- Строка находится только в этой строке (поэтому она находится не более чем в 50% строк, поэтому ее не следует игнорировать).
- Это не полная стоимость
- Столбец представляет собой столбец с большим текстом
- Когда я использую
INSTR
Я получаю значение 1 (это правильно)
Есть идеи, почему этот запрос может не работать?
1 ответ
Кажется, существует (настраиваемое) верхнее ограничение длины слов, рассматриваемых для индексации:
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
Вы можете проверить текущее значение с SHOW VARIABLES LIKE "ft_max_word_len";
На моем сервере возвращается 84, а ваша строка длиной 128 символов.
Предлагаемое исправление:
Добавьте эту строку в ваш файл my.cnf:
ft_max_word_len=128
(или любую максимальную длину, которая вам нужна)Перестройте ваши индексы в соответствии с рекомендациями на веб-сайте MySQL:
REPAIR TABLE tbl_name QUICK;