2013-06-22 2 views
1

Я пытаюсь создать индекс полнотекстового поиска по трем столбцам, но он не возвращает никаких результатов, даже если кажется, что он должен. Я реплицировать проблему в TestTable со следующей структурой и данными:MySQL fulltext не возвращает никаких результатов, когда он явно должен быть

CREATE TABLE IF NOT EXISTS `testtable` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) NOT NULL, 
    `link` varchar(255) NOT NULL, 
    `description` text NOT NULL, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `title` (`title`,`link`,`description`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; 

INSERT INTO `testtable` (`id`, `title`, `link`, `description`) VALUES 
(1, 'mysql article', 'domain.com/article/1', 'This is an article about MySQL'), 
(2, 'some other article', 'domain.com/article/mysql-article', 'This has mysql in the link but not the title'), 
(3, 'my super mysql article', 'domain.com/mysql-link', 'the keyword is not in the description'), 
(4, 'okay i''m searching for something', 'domain.com', 'and it''s not in the title or description'), 
(5, 'mysql article', 'mydomain.com/mysql', 'mysql is definitely written in every field'); 

Это запрос, я использую:

select * from `testtable` where MATCH(title, link, description) AGAINST('mysql') 

Фраза MySQL появляется по крайней мере один столбец во всем кроме строки 4, в то время как строка 5 имеет фразу mysql в каждом отдельном столбце. Поэтому, по крайней мере, он должен возвращать строку 5. Но он не возвращает никаких результатов.

Может кто-нибудь предложить объяснение, почему это происходит?

ответ

2

слова, которые присутствуют в 50% или более строк, считаются общими и не совпадают.

От Doc

Это означает, что если вы посмотрите на слово, что большинство записей содержат, то он будет проигнорирован в поиске.

+0

А это интересно и запутанно, например. представьте себе сайт seo, где кто-то ищет seo, было бы глупо возвращать результаты, даже если здравый смысл будет диктовать, что результаты не будут такими полезными. Есть ли способ избежать этого? – robjbrain

+0

Ничего, что я могу представить в момент использования 'match'. –