sql >> Databasteknik >  >> RDS >> PostgreSQL

Någon anledning att inte använda PostgreSQL:s inbyggda fulltextsökning på Heroku?

Redigera, 2016 — Varför inte båda?

Om du är intresserad av Postgres vs. Lucene, varför inte båda? Kolla in ZomboDB tillägg för Postgres, som integrerar Elasticsearch som en förstklassig indextyp. Fortfarande ett ganska tidigt projekt men det ser verkligen lovande ut för mig.

(Tekniskt inte tillgängligt på Heroku, men ändå värt att titta på.)

Avslöjande:Jag är en av grundarna av Websolr och Bonsai Heroku-tillägg, så mitt perspektiv är lite partiskt mot Lucene.

Min läsning på Postgres fulltextsökning är att den är ganska stabil för enkla användningsfall, men det finns ett antal anledningar till varför Lucene (och därmed Solr och ElasticSearch) är överlägsna både när det gäller prestanda och funktionalitet.

Till att börja med, jpountz ger ett alldeles utmärkt tekniskt svar på frågan, Varför är Solr så mycket snabbare än Postgres? Det är värt ett par läsningar för att verkligen smälta.

Jag kommenterade också ett nyligen RailsCast-avsnitt jämföra relativa fördelar och nackdelar med Postgres fulltextsökning kontra Solr. Låt mig sammanfatta det här:

Pragmatiska fördelar med Postgres

  • Återanvänd en befintlig tjänst som du redan kör istället för att konfigurera och underhålla (eller betala för) något annat.
  • Långt överlägsen den fantastiskt långsamma SQL LIKE operatör.
  • Mindre krångel med att hålla data synkroniserade eftersom allt finns i samma databas – ingen integration på applikationsnivå med någon extern datatjänst-API.

Fördelar med Solr (eller ElasticSearch)

Av mitt huvud, i ingen speciell ordning...

  • Skala din indexerings- och sökbelastning separat från din vanliga databasbelastning.
  • Mer flexibel termanalys för saker som accentnormalisering, språklig härkomst, N-gram, borttagning av markeringar... Andra coola funktioner som stavningskontroll, extrahering av "rikt innehåll" (t.ex. PDF och Word)...
  • Solr/Lucene kan göra allt på Postgres fulltextsökning TODO-listan bara bra.
  • Mycket bättre och snabbare rankning av termrelevans, effektivt anpassningsbar vid söktillfället.
  • Förmodligen snabbare sökresultat för vanliga termer eller komplicerade frågor.
  • Förmodligen effektivare indexeringsprestanda än Postgres.
  • Bättre tolerans för förändringar i din datamodell genom att frikoppla indexering från ditt primära datalager

Jag tycker helt klart att en dedikerad sökmotor baserad på Lucene är det bättre alternativet här. I grund och botten kan du tänka på Lucene som de facto arkivet med öppen källkod för sökexpertis.

Men om ditt enda andra alternativ är LIKE operatör, så är Postgres fulltextsökning en klar vinst.



  1. Infoga INTO MySQL FRÅN en annan tabell

  2. Hur får man Django att fungera med MySQL-drivrutiner som inte stöds såsom gevent-mysql eller Concurrences MySQL-drivrutin?

  3. Är NOLOCK standard för SELECT-satser i SQL Server 2005?

  4. Skicka värden till MySQL IN-drift i PDO-förberedd uttalande?