2010-03-20 7 views
1

Je veux faire de la recherche plein texte efficacement dans MYSQL en utilisant match contre. En particulier, j'ai besoin d'utiliser des opérateurs binaires (par exemple, faire correspondre un texte mais pas un autre texte). Cependant, j'ai également besoin d'un support de transaction efficace.
Mais la recherche en texte intégral est uniquement prise en charge sur MYISAM, pas sur Innodb. Que faire?mysql recherche plein texte

Répondre

1

En supposant que vous deviez utiliser Innodb.

Je suggère d'utiliser un outil de recherche externe - sphinx ou solr obtiendrait mon vote. Les deux retournent systématiquement de meilleurs résultats que la recherche mysql fulltext, et beaucoup plus rapidement. Je dirais que sphinx est plus facile de se lever et de partir, en particulier venant de mysql.

Si vous ne pouvez pas installer l'un ou l'autre, ou si vous n'avez tout simplement pas le temps, vous pouvez simplement déplacer ou dupliquer les champs nécessaires dans une table myisam afin de pouvoir utiliser la recherche fulltext de mysql.

+0

bon conseil, mais je ne peux pas déplacer ou dupliquer des tables/colonnes, j'ai besoin de supprimer les résultats correspondants après la recherche, de préférence fait dans une seule instruction SQL. – user121196

1

Ceci est une suggestion plutôt qu'une réponse.

Si vous avez une base de données volumineuse ou si vous voulez des fonctionnalités avancées, n'utilisez pas la recherche en texte intégral de mysql. Vous pouvez utiliser sphinx ou lucene. SPhinx est généralement plus rapide et plus léger, mais Lucene a beaucoup plus de fonctionnalités. J'utilise personnellement Sphinx.

+0

Utilisez Lucene, puisque Lucene est basé sur Java. – TIMEX

+0

sphinx est php seulement droit? – user121196

+0

Vous pouvez utiliser n'importe quelle langue avec lucene ou sphinx. C'est le fait que "mettre en place", lucene est basé sur Java. – TIMEX

0

Vous pouvez également essayer Ferret c'est une implémentation ruby ​​d'une bibliothèque de recherche apache. Selon les tests de vitesse, c'est aussi beaucoup plus rapide.