2010-09-01 6 views
3

Après avoir essayé tout ce que je pouvais, je finalement créé cette table de test:Pourquoi l'index de texte intégral MySQL ne fonctionne pas?

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 

Avec les données de test suivant:

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

je me attends à la requête suivante pour revenir 1 rang:

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

Mais il retourne un ensemble vide.

J'ai une autre base de données dans la même instance mysql où la recherche en texte intégral fonctionne comme prévu. Mais pour chaque nouvelle base de données que j'ai créée, le texte intégral ne fonctionne pas. J'ai reconstruit les index, réparé les tables, j'ai même inspecté l'index avec myisam_ftdump. Je n'ai plus d'idées.

Avez-vous une idée sur ce problème? Merci d'avance.

+0

en double de http://stackoverflow.com/questions/3439416/fulltext-search-in-mysql-does-not-return-any-rows –

Répondre

10

Juste pour clarification. Si votre table ne contient pas suffisamment de données (par exemple, 1 ligne), une recherche en texte intégral ne fonctionnera pas. pour que les mots soient indexés, ils doivent apparaître moins communs que dans 50% des rangées. Donc 'intelligence' se produit dans 100% des lignes et n'est donc pas indexé.

Ajoutez au moins 2 lignes de plus sans le mot intelligence et il commencera à fonctionner. Cela n'est pas précisé dans la documentation mySQL et attire souvent les débutants. c'est (moi aussi) parce que nous testons tous avec de petits jeux de données.

DC

Questions connexes