Solr vs. ElasticSearch [ditutup]

729

Apa perbedaan arsitektur inti antara teknologi ini?

Juga, kasus penggunaan apa yang umumnya lebih sesuai untuk masing-masing kasus?

Ben ODay
sumber
6
Anda mungkin ingin melihat ini: stackoverflow.com/questions/2271600/…
Bob Yoplait
13
Posting ini baru & cukup bagus dari sudut pandang saya, datanami.com/2015/01/22/solr-elasticsearch-question
Eric Wang
3
Perbandingan 2015 lainnya: quora.com/…
rleir
Lihat solr-vs-elasticsearch.com
Philip Bergström

Jawaban:

558

Memperbarui

Sekarang ruang lingkup pertanyaan telah diperbaiki, saya dapat menambahkan sesuatu dalam hal ini juga:

Ada banyak perbandingan antara Apache Solr dan ElasticSearch yang tersedia, jadi saya akan merujuk sendiri yang menurut saya paling berguna, yaitu mencakup aspek yang paling penting:

  • Bob Yoplait sudah menghubungkan jawaban kimchy dengan ElasticSearch, Sphinx, Lucene, Solr, Xapian. Yang cocok untuk penggunaan mana? , yang merangkum alasan mengapa ia terus maju dan menciptakan ElasticSearch , yang menurutnya memberikan model terdistribusi yang jauh lebih unggul dan kemudahan penggunaan dibandingkan dengan Solr.

  • Pencarian Realtime Ryan Sonnek : Solr vs Elasticsearch memberikan analisis / perbandingan yang mendalam dan menjelaskan mengapa ia beralih dari Solr ke ElasticSeach, meskipun sudah menjadi pengguna Solr yang bahagia - ia merangkum ini sebagai berikut:

    Solr mungkin menjadi senjata pilihan ketika membangun aplikasi pencarian standar , tetapi Elasticsearch membawanya ke tingkat berikutnya dengan arsitektur untuk membuat aplikasi pencarian realtime modern . Perkolasi adalah fitur yang menarik dan inovatif yang sendirian meniup Solr keluar dari air. Elasticsearch scalable, cepat dan impian untuk diintegrasikan . Adios Solr, senang mengenal Anda. [penekanan milikku]

  • Artikel Wikipedia tentang ElasticSearch mengutip perbandingan dari majalah iX Jerman yang terkenal, yang berisi daftar keuntungan dan kerugian, yang cukup meringkas apa yang telah dikatakan di atas:

    Keuntungan :

    • ElasticSearch didistribusikan. Tidak diperlukan proyek terpisah. Replika juga hampir real-time, yang disebut "Push replikasi".
    • ElasticSearch sepenuhnya mendukung pencarian waktu dekat Apache Lucene.
    • Menangani multitenancy bukan konfigurasi khusus, di mana dengan Solr diperlukan pengaturan yang lebih lanjut.
    • ElasticSearch memperkenalkan konsep Gateway, yang membuat backup penuh lebih mudah.

    Kekurangan :


Jawaban awal

Mereka adalah teknologi yang sama sekali berbeda menangani kasus penggunaan yang sama sekali berbeda, sehingga tidak dapat dibandingkan sama sekali dengan cara yang bermakna:

  • Apache Solr - Apache Solr menawarkan kemampuan Lucene dalam server pencarian cepat dan mudah digunakan dengan fitur-fitur tambahan seperti faceting, skalabilitas, dan banyak lagi

  • Amazon ElastiCache - Amazon ElastiCache adalah layanan web yang membuatnya mudah digunakan, dioperasikan, dan skala cache dalam -memori di cloud.

    • Harap dicatat bahwa Amazon ElastiCache sesuai dengan protokol dengan Memcached, sistem caching objek memori yang diadopsi secara luas, sehingga kode, aplikasi, dan alat populer yang Anda gunakan hari ini dengan lingkungan Memcached yang ada akan bekerja secara mulus dengan layanan (lihat Memcached untuk detailnya).

[penekanan milikku]

Mungkin ini telah dikacaukan dengan dua teknologi terkait berikut ini satu atau lain cara:

  • ElasticSearch - Ini adalah Open Source (Apache 2), Terdistribusi, Tenang, Mesin Pencari yang dibangun di atas Apache Lucene.

  • Amazon CloudSearch - Amazon CloudSearch adalah layanan pencarian yang dikelola sepenuhnya di cloud yang memungkinkan pelanggan untuk dengan mudah mengintegrasikan fungsionalitas pencarian yang cepat dan sangat skalabel ke dalam aplikasi mereka.

Penawaran Solr dan ElasticSearch terdengar sangat mirip pada pandangan pertama, dan keduanya menggunakan mesin pencari backend yang sama, yaitu Apache Lucene .

Sementara Solr lebih tua, cukup fleksibel dan matang serta banyak digunakan, ElasticSearch telah dikembangkan secara khusus untuk mengatasi kekurangan Solr dengan persyaratan skalabilitas di lingkungan cloud modern, yang sulit untuk diatasi dengan Solr .

Karena itu mungkin akan sangat berguna untuk membandingkan ElasticSearch dengan Amazon CloudSearch yang baru diperkenalkan (lihat posting pengantar Mulai Pencarian dalam Satu Jam dengan Kurang dari $ 100 / Bulan ), karena keduanya mengklaim untuk menutup kasus penggunaan yang sama pada prinsipnya.

Steffen Opel
sumber
@boday: Suara seperti mereka mungkin menggunakan Lucene berdasarkan elasticsearch memang.
Steffen Opel
6
Sekarang ada perusahaan di balik elasticsearch yang menjadi satu-satunya kerugian pengembang utama harus hilang.
javanna
2
Tampaknya autowarming ditangani oleh ElasticSearch sekarang. Lihat github.com/elasticsearch/elasticsearch/issues/1913
unludo
37
Semua kelebihan ElasticSearch yang tercantum di bagian majalah iX sekarang juga salah. 1) SolrCloud bukan lagi proyek terpisah. Memang, Solr dan Lucene sekarang menjadi bagian dari proyek yang sama. 2) Solr mendukung NRT. 3) Solr menangani banyak koleksi dalam satu cluster 4) Solr juga telah menambahkan fitur replikasi yang membuat cadangan lebih mudah.
MattMcKnight
2
Jangan lupa tentang agregasi yang disediakan ElasticSearch untuk mereka yang membutuhkan fungsionalitas seperti OLAP. Solr cloud hanya memiliki faceting terbatas. Dan jika Anda membutuhkan peringatan tentang agregasi yang diberikan oleh perkolasi ES.
markgiaconia
205

Saya melihat beberapa jawaban di atas sekarang agak ketinggalan zaman. Dari sudut pandang saya, dan saya bekerja dengan Solr (Cloud dan non-Cloud) dan ElasticSearch setiap hari, berikut adalah beberapa perbedaan yang menarik:

  • Komunitas: Solr memiliki komunitas pengguna, pengembang, dan kontributor yang lebih besar, lebih dewasa. ES memiliki komunitas pengguna yang lebih kecil namun aktif dan komunitas kontributor yang terus bertambah
  • Kedewasaan: Solr lebih dewasa, tetapi ES telah tumbuh dengan cepat dan saya menganggapnya stabil
  • Kinerja: sulit dinilai. Saya / kami belum melakukan tolok ukur kinerja langsung. Seseorang di LinkedIn pernah membandingkan Solr vs ES vs Sensei, tetapi hasil awal harus diabaikan karena mereka menggunakan pengaturan non-ahli untuk Solr dan ES.
  • Desain: Orang menyukai Solr. Java API agak bertele-tele, tetapi orang-orang suka bagaimana disatukan. Sayangnya, kode solr tidak selalu sangat cantik. ES juga memiliki sharding, replikasi real-time, dokumen dan routing bawaan. Sementara beberapa di antaranya ada di Solr, rasanya agak seperti sebuah pikiran.
  • Dukungan: ada perusahaan yang menyediakan dukungan teknis dan konsultasi untuk Solr dan ElasticSearch. Saya pikir satu-satunya perusahaan yang menyediakan dukungan untuk keduanya adalah Sematext (pengungkapan: Saya pendiri Sematext)
  • Skalabilitas: keduanya dapat diskalakan ke kluster yang sangat besar. ES lebih mudah untuk diukur daripada versi Solr 4.0 Solr sebelumnya, tetapi dengan Solr 4.0 itu tidak lagi menjadi masalah.

Untuk cakupan yang lebih menyeluruh tentang topik Solr vs. ElasticSearch, lihat di https://sematext.com/blog/solr-vs-elasticsearch-part-1-overview/ . Ini adalah posting pertama dalam rangkaian posting dari Sematext yang melakukan perbandingan Solr vs ElasticSearch langsung dan netral. Pengungkapan: Saya bekerja di Sematext.

Otis Gospodnetic
sumber
@Rubytastic - Anda mungkin ingin mengomentari kiriman untuk mendapatkan perhatian penulis dan mendapatkan cakupan konsumsi memori. Tetapi posting blog.sematext.com/2012/05/17/elasticsearch -cache - usage mungkin sudah memiliki apa yang Anda cari.
Otis Gospodnetic
1
Terima kasih telah berbagi pendapat & posting blog tulisan tangan yang ditulis dengan baik. Sudah 2 tahun sejak posting ini. Saya pikir komunitas akan mendapat manfaat jika Anda bisa berbagi lebih banyak wawasan yang Anda kumpulkan di sepanjang jalan. Sesuatu yang dapat membantu orang memutuskan mana di antara solr / elasticSearch yang lebih baik bagi mereka.
pengguna
Saya akan menambahkan bahwa dengan DataStax Anda mendapatkan replikasi dekat waktu nyata dengan Solr.
KingOfHypocrites
23

Saya melihat bahwa banyak orang di sini telah menjawab pertanyaan ElasticSearch vs Solr ini dalam hal fitur dan fungsionalitas, tetapi saya tidak melihat banyak diskusi di sini (atau di tempat lain) mengenai bagaimana mereka membandingkan dalam hal kinerja.

Itu sebabnya saya memutuskan untuk melakukan penyelidikan sendiri . Saya mengambil layanan data mikro sumber heterogen yang sudah dikodekan yang sudah menggunakan Solr untuk pencarian istilah. Saya mengganti Solr untuk ElasticSearch kemudian saya menjalankan kedua versi pada AWS dengan aplikasi uji beban yang sudah dikodekan dan menangkap metrik kinerja untuk analisis selanjutnya.

Inilah yang saya temukan. ElasticSearch memiliki 13% lebih tinggi throughput ketika datang untuk mengindeks dokumen tetapi Solr sepuluh kali lebih cepat. Ketika datang untuk menanyakan dokumen, Solr memiliki throughput lima kali lebih banyak dan lima kali lebih cepat daripada ElasticSearch.

Glenn
sumber
Menarik, saya baru saja mengevaluasi Solr dan Elasticsearch dan menemukan pengindeksan set dokumen 1M yang sama memakan waktu dua kali lebih lama untuk Elasticsearch dibandingkan dengan Solr.
David Thomas
16

Karena sejarah panjang Apache Solr, saya pikir salah satu kekuatan Solr adalah ekosistemnya . Ada banyak plugin Solr untuk berbagai jenis data dan keperluan.

tumpukan solr

Cari platform di lapisan berikut dari bawah ke atas:

  • Data
    • Tujuan: Menampilkan berbagai tipe dan sumber data
  • Bangunan dokumen
    • Tujuan: Membangun informasi dokumen untuk pengindeksan
  • Pengindeksan dan pencarian
    • Tujuan: Membuat dan meminta indeks dokumen
  • Peningkatan logika
    • Tujuan: Logika tambahan untuk memproses kueri dan hasil pencarian
  • Layanan platform pencarian
    • Tujuan: Tambahkan fungsi tambahan inti mesin pencari untuk menyediakan platform layanan.
  • Aplikasi UI
    • Tujuan: Antarmuka pencarian pengguna akhir atau aplikasi

Artikel referensi: Pencarian perusahaan

mingxue
sumber
14

Saya telah membuat tabel perbedaan besar antara elasticsearch dan Solr dan splunk, Anda dapat menggunakannya sebagai pembaruan 2016: masukkan deskripsi gambar di sini

Fardin Behboudi
sumber
1
Baris skema data agak menyesatkan ... Elastis memiliki Pemetaan yang pada dasarnya adalah skema (tetapi tidak diharuskan secara default). Solr mengirim sedemikian rupa sehingga seseorang harus menginstal konfigurasi sebelum dapat berfungsi, ada beberapa konfigurasi contoh yang disediakan yang dapat Anda pilih dengan segera dan satu schemaless, meskipun skema yang dikendalikan dengan hati-hati mungkin lebih umum ketika menggunakan solr.
Gus
2
Solr Streaming API menyediakan kemampuan MapReduce
whoer
13

Saya telah bekerja pada pencarian solr dan elastis untuk aplikasi .Net. Perbedaan utama yang saya hadapi adalah

Pencarian elastis:

  • Lebih banyak kode dan lebih sedikit konfigurasi, namun ada api yang harus diubah tetapi masih ada perubahan kode
  • untuk tipe kompleks, ketik dalam tipe yaitu tipe bersarang (tidak dapat dicapai dalam solr)

Solr:

  • kode lebih sedikit dan lebih banyak konfigurasi dan karenanya lebih sedikit pemeliharaan
  • untuk pengelompokan hasil selama kueri (banyak pekerjaan yang harus dicapai dalam pencarian elastis dalam waktu singkat dan tidak langsung)
robert
sumber
7

Walaupun semua tautan di atas memiliki manfaat, dan telah sangat bermanfaat bagi saya di masa lalu, sebagai ahli bahasa yang "terpapar" ke berbagai mesin pencari Lucene selama 15 tahun terakhir, saya harus mengatakan bahwa pengembangan pencarian elastis sangat cepat dengan Python. Meski begitu, beberapa kode terasa tidak intuitif bagi saya. Jadi, saya menjangkau ke salah satu komponen tumpukan ELK, Kibana, dari perspektif open source, dan menemukan bahwa saya dapat membuat kode elastics cryptic dengan mudah di Kibana. Juga, saya bisa menarik pertanyaan Chrome Sense ke Kibana juga. Jika Anda menggunakan Kibana untuk mengevaluasi, itu akan semakin mempercepat evaluasi Anda. Apa yang memakan waktu berjam-jam untuk berjalan di platform lain sudah berjalan dan berjalan di JSON di Sense di atas elasticsearch (antarmuka RESTful) dalam beberapa menit paling buruk (set data terbesar); paling cepat dalam hitungan detik. Dokumentasi untuk elasticsearch, sementara 700+ halaman, tidak menjawab pertanyaan yang saya miliki yang biasanya akan diselesaikan dalam SOLR atau dokumentasi Lucene lainnya, yang jelas membutuhkan lebih banyak waktu untuk menganalisis. Juga, Anda mungkin ingin melihat Agregat di pencarian elastis, yang telah membawa Faceting ke tingkat yang baru.

Gambaran yang lebih besar: jika Anda melakukan ilmu data, analisis teks, atau linguistik komputasi, elasticsearch memiliki beberapa algoritma peringkat yang tampaknya berinovasi dengan baik di bidang pencarian informasi. Jika Anda menggunakan algoritma TF / IDF, Frekuensi Teks / Frekuensi Dokumen Balik, elasticsearch memperluas algoritme 1960-an ini ke tingkat yang baru, bahkan menggunakan BM25, Best Match 25, dan algoritme Relevancy Ranking lainnya. Jadi, jika Anda membuat skor atau meranking kata, frasa atau kalimat, elasticsearch melakukan penilaian ini dengan cepat, tanpa biaya besar dari pendekatan analisis data lainnya yang membutuhkan waktu berjam-jam - penghematan waktu elasticsearch lainnya. Dengan es, menggabungkan beberapa kekuatan penyatuan dari agregasi dengan penilaian dan peringkat relevansi data JSON waktu nyata, Anda dapat menemukan kombinasi yang unggul,

Catatan: memang melihat diskusi serupa tentang agregasi di atas, tetapi tidak pada agregasi dan penilaian relevansi - permintaan maaf saya untuk tumpang tindih. Pengungkapan: Saya tidak bekerja untuk elastis dan tidak akan bisa mendapatkan keuntungan dalam waktu dekat dari karya bagus mereka karena jalur arsitektur yang berbeda, kecuali saya melakukan pekerjaan amal dengan elasticsearch, yang tidak akan menjadi ide yang buruk

Metodody
sumber
6

Bayangkan use case:

  1. Banyak (100+) indeks pencarian kecil (10Mb-100Mb, 1000-100000 dokumen).
  2. Mereka menggunakan banyak aplikasi (layanan microser)
  3. Setiap aplikasi dapat menggunakan lebih dari satu indeks
  4. Kecil dengan indeks ukuran, ya. Tetapi pemuatan yang besar (ratusan permintaan pencarian per detik) dan permintaan itu kompleks (banyak agregasi, kondisi, dan sebagainya)
  5. Waktu henti tidak diizinkan
  6. Semua itu bekerja bertahun-tahun, dan terus berkembang.

Gagasan untuk memiliki instance ES individual per setiap indeks - adalah biaya overhead yang besar dalam kasus ini.

Berdasarkan pengalaman saya, jenis penggunaan ini sangat kompleks untuk didukung dengan Elasticsearch.

Mengapa?

PERTAMA.

Masalah utama adalah mengabaikan kompatibilitas kembali mendasar.

Memecah perubahan sangat keren! (Catatan: bayangkan SQL-server yang mengharuskan Anda melakukan perubahan kecil dalam semua pernyataan SQL Anda, ketika ditingkatkan ... tidak dapat membayangkannya. Tetapi untuk ES itu normal)

Penghentian yang akan dijatuhkan dalam rilis besar berikutnya sangat seksi! (Catatan: Anda tahu, Java mengandung beberapa penghinaan, yang berumur 20+ tahun, tetapi masih berfungsi dalam versi Java yang sebenarnya ...)

Dan tidak hanya itu, kadang-kadang Anda bahkan memiliki sesuatu yang tidak didokumentasikan (secara pribadi hanya sekali tetapi ...)

Begitu. Jika Anda ingin meningkatkan ES (karena Anda memerlukan fitur baru untuk beberapa aplikasi atau Anda ingin mendapatkan perbaikan bug) - Anda berada di neraka. Terutama jika ini tentang peningkatan versi utama.

API Klien tidak akan kembali kompatibel. Pengaturan indeks tidak akan kembali kompatibel. Dan memutakhirkan semua aplikasi / layanan saat yang sama dengan peningkatan ES tidak realistis.

Tetapi Anda harus melakukannya dari waktu ke waktu. Tidak ada jalan lain.

Indeks yang ada diperbarui secara otomatis? - Iya. Tapi itu tidak membantu Anda ketika Anda perlu mengubah beberapa pengaturan indeks lama.

Untuk mengatasinya, Anda perlu terus-menerus menginvestasikan banyak daya dalam ... meneruskan kompatibilitas aplikasi / layanan Anda dengan rilis ES yang akan datang. Atau Anda perlu membuat (dan tetap mendukung) semacam middleware antara aplikasi / layanan Anda dan ES, yang memberi Anda kembali API klien yang kompatibel. (Dan, Anda tidak dapat menggunakan Transport Client (karena itu memerlukan peningkatan jar untuk setiap upgrade ES versi kecil), dan fakta ini tidak membuat hidup Anda lebih mudah)

Apakah ini terlihat sederhana & murah? Tidak, tidak. Jauh dari itu. Pemeliharaan berkelanjutan dari infrastruktur kompleks yang berbasis ES, adalah cara yang mahal dalam semua hal yang memungkinkan.

KEDUA. API sederhana? Ya ... tidak juga. Ketika Anda benar-benar menggunakan kondisi dan agregasi yang kompleks .... JSON-request dengan 5 level bersarang adalah apa pun, tetapi tidak sederhana.


Sayangnya, saya tidak punya pengalaman dengan SOLR, tidak bisa mengatakan apa-apa tentang itu.

Tapi Sphinxsearch jauh lebih baik dalam skenario ini, karena SphinxQL yang sepenuhnya kompatibel kembali.

Catatan: Sphinxsearch / Manticore memang menarik. Ini bukan berbasis Lucine, dan akibatnya sangat berbeda. Berisi beberapa fitur unik dari kotak yang ES tidak miliki dan gila cepat dengan indeks ukuran kecil / menengah.

Gmugra
sumber
4

Jika Anda sudah menggunakan SOLR, tetap gunakan itu. Jika Anda memulai, pergi untuk pencarian elastis.

Masalah utama maksimum telah diperbaiki di SOLR dan ini cukup matang.

Behzad Qureshi
sumber
7
Mengapa Anda merekomendasikan Elastis untuk proyek baru?
forsberg
1
Pencarian elastis adalah baru sehingga menggunakan teknologi / arsitektur terbaru.
Behzad Qureshi
5
Saya juga bisa membuat sesuatu yang baru tetapi hanya karena saya menggunakan teknologi baru atau arsitektur yang berbeda, itu tidak berarti itu lebih baik daripada yang sudah ada di pasaran.
Jan Sommer
Setuju tetapi sebagai arsitek, Anda pasti akan lebih baik dari apa yang sudah ada di pasar. 2 sen saya :)
Behzad Qureshi
3

Saya telah menggunakan Elasticsearch selama 3 tahun dan Solr selama sekitar satu bulan, saya merasa cluster elasticsearch cukup mudah dipasang dibandingkan dengan instalasi Solr. Elasticsearch memiliki kumpulan dokumen bantuan dengan penjelasan yang luar biasa. Salah satu kasus penggunaan saya terjebak dengan Histogram Aggregation yang tersedia di ES namun tidak ditemukan di Solr.

Prakash Ghanshani
sumber
2

Saya hanya menggunakan pencarian elastis. Karena saya menemukan solr sangat sulit untuk memulai. Fitur pencarian elastis:

  1. Mudah untuk memulai, sangat sedikit pengaturan. Bahkan seorang pemula dapat mengatur cluster langkah demi langkah.
  2. API Tenang Sederhana yang menggunakan kueri NoSQL. Dan banyak perpustakaan bahasa untuk mengakses dengan mudah.
  3. Dokumen yang bagus, Anda dapat membaca buku:. Ada versi web di situs web resmi.
Howardyan
sumber
2

Tambahkan dokumen bersarang di solr sangat kompleks dan pencarian data bersarang juga sangat kompleks. tetapi Pencarian Elastis mudah untuk menambahkan dokumen dan pencarian bersarang

Chirag
sumber