Question

Quelles sont les limitations, les pièges, les anti-modèles ou les pièges?

Cela semble assez attrayant. Apparemment, vous pouvez créer un moteur de recherche presque sans travail. Mais cela ne peut pas être sans ses problèmes ...

quelles sont vos expériences?

Était-ce utile?

La solution

À mon avis, le principal inconvénient est que l'indexation de texte intégral MySQL est limitée aux tables MyISAM. À l’opposé des tables InnoDB, celles-ci manquent de nombreuses fonctionnalités importantes, par exemple. transactions.

Autres conseils

  

ça ne peut pas être sans ses problèmes ...

Ce n'est certainement pas le cas!

Tout terme de recherche composé uniquement de mots bloqués échouera silencieusement. Les mots peuvent être bloqués en raison de restrictions de longueur min / max et / ou du fichier de mots vides.

J'ai trouvé le fichier de mots vides par défaut beaucoup trop agressif, il empêchait de nombreuses recherches valides. De plus, la longueur minimale par défaut de 4 correspondait très souvent aux acronymes que les gens voudraient rechercher. J'ai réduit le ft_min_word_len à 3 et enlevé complètement la liste d'arrêt (ft_stopword_file = ''). Doc: http://dev.mysql.com/doc /refman/5.1/en/fulltext-fine-tuning.html

Vous pouvez également examiner la requête de recherche pour voir si elle ne contient que des mots < à 4 lettres, et utiliser une recherche similaire dans ce cas. Il n’existe pas de moyen aussi simple de contourner la liste d’arrêt au niveau de l’application.

La sélection de & # 8216; caractères de mot & # 8217; peut ne pas répondre à vos besoins, et il est difficile de changer. Par exemple, recherchez & # 8220; Terry & # 8221; ne correspondra pas à & # 8220; Terry's & # 8221 ;. En général, il n'y a aucun support pour tout type de raclage, donc & # 8220; biscuit & # 8221; ne correspondra pas à & # 8220; biscuits & # 8221; soit.

Enfin, comme l'a mentionné cg, InnoDB n'est pas pris en charge. De nos jours, vous ne voulez pas mettre toutes vos données dans une table MyISAM.

Si vous avez le stockage à épargner, vous pouvez placer la version canonique principale des données dans une table InnoDB, puis créer une table MyISAM distincte qui contient une copie du contenu en texte libre, uniquement pour être utilisée en tant que searchbait. Vous devez mettre à jour les deux tables lors d'une modification, mais si la table MyISAM perd de son intégrité, vous ne perdez au moins que la possibilité d'effectuer une recherche dans les lignes concernées, au lieu de gommer les données réelles et d'obtenir des erreurs d'application.

Vous pouvez alors, si vous avez suffisamment de temps pour épargner des cycles, implémenter votre propre traitement de texte sur le searchbait et interroger des mots pour contourner certaines des limitations ci-dessus. Par exemple, vous pouvez échapper les caractères que vous souhaitez utiliser comme mots, supprimer ceux que vous ne voulez pas utiliser, et effectuer une conversion manuelle simple en anglais.

Pour les tables volumineuses, vous devrez augmenter la taille et la limite de la mémoire tampon dans votre fichier de configuration MySQL.

De plus, les colonnes MATCH () que vous utilisez dans la recherche doivent être identiques à celles de l'index.

En plus de la très bonne réponse de bobince, il existe un article dans la documentation MySQL qui parle de restrictions concernant le texte intégral. J'espère que cela t'aides. http://dev.mysql.com/doc/refman/5.0 /en/fulltext-restrictions.html (Olafur Waage en a déjà parlé)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top