Questa domanda richiede una risposta molto ampia a cui rispondere in tutti gli aspetti. Ci sono molto bene alcune specifiche che possono rendere un sistema superiore a un altro per un caso d'uso speciale, ma voglio coprire le basi qui.
Tratterò interamente Solr come esempio per diversi motori di ricerca che funzionano più o meno allo stesso modo.
Voglio iniziare con alcuni fatti concreti:
-
Non puoi fare affidamento su Solr/Luce come database sicuro. C'è un elenco di fatti perché, ma consistono principalmente in opzioni di ripristino mancanti, mancanza di transazioni acide, possibili complicazioni ecc. Se decidi di utilizzare solr, devi popolare il tuo indice da un'altra fonte come una tabella SQL. In effetti solr è perfetto per archiviare documenti che includono dati da diverse tabelle e relazioni, che altrimenti richiederebbero la costruzione di join complessi.
-
Solr/Luce offre incredibili funzioni di analisi del testo / stemming / punteggio di ricerca full-text / sfocatura. Cose che semplicemente non puoi fare con MySQL. Infatti la ricerca full-text in MySql è limitata a MyIsam e il punteggio è molto banale e limitato. Ponderare i campi, migliorare i documenti su determinate metriche, valutare i risultati in base alla vicinanza della frase, all'accuratezza della corrispondenza ecc. È un lavoro da molto duro a quasi impossibile.
-
In Solr/Luce hai dei documenti. Non puoi davvero memorizzare relazioni ed elaborare. Bene, puoi ovviamente indicizzare le chiavi di altri documenti all'interno di un campo multivalore di un documento, quindi in questo modo puoi effettivamente memorizzare relazioni 1:n e farlo in entrambi i modi per ottenere n:n, ma il suo sovraccarico di dati. Non fraintendetemi, è perfettamente perfetto ed efficiente per molti scopi (ad esempio per alcuni cataloghi di prodotti in cui si desidera archiviare i distributori per prodotti e si desidera cercare solo parti disponibili presso determinati distributori o qualcosa del genere). Ma raggiungi la fine delle possibilità con HAS / HAS NOT. Non puoi quasi fare qualcosa del tipo "procurati tutti i prodotti disponibili in almeno 3 distributori".
-
Solr/Luce ha caratteristiche di sfaccettatura molto interessanti e analisi post-ricerca. Ad esempio:dopo una ricerca molto ampia che ha avuto 40000 risultati, puoi visualizzare che otterresti solo 3 risultati se avessi perfezionato la tua ricerca sulla combinazione di avere questo campo questo valore e quel campo quel valore. Le cose che richiedono query aggiuntive in MySQL vengono eseguite in modo efficiente e conveniente.
Quindi riassumiamo
-
Il potere di Lucene è la ricerca/analisi del testo. È anche incredibilmente veloce a causa della struttura dell'indice inverso. Puoi davvero fare un sacco di post-elaborazione e soddisfare altre esigenze. Sebbene sia orientato al documento e non abbia "interrogazioni su grafi" come fanno i triple store con SPARQL, è possibile memorizzare e interrogare relazioni N:M di base. Se la tua applicazione è incentrata sulla ricerca di testo, dovresti assolutamente scegliere Solr/Luce se non hai buone ragioni, come query di filtri di intervalli multidimensionali molto complesse, per fare diversamente.
-
Se non hai la ricerca di testo ma piuttosto qualcosa in cui puoi puntare e fare clic su qualcosa ma non inserire il testo, i buoni vecchi database relazionali sono probabilmente un modo migliore per andare.