risposta-alla-domanda-sullo-sviluppo-web-bd.com

Solr vs. ElasticSearch

Quali sono le principali differenze architettoniche tra queste tecnologie?

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

703
Ben ODay

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 attiva e una crescente comunità di contributori
  • Maturità: Solr è più maturo, ma ES è cresciuto rapidamente e lo considero stabile
  • Performance: difficile da giudicare. 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 è un po '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ù facile 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 https://sematext.com/blog/solr-vs-elasticsearch-part-1-overview/ . Questo è il primo post della serie di post di Sematext che fa un confronto diretto e neutrale tra Solr e ElasticSearch. Divulgazione: lavoro a Sematext.

201
Otis Gospodnetic

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) su come si confrontano in termini di prestazioni.

Ecco perché ho deciso di condurre la mia indagine . 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.

22
Glenn

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.

solr stack

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

  • Dati
    • Scopo: rappresentano 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 un 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

15
mingxue

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

Ricerca elastica:

  • Più codice e meno configurazione, tuttavia ci sono delle API da cambiare ma è ancora un cambiamento di codice
  • per tipi complessi, digitare all'interno di tipi i tipi nidificati (non è stato possibile 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)
12
robert

Ho creato una tabella delle principali differenze tra elasticsearch e Solr e splunk, puoi usarla come aggiornamento 2016:  enter image description here

10
Fardin Behboudi

Mentre tutti i link sopra 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 molto facilmente il codice un po 'criptico di elasticsearch in Kibana. Inoltre, ho potuto richiamare le query di Chrome Sense in Kibana. Se utilizzi Kibana per valutare es, accelererà ulteriormente la tua valutazione. Ciò che impiegò ore per funzionare su altre piattaforme era attivo e funzionante in JSON in Sense su elasticsearch (interfaccia RESTful) nel peggiore dei casi (set di dati più grandi); in 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 ad un nuovo livello.

Immagine più ampia: se stai 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 potrò beneficiare nel prossimo futuro del 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 cattiva idea

7
MethodyM

Immagina il caso d'uso:

  1. Un sacco (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.

In base alla 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 persino 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 costruire (e comunque supportare costantemente) una sorta di middleware tra la tua app/servizi e ES, che ti fornisce un'API client compatibile. (E, non è possibile 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.

5
Gmugra

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 Histogram Aggregation che era disponibile in ES ma non è stato trovato in Solr.

3

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.

3
Behzad Qureshi

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.
2
Howardyan

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 nidificati

2
Chirag