Denna fråga kräver ett mycket brett svar som ska besvaras i alla aspekter. Det finns mycket väl vissa specifikationer som kan göra ett system överlägset ett annat för en speciell användning, men jag vill täcka grunderna här.
Jag kommer helt att ta itu med Solr som ett exempel för flera sökmotorer som fungerar ungefär likadant.
Jag vill börja med några hårda fakta:
-
Du kan inte lita på Solr/Lucene som en säker databas. Det finns en lista med fakta varför men de består mestadels av saknade återställningsalternativ, avsaknad av sura transaktioner, möjliga komplikationer etc. Om du bestämmer dig för att använda solr måste du fylla i ditt index från en annan källa som en SQL-tabell. Faktum är att solr är perfekt för att lagra dokument som innehåller data från flera tabeller och relationer, som annars skulle kräva att komplexa kopplingar skulle konstrueras.
-
Solr/Lucene tillhandahåller häpnadsväckande textanalys / stemming / fulltextsökning poäng / fuzziness-funktioner. Saker du bara inte kan göra med MySQL. Faktum är att fulltextsökning i MySql är begränsad till MyIsam och poängsättningen är väldigt trivial och begränsad. Att vikta fält, förstärka dokument på vissa mätvärden, poängsätta resultat baserat på frasnärhet, matchande noggrannhet etc är mycket hårt arbete till nästan omöjligt.
-
I Solr/Lucene har du dokument. Du kan inte riktigt lagra relationer och process. Jo, du kan naturligtvis indexera nycklarna för andra dokument i ett flervärdigt fält i något dokument, så på detta sätt kan du faktiskt lagra 1:n-relationer och göra det på båda sätten för att få n:n, men dess data overhead. Missförstå mig inte, det är perfekt och effektivt för många ändamål (till exempel för någon produktkatalog där du vill lagra distributörer för produkter och du vill söka bara delar som är tillgängliga hos vissa distributörer eller något). Men du når slutet av möjligheterna med HAR / HAR INTE. Du kan nästan inte göra något som "skaffa alla produkter som finns hos minst 3 distributörer".
-
Solr/Lucene har mycket trevliga facetteringsfunktioner och eftersökningsanalys. Till exempel:Efter en mycket bred sökning som hade 40 000 träffar kan du visa att du bara skulle få 3 träffar om du förfinade din sökning till kombinationen av att ha detta fält det här värdet och det fältet det värdet. Saker som behöver ytterligare frågor i MySQL görs effektivt och bekvämt.
Så låt oss sammanfatta
-
Kraften med Lucene är textsökning/analys. Det går också förbluffande snabbt på grund av den omvända indexstrukturen. Du kan verkligen göra mycket efterbearbetning och tillfredsställa andra behov. Även om det är dokumentorienterat och inte har någon "graffråga" som trippelbutiker gör med SPARQL, är grundläggande N:M-relationer möjliga att lagra och fråga. Om din applikation är fokuserad på textsökning bör du definitivt välja Solr/Lucene om du inte har goda skäl, som mycket komplexa filterfrågor med flera dimensioner, att göra något annat.
-
Om du inte har textsökning utan snarare något där du kan peka och klicka på något men inte skriva in text, är gamla gamla relationsdatabaser förmodligen en bättre väg att gå.