Solr vs. ElasticSearch

Quali sono le principali differenze architettoniche tra queste tecnologie?

Inoltre, quali casi d’uso sono generalmente più appropriati per ciascuno?

Aggiornare

Ora che l’ambito della domanda è stato corretto, potrei aggiungere qualcosa anche a questo riguardo:

Esistono molti confronti tra Apache Solr ed ElasticSearch disponibili, quindi farò riferimento a quelli che ho trovato più utili io stesso, ovvero a coprire gli aspetti più importanti:

  • Bob Yoplait ha già collegato la risposta di kimchy a ElasticSearch, Sphinx, Lucene, Solr, Xapian. Quale misura per quale utilizzo? , che riassume i motivi per cui è andato avanti e ha creato ElasticSearch , che a suo parere fornisce un modello distribuito e una facilità d’uso molto superiori rispetto a Solr.

  • Ricerca in tempo reale di Ryan Sonnek : Solr vs Elasticsearch fornisce un’analisi approfondita / confronto e spiega il motivo per cui è passato da Solr a ElasticSeach, nonostante sia già un buon utente Solr – riassume questo come segue:

    Solr può essere l’arma preferita quando si creano applicazioni di ricerca standard , ma Elasticsearch lo porta al livello successivo con un’architettura per la creazione di moderne applicazioni di ricerca in tempo reale . La percolazione è una caratteristica entusiasmante e innovativa che solrina Solr appena fuori dall’acqua. Elasticsearch è scalabile, veloce e un sogno da integrare con . Adios Solr, è stato bello conoscerti. [enfasi mia]

  • L’articolo di Wikipedia su ElasticSearch cita un paragone della rinomata rivista tedesca iX, che elenca vantaggi e svantaggi, che riassumono quasi quanto detto sopra:

    Vantaggi :

    • ElasticSearch è distribuito. Nessun progetto separato richiesto. Anche le repliche sono quasi in tempo reale, che si chiama “Replica push”.
    • ElasticSearch supporta pienamente la ricerca quasi in tempo reale di Apache Lucene.
    • La gestione della multi-tenancy non è una configurazione speciale, dove con Solr è necessaria una configurazione più avanzata.
    • ElasticSearch introduce il concetto di Gateway, che semplifica i backup completi.

    Svantaggi :

    • Solo uno sviluppatore principale [non più applicabile secondo l’attuale organizzazione GitHub di elasticsearch , oltre ad avere una base di committer piuttosto triggers in primo luogo]
    • Nessuna funzione di scoppio automatico [non più applicabile in base alla nuova API Index Warmup ]

Risposta iniziale

Sono tecnologie completamente diverse che affrontano casi d’uso completamente diversi, quindi non possono essere confrontati affatto in alcun modo significativo:

  • Apache Solr – Apache Solr offre le capacità di Lucene in un server di ricerca veloce e facile da usare con funzionalità aggiuntive come sfaccettature, scalabilità e molto altro

  • Amazon ElastiCache – Amazon ElastiCache è un servizio Web che semplifica l’implementazione, l’utilizzo e la scalabilità di una cache in -memory nel cloud.

    • Amazon ElastiCache è compatibile con il protocollo con Memcached, un sistema di caching di oggetti di memoria ampiamente utilizzato, quindi il codice, le applicazioni e gli strumenti più diffusi che usi oggi con gli ambienti Memcached esistenti funzioneranno perfettamente con il servizio (vedi Memcached per i dettagli).

[enfasi mia]

Forse questo è stato confuso con le seguenti due tecnologie correlate in un modo o nell’altro:

  • ElasticSearch – È un motore di ricerca open source (Apache 2), distribuito, RESTful, costruito su Apache Lucene.

  • Amazon CloudSearch – Amazon CloudSearch è un servizio di ricerca completamente gestito nel cloud che consente ai clienti di integrare facilmente funzionalità di ricerca rapida e altamente scalabile nelle loro applicazioni.

Le offerte Solr e ElasticSearch sembrano sorprendentemente simili a prima vista, ed entrambe utilizzano lo stesso motore di ricerca di backend, vale a dire Apache Lucene .

Sebbene Solr sia più vecchio, piuttosto versatile, maturo e ampiamente utilizzato, ElasticSearch è stato sviluppato appositamente per risolvere le carenze di Solr con i requisiti di scalabilità nei moderni ambienti cloud, che sono difficili da gestire con Solr .

In questo modo sarebbe probabilmente più utile confrontare ElasticSearch con Amazon CloudSearch di recente introduzione (vedere il post introduttivo Iniziare la ricerca in un’ora per meno di $ 100 al mese ), poiché entrambi sostengono di trattare gli stessi casi d’uso in linea di principio.

Vedo che alcune delle risposte di cui sopra sono ora un po ‘obsolete. Dal mio punto di vista, e lavoro con Solr (Cloud e non Cloud) e ElasticSearch su base giornaliera, ecco alcune differenze interessanti:

  • Comunità: Solr ha una comunità di utenti, sviluppatori e collaboratori più grande e matura. ES ha una comunità di utenti più piccola, ma triggers e una crescente comunità di contributori
  • Maturità: Solr è più maturo, ma ES è cresciuto rapidamente e lo considero stabile
  • Performance: difficile da giudicare. Io / noi non abbiamo fatto benchmark diretti sulle prestazioni. Una persona su LinkedIn ha confrontato Solr vs ES vs Sensei una volta, ma i risultati iniziali dovrebbero essere ignorati perché hanno usato setup non esperti sia per Solr che per ES.
  • Design: la gente ama Solr. L’API Java è alquanto prolissa, ma alla gente piace come è messa insieme. Il codice Solr purtroppo non è sempre molto carino. Inoltre, ES ha funzionalità di sharding, replica in tempo reale, documenti e routing integrati. Anche se parte di questo esiste anche in Solr, sembra un po ‘come un ripensamento.
  • Supporto: ci sono aziende che forniscono supporto tecnico e di consulenza sia per Solr che per ElasticSearch. Penso che l’unica società che fornisce supporto per entrambi è Sematext (divulgazione: I’m Sematext founder)
  • Scalabilità: entrambi possono essere ridimensionati in cluster molto grandi. ES è più semplice da scalare rispetto alla versione precedente di Solr 4.0 di Solr, ma con Solr 4.0 non è più così.

Per una trattazione più approfondita dell’argomento Solr vs. ElasticSearch dare un’occhiata a http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/ . Questo è il primo post della serie di post di Sematext che fa il confronto diretto e neutrale tra Solr e ElasticSearch. Divulgazione: lavoro a Sematext.

Vedo che molta gente qui ha risposto a questa domanda di ElasticSearch vs Solr in termini di funzionalità e funzionalità, ma non vedo molte discussioni qui (o altrove) riguardo a come si confrontano in termini di prestazioni.

Ecco perché ho deciso di condurre le mie indagini . Ho preso un micro-servizio di fonte di dati eterogeneo già codificato che già utilizzava Solr per la ricerca di termini. Ho sostituito Solr per ElasticSearch, quindi ho eseguito entrambe le versioni su AWS con un’applicazione di test del carico già codificata e ho acquisito le metriche delle prestazioni per le successive analisi.

Ecco cosa ho trovato. ElasticSearch aveva un throughput del 13% più alto quando si trattava di indicizzare i documenti, ma Solr era dieci volte più veloce. Quando si trattava di interrogare i documenti, Solr aveva una velocità cinque volte superiore ed era cinque volte più veloce di ElasticSearch.

Ho lavorato sia su solr che sulla ricerca elastica per le applicazioni .Net. La principale differenza rispetto a ciò che ho affrontato è

Ricerca elastica:

  • Più codice e meno configurazione, tuttavia ci sono delle API da cambiare ma c’è ancora un cambio di codice
  • per tipi complessi, digitare all’interno di tipi, ad esempio tipi annidati (non è stato ansible ottenere in solr)

Solr:

  • meno codice e più configurazione e quindi meno manutenzione
  • per raggruppare i risultati durante l’interrogazione (molto lavoro da fare nella ricerca elastica in breve non in modo diretto)

Dalla lunga storia di Apache Solr, penso che un punto di forza del Solr sia il suo ecosistema . Esistono molti plugin Solr per diversi tipi di dati e scopi.

pila solr

Piattaforma di ricerca nei seguenti livelli dal basso verso l’alto:

  • Dati
    • Scopo: rappresenta vari tipi di dati e fonti
  • Costruzione di documenti
    • Scopo: creare informazioni sul documento per l’indicizzazione
  • Indicizzazione e ricerca
    • Scopo: creare e interrogare un indice di documento
  • Miglioramento della logica
    • Scopo: logica aggiuntiva per l’elaborazione di query di ricerca e risultati
  • Servizio di piattaforma di ricerca
    • Scopo: aggiungere funzionalità aggiuntive del core del motore di ricerca per fornire una piattaforma di servizi.
  • Applicazione dell’interfaccia utente
    • Scopo: interfaccia di ricerca per l’utente finale o applicazioni

Articolo di riferimento: ricerca aziendale

Mentre tutti i collegamenti sopra citati hanno un merito, e mi hanno largamente aiutato in passato, come linguista “esposto” a vari motori di ricerca Lucene negli ultimi 15 anni, devo dire che lo sviluppo di ricerche elastiche è molto veloce in Python. Detto questo, parte del codice mi sembrava non intuitivo. Quindi, ho raggiunto un componente dello stack ELK, Kibana, da una prospettiva open source, e ho scoperto che potevo generare il codice un po ‘criptico di elasticsearch molto facilmente in Kibana. Inoltre, ho potuto richiamare le query di Chrome Sense in Kibana. Se usi Kibana per valutare es, accelererà ulteriormente la tua valutazione. Ciò che impiegò ore per funzionare su altre piattaforms era attivo e funzionante in JSON in Sense su elasticsearch (interfaccia RESTful) nel peggiore dei casi (i più grandi set di dati); in pochi secondi al massimo. La documentazione di elasticsearch, a fronte di oltre 700 pagine, non rispondeva alle domande che avevo normalmente risolto in SOLR o in altra documentazione di Lucene, che ovviamente richiedeva più tempo per l’analisi. Inoltre, potresti dare un’occhiata agli Aggregate in Elastico-Ricerca, che hanno portato la Faceting a un nuovo livello.

Quadro più ampio: se si sta facendo scienza dei dati, analisi del testo o linguistica computazionale, elasticsearch ha alcuni algoritmi di classificazione che sembrano innovare bene nell’area di reperimento delle informazioni. Se si utilizzano algoritmi TF / IDF, Frequenza di testo / Frequenza documento inversa, elasticsearch estende l’algoritmo di questo anni ’60 ad un nuovo livello, anche utilizzando gli algoritmi BM25, Best Match 25 e altri livelli di pertinenza. Quindi, se stai segnando o classificando parole, frasi o frasi, elasticsearch esegue questo punteggio al volo, senza il grande sovraccarico di altri approcci di analisi dei dati che richiedono ore – un altro risparmio di tempo per elasticsearch. Con es, combinando alcuni dei punti di forza del bucketing dalle aggregazioni con il punteggio e la classifica della pertinenza dei dati JSON in tempo reale, potresti trovare una combinazione vincente, a seconda dell’approccio (storie) o architettonico (casi d’uso).

Nota: ho visto una discussione simile sulle aggregazioni di cui sopra, ma non su aggregazioni e punteggio di pertinenza: le mie scuse per qualsiasi sovrapposizione. Divulgazione: non lavoro per elastico e non sarà in grado di beneficiare nel prossimo futuro dal loro eccellente lavoro a causa di un diverso percorso architettonico, a meno che non faccia qualche lavoro di beneficenza con elasticsearch, che non sarebbe una ctriggers idea

Ho creato una tabella delle principali differenze tra elasticsearch e Solr e splunk, puoi usarla come aggiornamento 2016: inserisci la descrizione dell'immagine qui

Ho usato Elasticsearch per 3 anni e Solr per circa un mese, credo che il cluster elasticsearch sia abbastanza facile da installare rispetto all’installazione di Solr. Elasticsearch ha una serie di documenti di aiuto con una grande spiegazione. Uno dei casi d’uso mi è stato bloccato con l’istogramma Aggregation che era disponibile in ES ma che non è stato trovato in Solr.

Se stai già usando SOLR, resta fedele ad esso. Se stai avviando, vai per la ricerca elastica.

I principali problemi massimi sono stati risolti in SOLR ed è piuttosto maturo.

Io uso solo la ricerca elastica. Da quando ho trovato il solr è molto difficile iniziare. Funzionalità di Elastic-search:

  1. Facile da avviare, pochissime impostazioni. Anche un principiante può configurare un cluster passo dopo passo.
  2. API Restful semplice che utilizza la query NoSQL. E molte librerie di lingue per un facile accesso.
  3. Buon documento, puoi leggere il libro:. C’è una versione web sul sito ufficiale.

Aggiungere un documento nidificato in solr ricerca di dati molto complessa e annidata anche molto complessa. ma la ricerca elastica semplifica l’aggiunta di documenti e ricerche annidati

Immagina il caso d’uso:

  1. Un sacco (oltre 100) di piccoli (10Mb-100Mb, 1000-100000 documenti) indici di ricerca.
  2. Stanno usando da molte applicazioni (microservices)
  3. Ogni applicazione può utilizzare più di un indice
  4. Indice piccolo per dimensioni, sì. Ma carico enorme (centinaia di richieste di ricerca al secondo) e le richieste sono complesse (più aggregazioni, condizioni e così via)
  5. I tempi improduttivi non sono consentiti
  6. Tutto ciò funziona da anni, e cresce costantemente.

L’idea di avere una singola istanza ES per ogni indice è un enorme sovraccarico in questo caso.

Sulla base della mia esperienza, questo tipo di caso d’uso è molto complesso da supportare con Elasticsearch.

Perché?

PRIMO.

Il problema principale è il rifiuto fondamentale della compatibilità con le versioni precedenti.

Le ultime modifiche sono così belle! (Nota: immagina SQL-server che richiede di apportare piccole modifiche in tutte le tue istruzioni SQL, quando aggiornato … non riesci a immaginarlo. Ma per ES è normale)

Le deprecazioni che cadranno nella prossima major release sono così sexy! (Nota: sai, Java contiene alcune deprecazioni, che hanno più di 20 anni, ma funzionano ancora nella versione attuale di Java …)

E non solo, a volte hai anche qualcosa che non è stato documentato (si è imbattuto personalmente solo una volta ma …)

Così. Se vuoi aggiornare ES (perché hai bisogno di nuove funzionalità per qualche app o vuoi ottenere correzioni di bug) – sei all’inferno. Soprattutto se riguarda l’aggiornamento della versione principale.

L’API client non sarà compatibile con la versione precedente. Le impostazioni dell’indice non saranno compatibili. E aggiornare tutte le app / servizi nello stesso momento con l’aggiornamento ES non è realistico.

Ma devi farlo di volta in volta. Nessun altro modo.

Gli indici esistenti vengono automaticamente aggiornati? – Sì. Ma non ti aiuta quando dovrai modificare alcune impostazioni del vecchio indice.

Per convivere con questo, è necessario investire costantemente molto in … compatibilità diretta delle tue app / servizi con le versioni future di ES. Oppure devi build (e comunque supportare costantemente) una sorta di middleware tra la tua app / servizi e ES, che ti fornisce un’API client compatibile. (E, non è ansible utilizzare il client di trasporto (perché ha richiesto l’aggiornamento del jar per ogni aggiornamento della versione ES minore), e questo fatto non ti semplifica la vita)

Sembra semplice ed economico? No non lo è. Lontano da esso. La manutenzione continua di un’infrastruttura complessa basata su ES è molto costosa in tutti i sensi.

SECONDO. API semplice? Beh … no davvero. Quando usi davvero condizioni e aggregazioni complesse … La richiesta JSON con 5 livelli nidificati è qualsiasi cosa, ma non semplice.


Sfortunatamente, non ho esperienza con SOLR, non posso dire nulla al riguardo.

Ma Sphinxsearch è molto meglio in questo scenario, perché è totalmente compatibile con SphinxQL.

Nota: Sphinxsearch / Manticore sono davvero interessanti. Non è basato su Lucine, e come risultato seriamente diverso. Contiene diverse caratteristiche uniche della scatola che ES non ha e follemente veloce con indici di piccola / media dimensione.