Tato otázka vyžaduje velmi širokou odpověď, kterou je třeba zodpovědět ve všech aspektech. Existují velmi dobře určitá specifika, díky nimž může být jeden systém lepší než druhý pro speciální případ použití, ale zde chci pokrýt základy.
Budu se zabývat výhradně Solrem jako příkladem pro několik vyhledávačů, které fungují zhruba stejně.
Chci začít několika tvrdými fakty:
-
Nemůžete se spolehnout na Solr/Lucene jako na zabezpečenou databázi. Existuje seznam faktů proč, ale většinou se skládají z chybějících možností obnovy, chybějících transakcí s kyselinou, možných komplikací atd. Pokud se rozhodnete použít solr, musíte svůj index naplnit z jiného zdroje, jako je tabulka SQL. Solr je ve skutečnosti ideální pro ukládání dokumentů, které obsahují data z několika tabulek a vztahů, které by jinak vyžadovaly vytvoření složitých spojení.
-
Solr/Lucene poskytuje dechberoucí textovou analýzu / stemming / hodnocení fulltextového vyhledávání / fuzziness funkce. Věci, které s MySQL prostě dělat nemůžete. Ve skutečnosti je fulltextové vyhledávání v MySql omezeno na MyIsam a bodování je velmi triviální a omezené. Váhování polí, posilování dokumentů na určitých metrikách, skóre výsledků na základě blízkosti frází, přiřazování přesných atd. je velmi těžká práce až téměř nemožná.
-
V Solr/Lucene máte dokumenty. Nemůžete skutečně ukládat vztahy a procesy. Samozřejmě můžete indexovat klíče jiných dokumentů uvnitř vícehodnotového pole nějakého dokumentu, takže tímto způsobem můžete ve skutečnosti uložit vztahy 1:n a udělat to oběma způsoby, abyste získali n:n, ale jeho režie dat. Nechápejte mě špatně, je naprosto v pořádku a efektivní pro mnoho účelů (například pro nějaký katalog produktů, kde chcete uložit distributory pro produkty a chcete hledat pouze díly, které jsou dostupné u určitých distributorů nebo tak). Ale dosáhnete konce možností pomocí HAS / HAS NOT. Téměř nemůžete udělat něco jako "získejte všechny produkty, které jsou dostupné alespoň u 3 distributorů".
-
Solr/Lucene má velmi pěkné fasetovací funkce a analýzu po vyhledávání. Například:Po velmi širokém vyhledávání, které mělo 40 000 shod, můžete zobrazit, že byste získali pouze 3 shody, pokud byste vyhledávání upřesnili na kombinaci, kdy má toto pole tuto hodnotu a toto pole stejnou hodnotu. Věci, které vyžadují další dotazy v MySQL, se dělají efektivně a pohodlně.
Takže si to shrňme
-
Síla Lucene je vyhledávání/analýza textu. Díky obrácené struktuře indexu je také neuvěřitelně rychlý. Můžete udělat opravdu hodně postprocessingu a uspokojit další potřeby. Přestože je orientován na dokumenty a nemá žádné "dotazování na grafy" jako trojité obchody se SPARQL, je možné ukládat a dotazovat základní N:M vztahy. Pokud je vaše aplikace zaměřena na textové vyhledávání, měli byste rozhodně jít po Solr/Lucene, pokud nemáte dobré důvody, jako jsou velmi složité dotazy na filtry vícerozměrných rozsahů, abyste to udělali jinak.
-
Pokud nemáte textové vyhledávání, ale spíše něco, kde můžete na něco ukázat a kliknout, ale nezadávat text, staré dobré relační databáze jsou pravděpodobně lepší způsob, jak jít.