MySQL полнотекстовый поиск не соответствует - PullRequest
2 голосов
/ 11 декабря 2011

Моя таблица MySQL не возвращает результаты с запросом MATCH (col) AGAINST ('').

Таблица проста:

id | url | fullTextIndex

И мой запрос

SELECT *, Match(fullTextIndex) AGAINST ("7f7f7f807f8080807f8080807f7f7f807c828888808a86967e8b858d7f89838a76829e958f7badb68084a3a38384899077848b877f799f9c85799fa2827d8c8a ") FROM Pictures;

Последний столбец, совпадение, всегда равен 0. За исключением того, что я знаю факт, что приведенная выше строка дословно содержится в одном из значений.

Что следует отметить:

  • Строка находится только в этой строке (поэтому она находится не более чем в 50% строк, поэтому ее не следует игнорировать).
  • Это не полное значение
  • Столбец представляет собой столбец с большим текстом
  • Когда я использую INSTR, я получаю значение 1 (это правильно)

Есть идеи, почему этот запрос может не работать?

1 Ответ

4 голосов
/ 11 декабря 2011

Кажется, есть (настраиваемое) верхнее ограничение длины слов, рассматриваемых для индексации:

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_ft_max_word_len

Текущее значение можно проверить с помощью SHOW VARIABLES LIKE "ft_max_word_len";

На моем сервере возвращается 84, а длина вашей строки - 128 символов.

Рекомендуемое исправление:

  1. Добавьте эту строку в файл my.cnf:ft_max_word_len=128 (или любая необходимая максимальная длина)

  2. Перестройте свои индексы в соответствии с рекомендациями на веб-сайте MySQL: REPAIR TABLE tbl_name QUICK;

...