sql >> Database >  >> RDS >> Mysql

Wanneer moet u Solr . overwegen?

Deze vraag vraagt ​​om een ​​zeer breed antwoord in alle aspecten. Er zijn heel goed bepaalde specificaties die het ene systeem superieur maken aan het andere voor een speciaal gebruik, maar ik wil hier de basis behandelen.

Ik zal Solr volledig behandelen als voorbeeld voor verschillende zoekmachines die ongeveer op dezelfde manier werken.

Ik wil beginnen met enkele harde feiten:

  • U kunt niet vertrouwen op Solr/Lucene als veilige database. Er is een lijst met feiten waarom, maar deze bestaan ​​meestal uit ontbrekende herstelopties, gebrek aan acid-transacties, mogelijke complicaties enz. Als u besluit om solr te gebruiken, moet u uw index invullen vanuit een andere bron, zoals een SQL-tabel. In feite is solr perfect voor het opslaan van documenten die gegevens uit verschillende tabellen en relaties bevatten, waarvoor anders complexe joins zouden moeten worden gemaakt.

  • Solr/Lucene biedt verbluffende functies voor tekstanalyse / stemming / volledige tekstzoekscores / vaagheid. Dingen die je gewoon niet kunt doen met MySQL. In feite is zoeken in volledige tekst in MySql beperkt tot MyIsam en scoren is erg triviaal en beperkt. Het wegen van velden, het verbeteren van documenten op bepaalde meetwaarden, het scoren van resultaten op basis van de nabijheid van de zin, het matchen van nauwkeurigheid enz. is heel hard werken tot bijna onmogelijk.

  • In Solr/Lucene heb je documenten. Relaties en processen kun je niet echt opslaan. Welnu, je kunt natuurlijk de sleutels van andere documenten indexeren in een meerwaardig veld van een document, dus op deze manier kun je 1:n-relaties opslaan en het op beide manieren doen om n:n te krijgen, maar de gegevensoverhead. Begrijp me niet verkeerd, het is prima in orde en efficiënt voor veel doeleinden (bijvoorbeeld voor een productcatalogus waar je de distributeurs voor producten wilt opslaan en je wilt alleen onderdelen zoeken die verkrijgbaar zijn bij bepaalde distributeurs of zoiets). Maar je bereikt het einde van de mogelijkheden met HAS / HAS NOT. Je kunt bijna niet zoiets doen als "alle producten krijgen die bij minimaal 3 distributeurs verkrijgbaar zijn".

  • Solr/Lucene heeft zeer mooie facettende functies en analyse na het zoeken. Bijvoorbeeld:na een zeer brede zoekopdracht die 40000 hits had, kunt u weergeven dat u slechts 3 hits zou krijgen als u uw zoekopdracht verfijnde tot de combinatie van dit veld deze waarde en dat veld die waarde. Dingen die aanvullende vragen in MySQL nodig hebben, worden efficiënt en handig gedaan.

Dus laten we samenvatten

  • De kracht van Lucene is het zoeken/analyseren van tekst. Het is ook verbazingwekkend snel vanwege de omgekeerde indexstructuur. Je kunt echt veel nabewerking doen en aan andere behoeften voldoen. Hoewel het documentgericht is en geen "grafiekquery" heeft zoals triple stores doen met SPARQL, zijn basis N:M-relaties mogelijk om op te slaan en te doorzoeken. Als uw toepassing is gericht op het zoeken naar tekst, moet u zeker voor Solr/Lucene gaan als u geen goede redenen heeft, zoals zeer complexe, multidimensionale bereikfilterquery's, om iets anders te doen.

  • Als je geen tekstzoekfunctie hebt, maar eerder iets waar je op iets kunt wijzen en klikken maar geen tekst kunt invoeren, zijn goede oude relationele databases waarschijnlijk een betere manier om te gaan.



  1. Stel het resultaat van een query in op een variabele in MySQL

  2. Hoe kan ik XML doorgeven van C# naar een opgeslagen procedure in SQL Server 2008?

  3. SQL-UPDATE voor beginners

  4. SQLite groeperen op / uren, dagen, weken, jaar tellen