Upravit, 2016 – Proč ne obojí?
Pokud vás zajímá Postgres vs. Lucene, proč ne obojí? Podívejte se na ZomboDB rozšíření pro Postgres, které integruje Elasticsearch jako prvotřídní typ indexu. Stále poměrně raný projekt, ale zdá se mi opravdu slibný.
(Technicky nedostupné na Heroku, ale stále stojí za to se na to podívat.)
Zveřejnění:Jsem spoluzakladatelem Websolr a Bonsai Heroku add-ons, takže můj pohled je trochu zaujatý směrem k Lucene.
O fulltextovém vyhledávání Postgres jsem četl, že je docela solidní pro jednoduché případy použití, ale existuje řada důvodů, proč je Lucene (a tedy Solr a ElasticSearch) lepší jak z hlediska výkonu, tak funkčnosti.
Pro začátek jpountz poskytuje skutečně vynikající technickou odpověď na otázku, Proč je Solr o tolik rychlejší než Postgres? Stojí za to si to párkrát přečíst, abyste to pořádně strávili.
Také jsem okomentoval nedávnou epizodu RailsCast porovnání relativních výhod a nevýhod fulltextového vyhledávání Postgres versus Solr. Dovolte mi to zrekapitulovat zde:
Pragmatické výhody Postgresu
- Opětovně použijte existující službu, kterou již provozujete, namísto nastavování a údržby (nebo placení) něčeho jiného.
- Mnohem lepší než fantasticky pomalé SQL
LIKE
operátor. - Méně potíží se synchronizací dat, protože jsou všechna ve stejné databázi – žádná integrace na úrovni aplikace s některým rozhraním API externích datových služeb.
Výhody Solr (nebo ElasticSearch)
Z hlavy, v žádném konkrétním pořadí…
- Škálujte zatížení indexováním a vyhledáváním odděleně od běžného zatížení databáze.
- Flexibilnější analýza termínů pro věci, jako je normalizace přízvuku, lingvistické odvození, N-gramy, odstranění značek… Další skvělé funkce, jako je kontrola pravopisu, extrakce „bohatého obsahu“ (např. PDF a Word)…
- Solr/Lucene umí vše na seznamu úkolů pro fulltextové vyhledávání Postgres v pohodě.
- Mnohem lepší a rychlejší hodnocení relevance výrazu, efektivně přizpůsobitelné v době vyhledávání.
- Pravděpodobně rychlejší výkon vyhledávání běžných výrazů nebo složitých dotazů.
- Pravděpodobně účinnější indexování než Postgres.
- Lepší odolnost vůči změnám ve vašem datovém modelu díky oddělení indexování od primárního úložiště dat
Jednoznačně si myslím, že specializovaný vyhledávač založený na Lucene je zde lepší volbou. V podstatě si můžete Lucene představit jako de facto open source úložiště odborných znalostí o vyhledávání.
Ale pokud je vaší jedinou další možností LIKE
operátor, pak je fulltextové vyhledávání Postgres jednoznačnou výhrou.