خانه --> موتورهای جستجو --> مقایسه موتور جستجوی Solr و ElasticSearch

مقایسه موتور جستجوی Solr و ElasticSearch

مقدمه

امروزه به علت گستره وسیع موتورهای جستجو و کارکردهای متفاوت آنها در حوزه های مختلف، انتخاب یک موتورجستجوی مناسب در راستای مرتفع کردن نیازمندی های مورد نظر مستلزم، مطالعه و مقایسه موتورجستجوهای موجود است. از این رو در این مبحث پیرامون مقایسه­ ی دو موتور جستجوی شناخته شده و مورد استفاده در بسیاری از پروژه های بزرگ با نام­ های Solr و ElasticSearch، توضیحاتی آورده شده است. این پست ابتدا به ویژگی­ های مطرح و بارز این دو محصول می­پردازد و سپس در حوزه­ های مختلف آنها را مقایسه می­کند. لازم به ذکر است که نسخه­ های مورد بررسی در این سند Solr 4 و ElasticSearch 1 می­باشند. اگر به لیست بانکهای اطلاعاتی برتر دنیا هم در سایت db-engines نگاهی بیندازید، این دو جستجوگر متن را جزء بیست بانک اطلاعاتی مطرح امروزین خواهید یافت.

مقایسه موتور جستجوی Solr و ElasticSearch
مقایسه موتور جستجوی Solr و ElasticSearch

 

 

موتور جستجوی Solr

Solr یک موتور جستجوی بسیار معروف و مورد استفاده می­باشد. این موتور جستجو متن باز بوده[۱] و محصول تیم Lucene از شرکت Apache می­ باشد. ویژگی­ های مهم آن شامل جستجوکننده قدرتمند کاملا متنی[۲]، ویژگی نشان دادن کلمات یافت شده درمتن[۳]، ویژگی جستجوی وجهی[۴]، شاخص­گذاری[۵] نزدیک به بلادرنگ[۶]، خوشه بندی پویا[۷]، یکپارچه­سازی پایگاه داده[۸]، بررسی انواع اسناد (بعنوان مثال: Word, PDF) غنی و جستجوی مبتنی بر اطلاعات جغرافیایی[۹] می­باشد. قابلیت­های غیرکارکردی Solr شامل اتکاپذیری بالا[۱۰]، مقیاس­پذیری و تحمل­پذیری خطا[۱۱]، مهیا کردن شاخص­گذاری توزیع شده[۱۲]، رونوشت داده[۱۳] و تنظیم بارگذاری[۱۴] پرس و جوها[۱۵]، تشخیص و بازیابی خودکار شکست خوردن سیستم[۱۶] و پیکربندی متمرکز[۱۷] می­باشد. Solr در خیلی از سایت­های بزرگ دنیا مورد استفاده قرار می­گیرد.

Solr به زبان جاوا نوشته شده است و می­تواند یه صورت یک Servlet در بسترهای Servlet ها چون Jetty به صورت مجزا اجرا شود. این موتور جستجو از کتابخانه جستجوی جاوا Lucene بعنوان هسته شاخص­گذاری و جستجو استفاده می­کند و رابط­های استفاده در برنامه­نویسی شبیه به REST HTTP/XML و رابط­های JSON کار با این موتور را از طریق هر زبان برنامه نویسی به طور مجازی برقرار کند. پیکربندی خارجی قدرتمند Solr اجازه پیاده سازی هر نوع برنامه­ای را بدون استفاده از جاوا و از طرفی معماری مبتنی بر افزونه این نرم­افزار قابلیت پیشرفته سفارشی سازی را در زمان نیاز فراهم می­آورد.

مقایسه محبوبیت ترند Solr و ElasticSearch در طول زمان (نمودار قدیمی است)
مقایسه محبوبیت ترند Solr و ElasticSearch در طول زمان (نمودار قدیمی است)

موتور جستجوی ElasticSearch

               ElasticSearch(ES) یک موتور جستجو و تحلیل منعطف، قدرتمند، متن باز، توزیع شده، دسترسی بالا[۱۸] و بلادرنگ می­باشد که هسته شاخص­گذار آن کتابخانه Lucene می­باشد. از ابتدا به منظور استفاده در محیط­های توزیع شده بنا شده است، جایی که اتکاپذیری و مقیاس پذیری باید وجود داشته باشد، ES توانایی حرکت آسان ماوراء جستجوی کاملا متنی ساده را به شما می­دهد. علاوه بر مجموع رابط­های برنامه نویسی تنومند[۱۹] و درخواست­های DSL(Domain Specific Language )، همچنین رابط­های زبان­های برنامه­نویسی معروف، ES وعده ­های بی­حد و حصر استفاده از فناوری جستجو را ارائه می­کند. علاوه بر قابلیت­های مذکور قابلیت­هایی دیگری نیز قابل ذکر است از قبیل

 

  • چندین شاخصی[۲۰] : یک خوشه می­تواند میزبان چند شاخصی که جدا از هم و یا به صورت یک گروه می­باشند، باشد.
  • مبتنی بر سند[۲۱] : ذخیره سازی موجودیت­های پیچیده دنیای واقعی به صورت اسناد JSON انجام می­گیرد. تمام فیلدها به صورت پیش فرض شاخص­گذاری می­شوند و تمام شاخص­ها در یک درخواست می­توانند استفاده شوند.
  • مدیریت مغایرت[۲۲] : یک کنترل کننده نسخه­ به منظور ممانعت از نابودی اطلاعات در زمان تغییرات همزمان
  • رابطRESTful : استفاده از رابط RESTful به گونه­ای که از JSON بر روی پروتکل HTTP استفاده می­کند.
  • ماندگاری در هر عملیات[۲۳] : برای ES در ابتدا امنیت داده مهم است. تغییرات اسناد در گزارش­های تراکنش­ها در چندین نود در خوشه مورد نظر ثبت می­شود تا امکان از دست رفتن داده به حداقل برسد.
  • عدم استفاده از قالب ثابت[۲۴] : ES به صورت اتوماتیک ساختار داده مورد نظر را از اسناد JSON استخراج کرده و پس از شاخص­گذاری آن را قابل جستجو قرار می­دهد. سپس بعدها با اعمال دانش خاص منظوره داده­های شما، نحوه شاخص­گذاری داده­های شما را تعیین می­کند.
مقایسه موتور جستجوی Solr و ElasticSearch
مقایسه موتور جستجوی Solr و ElasticSearch

مقایسه دو موتور جستجوی Solr و ElasticSearch

هر دو موتور جستجوی Solr و ElasticSearch مبتنی بر هسته­ی Lucene ساخته شده اند، به همین علت ویژگی­های هسته آنها یکسان می­باشد. این دو با استفاده از رابط­های برنامه­نویسی Lucene ویژگی­هایی را بر اساس آنها اضافه کرده و دسترسی به رابط­ها را به منظور استفاده در وب سرورها آسان کرده­است. در واقع تیم پیاده سازی به راحتی و با استفاده از دستورات HTTP به جای ارتباط مستقیم با Lucene و به دور از دغدغه زبان برنامه نویسی، شاخص­ها را ساخته و بر روی آنها جستجو می­کنند. برای مقایسه­ی این دو موتور جستجو در ذیل جدولی ارائه شده است که شامل تفاوت­های مهم و تاثیرگذار آنها می­باشد.

 

API

Feature Solr 6.2.1 ElasticSearch 5.0
Format XML, CSV, JSON JSON
HTTP REST API
Binary API SolrJ TransportClient, Thrift (through a plugin)
JMX support ES specific stats are exposed through the REST API
Official client libraries Java Java, Groovy, PHP, Ruby, Perl, Python, .NET, Javascript Official list of clients
Community client libraries PHP, Ruby, Perl, Scala, Python, .NET, Javascript, Go, Erlang, Clojure Clojure, Cold Fusion, Erlang, Go, Groovy, Haskell, Java, JavaScript, .NET, OCaml, Perl, PHP, Python, R, Ruby, Scala, Smalltalk, Vert.x Complete list
۳rd-party product integration (open-source) Drupal, Magento, Django, ColdFusion, WordPress, OpenCMS, Plone, Typo3, ez Publish, Symfony2, Riak (via Yokozuna) Drupal, Django, Symfony2, WordPress, CouchBase
۳rd-party product integration (commercial) DataStax Enterprise Search, Cloudera Search, Hortonworks Data Platform, MapR SearchBlox, Hortonworks Data Platform, MapR etc Complete list
Output JSON, XML, PHP, Python, Ruby, CSV, Velocity, XSLT, native Java JSON, XML/HTML (via plugin)

 

 

Infrastructure

Feature Solr 6.2.1 ElasticSearch 5.0
Master-slave replication Only in non-SolrCloud. In SolrCloud, behaves identically to ES. Not an issue because shards are replicated across nodes.
Integrated snapshot and restore Filesystem Filesystem, AWS Cloud Plugin for S3 repositories, HDFS Plugin for Hadoop environments, Azure Cloud Plugin for Azure storage repositories

 

Indexing

Feature Solr 6.2.1 ElasticSearch 5.0
Data Import DataImportHandler – JDBC, CSV, XML, Tika, URL, Flat File [DEPRECATED in 2.x] Rivers modules – ActiveMQ, Amazon SQS, CouchDB, Dropbox, DynamoDB, FileSystem, Git, GitHub, Hazelcast, JDBC, JMS, Kafka, LDAP, MongoDB, neo4j, OAI, RabbitMQ, Redis, RSS, Sofa, Solr, St9, Subversion, Twitter, Wikipedia
ID field for updates and deduplication
DocValues
Partial Doc Updates with stored fields with _source field
Custom Analyzers and Tokenizers
Per-field analyzer chain
Per-doc/query analyzer chain
Index-time synonyms Supports Solr and Wordnet synonym format
Query-time synonyms especially via hon-lucene-synonyms Technically, yes, but practically no because multi-word/phrase query-time synonyms are not supported. See ES docs and hon-lucene-synonyms blog for nuances.
Multiple indexes
Near-Realtime Search/Indexing
Complex documents
Schemaless ۴٫۴+
Multiple document types per schema One set of fields per schema, one schema per core
Online schema changes