2008-09-26 7 views

Répondre

5

Malheureusement, je ne connais pas très bien PostgreSQL, mais si vous utilisez la recherche FULL TEXT dans MySQL, vous êtes immédiatement lié à MyISAM. Si vous voulez utiliser InnoDB (et si la conformité ACID signifie quelque chose pour vous, vous devriez utiliser InnoDB) vous êtes coincé en utilisant d'autres solutions.

Deux alternatives populaires qui sont souvent lancées sont Lucene (un projet apache avec un module Zend si vous utilisez PHP) et Sphinx.

+3

Pour quiconque lit ceci maintenant, à partir de MySQL 5.6, InnoDB supporte la recherche fulltext. – YeB

0

Je pense que vous pouvez utiliser Sphinx avec MySQL et Postgres. est ici an article pour expliquer comment utiliser Sphinx avec MySQL (vous pouvez l'ajouter en tant que plug-in)

+0

Sphinx ne fonctionne qu'avec MySQL. Autrement dit, il ne supporte que l'extraction de données à partir de MySQL. – Timmmm

6

PostgreSQL 8.3 a construit à la recherche en texte intégral qui est une version intégrée du « tsearch2 »

Voici la documentation: http://www.postgresql.org/docs/8.3/static/textsearch.html

Et l'exemple de la documentation:

SELECT title 
FROM pgweb 
WHERE to_tsvector(body) @@ to_tsquery('friend'); 

où le corps est un champ de texte. Vous pouvez indexer spécifiquement pour ces types de recherches et, bien sûr, ils peuvent devenir plus complexes que cet exemple simple. La fonctionnalité est très solide et mérite d'être plongée dans votre décision.

Bonne chance.

+0

En dehors de la boîte la recherche de texte intégral est assez lente, assurez-vous de bien étudier les stratégies d'optimisation des requêtes sur celui-ci, car sinon votre UX sera horrible comme modems 28.8k. –

2

Si vous utilisez Hibernate comme ORM, je recommande fortement d'utiliser la recherche Hibernate. Sa construction au dessus de Lucene est donc super rapide.

Karl

1

J'ai eu assez bonne expérience avec postgresql/tsearch2, en particulier depuis qu'il a été roulé dans la distribution standard (avant la version 8.0 - je pense - c'est une caractéristique contrib en option, et la mise à niveau à tsearch2 impliqués un peu de travail). Si je me souviens bien, vous devez définir certaines propriétés (correspondance floue, dictionnaire) avant le démarrage, alors que sur d'autres bases de données ces choses sont exposées de manière flexible à travers la syntaxe fulltext (je pense à Oracle Text, ici, Je sais que ce n'est pas pertinent pour votre question).

0

La recherche en texte intégral Mysql est très lente. Il ne peut pas gérer plus de 1 million de données (plusieurs dizaines de secondes par requête).

Je n'ai aucune expérience de la recherche textuelle postgresql.

J'ai utilisé la sphinxsearch. C'est très rapide et facile à utiliser. Mais ce n'est pas si puissant. Je veux dire la fonctionnalité de recherche. Par exemple, il ne supporte pas comme 'abc?', Où '?' représente n'importe quel personnage.

Je connais aussi lucene. C'est puissant, mais c'est difficile à apprendre.

Questions connexes