2010-09-01 2 views
3

Перепробовав все, что мог, я, наконец, создал эту тестовую таблицу:Почему MySQL Полный текстовый индекс не работает?

CREATE TABLE test_table (
    id int(11) NOT NULL AUTO_INCREMENT, 
    title text NOT NULL, 
    PRIMARY KEY (id), 
    FULLTEXT KEY title (title) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

С следующими данными теста:

INSERT INTO test_table (id, title) VALUES 
(1, 'Evolving intelligence bayesian filtering power behind'); 

Я ожидал бы следующий запрос, чтобы вернуть 1 строку:

SELECT * FROM test_table WHERE MATCH (title) AGAINST ('intelligence'); 

Но он возвращает пустой набор.

У меня есть другая база данных в том же экземпляре mysql, где полнотекстовый поиск работает так, как ожидалось. Но для каждой новой базы данных, которую я создал, полный текст не работает. Я перестроил индексы, отремонтировал таблицы, даже проверил индекс с помощью myisam_ftdump. У меня нет идей.

У вас есть идеи по этой проблеме? Заранее спасибо.

+0

Дубликат http://stackoverflow.com/questions/3439416/fulltext-search-in-mysql-does-not-return-any-rows –

ответ

10

Просто для уточнения. если ваша таблица не содержит достаточного количества данных (например, 1 строка), полнотекстовый поиск не будет работать. для слов, которые нужно индексировать, они должны казаться менее распространенными, чем в 50% строк.

Так что «интеллект» встречается в 100% строк и поэтому не индексируется.

Добавьте не менее 2 строк без слова intel и он начнет работать. Это не разъясняется в документации mySQL и часто ловит новичков. это (я тоже), потому что мы все тестируем с небольшими наборами данных.

DC

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