PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Une raison de ne pas utiliser la recherche en texte intégral intégrée de PostgreSQL sur Heroku ?

Modifier, 2016 : Pourquoi pas les deux ?

Si vous êtes intéressé par Postgres contre Lucene, pourquoi pas les deux ? Découvrez le ZomboDB extension pour Postgres, qui intègre Elasticsearch en tant que type d'index de première classe. Encore un projet assez précoce mais il m'a l'air vraiment prometteur.

(Techniquement non disponible sur Heroku, mais vaut quand même la peine d'être regardé.)

Divulgation :je suis cofondateur de Websolr et Bonsaï Modules complémentaires Heroku, donc mon point de vue est un peu biaisé en faveur de Lucene.

Ma lecture sur la recherche en texte intégral Postgres est qu'elle est assez solide pour des cas d'utilisation simples, mais il y a un certain nombre de raisons pour lesquelles Lucene (et donc Solr et ElasticSearch) est supérieur à la fois en termes de performances et de fonctionnalités.

Pour commencer, jpountz fournit une réponse technique vraiment excellente à la question, Pourquoi Solr est-il tellement plus rapide que Postgres ? Cela vaut la peine de lire quelques lectures pour vraiment digérer.

J'ai également commenté un épisode RailsCast récent comparant les avantages et les inconvénients relatifs de la recherche en texte intégral Postgres par rapport à Solr. Permettez-moi de récapituler ici :

Avantages pragmatiques de Postgres

  • Réutilisez un service existant que vous utilisez déjà au lieu de configurer et de gérer (ou de payer) autre chose.
  • Bien supérieur au SQL incroyablement lent LIKE opérateur.
  • Plus de soucis pour synchroniser les données, car elles se trouvent toutes dans la même base de données : pas d'intégration au niveau de l'application avec une API de service de données externe.

Avantages de Solr (ou ElasticSearch)

Du haut de ma tête, sans ordre particulier…

  • Ajustez votre charge d'indexation et de recherche séparément de votre charge de base de données habituelle.
  • Analyse terminologique plus flexible pour des éléments tels que la normalisation des accents, la racine linguistique, les N-grammes, la suppression du balisage… D'autres fonctionnalités intéressantes telles que la vérification orthographique, l'extraction de "contenu riche" (par exemple, PDF et Word)…
  • Solr/Lucene peut tout faire sur la liste TODO de recherche en texte intégral Postgres très bien.
  • Classement par pertinence des termes bien meilleur et plus rapide, personnalisable efficacement au moment de la recherche.
  • Des performances de recherche probablement plus rapides pour les termes courants ou les requêtes complexes
  • Performances d'indexation probablement plus efficaces que Postgres.
  • Meilleure tolérance aux modifications de votre modèle de données en dissociant l'indexation de votre magasin de données principal

Je pense clairement qu'un moteur de recherche dédié basé sur Lucene est la meilleure option ici. Fondamentalement, vous pouvez considérer Lucene comme le référentiel open source de facto de l'expertise en matière de recherche.

Mais si votre seule autre option est le LIKE opérateur, alors la recherche en texte intégral Postgres est une victoire définitive.