Edit, 2016 – Warum nicht beides?
Wenn Sie sich für Postgres vs. Lucene interessieren, warum nicht beides? Sehen Sie sich ZomboDB an Erweiterung für Postgres, die Elasticsearch als erstklassigen Indextyp integriert. Noch ein ziemlich frühes Projekt, aber es sieht für mich sehr vielversprechend aus.
(Technisch nicht auf Heroku verfügbar, aber dennoch einen Blick wert.)
Offenlegung:Ich bin Mitbegründer von Websolr und Bonsai Heroku-Add-Ons, daher ist meine Perspektive ein wenig auf Lucene ausgerichtet.
Meine Lektüre zur Postgres-Volltextsuche ist, dass sie für einfache Anwendungsfälle ziemlich solide ist, aber es gibt eine Reihe von Gründen, warum Lucene (und damit Solr und ElasticSearch) sowohl in Bezug auf Leistung als auch Funktionalität überlegen ist.
Für den Anfang, jpountz bietet eine wirklich hervorragende technische Antwort auf die Frage, Warum ist Solr so viel schneller als Postgres? Es lohnt sich, es ein paar Mal durchzulesen, um es wirklich zu verdauen.
Ich habe auch eine aktuelle RailsCast-Episode
Pragmatische Vorteile für Postgres
- Verwenden Sie einen bestehenden Dienst, den Sie bereits ausführen, wieder, anstatt etwas anderes einzurichten und zu warten (oder dafür zu bezahlen).
- Dem fantastisch langsamen SQL
LIKE
weit überlegen Betreiber. - Weniger Aufwand, Daten zu synchronisieren, da sie sich alle in derselben Datenbank befinden – keine Integration auf Anwendungsebene mit einer externen Datendienst-API.
Vorteile gegenüber Solr (oder ElasticSearch)
Aus dem Kopf, in keiner bestimmten Reihenfolge …
- Skalieren Sie Ihre Indizierungs- und Suchlast getrennt von Ihrer regulären Datenbanklast.
- Flexiblere Begriffsanalyse für Dinge wie Akzentnormalisierung, linguistische Wortstammerkennung, N-Gramme, Markup-Entfernung… Andere coole Funktionen wie Rechtschreibprüfung, „Rich Content“-Extraktion (z. B. PDF und Word)…
- Solr/Lucene kann alles auf der Postgres-Volltextsuche-TODO-Liste einfach gut.
- Viel besseres und schnelleres Ranking der Begriffsrelevanz, effizient anpassbar während der Suche.
- Wahrscheinlich schnellere Suchleistung für allgemeine Begriffe oder komplizierte Suchanfragen.
- Wahrscheinlich effizientere Indizierungsleistung als Postgres.
- Bessere Toleranz gegenüber Änderungen in Ihrem Datenmodell durch Entkopplung der Indizierung von Ihrem primären Datenspeicher
Ich denke eindeutig, dass eine dedizierte Suchmaschine auf Basis von Lucene hier die bessere Option ist. Im Grunde kann man sich Lucene als de facto das Open-Source-Repository für Suchexpertise vorstellen.
Aber wenn Ihre einzige andere Option das LIKE
ist Operator, dann ist die Postgres-Volltextsuche definitiv ein Gewinn.