Apache Solr vs Elasticsearch

API
Feature | Solr 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
Format | XML, CSV, JSON | JSON |
HTTP REST API | ![]() |
![]() |
Binary API | ![]() |
![]() |
JMX support | ![]() |
![]() |
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 |
3rd-party product integration (open-source) | Drupal, Magento, Django, ColdFusion, Wordpress, OpenCMS, Plone, Typo3, ez Publish, Symfony2, Riak (via Yokozuna) | Drupal, Django, Symfony2, Wordpress, CouchBase |
3rd-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 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
Master-slave replication | ![]() |
![]() |
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 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
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 | ![]() |
![]() |
Custom Analyzers and Tokenizers | ![]() |
![]() |
Per-field analyzer chain | ![]() |
![]() |
Per-doc/query analyzer chain | ![]() |
![]() |
Index-time synonyms | ![]() |
![]() |
Query-time synonyms | ![]() |
![]() |
Multiple indexes | ![]() |
![]() |
Near-Realtime Search/Indexing | ![]() |
![]() |
Complex documents | ![]() |
![]() |
Schemaless | ![]() |
![]() |
Multiple document types per schema | ![]() |
![]() |
Online schema changes | ![]() |
![]() |
Apache Tika integration | ![]() |
![]() |
Dynamic fields | ![]() |
![]() |
Field copying | ![]() |
![]() |
Hash-based deduplication | ![]() |
![]() |
Index-time sorting | ![]() |
![]() |
Searching
Feature | Solr 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
Lucene Query parsing | ![]() |
![]() |
Structured Query DSL | ![]() |
![]() |
Span queries | ![]() |
![]() |
Spatial/geo search | ![]() |
![]() |
Multi-point spatial search | ![]() |
![]() |
Faceting | ![]() |
![]() |
Advanced Faceting | ![]() |
![]() |
Geo-distance Faceting | ![]() |
![]() |
Pivot Facets | ![]() |
![]() |
More Like This | ![]() |
![]() |
Boosting by functions | ![]() |
![]() |
Boosting using scripting languages | ![]() |
![]() |
Push Queries | ![]() |
![]() |
Field collapsing/Results grouping | ![]() |
![]() |
Query Re-Ranking | ![]() |
![]() |
Index-based Spellcheck | ![]() |
![]() |
Wordlist-based Spellcheck | ![]() |
![]() |
Autocomplete | ![]() |
![]() |
Document-oriented Autocomplete | ![]() |
![]() |
Learning to Rank | ![]() |
![]() |
Query elevation | ![]() |
![]() |
Intra-index joins | ![]() |
![]() |
Inter-index joins | ![]() |
![]() |
Resultset Scrolling | ![]() |
![]() |
Filter queries | ![]() |
![]() |
Filter execution order | ![]() |
![]() |
Alternative QueryParsers | ![]() |
![]() |
Negative boosting | ![]() |
![]() |
Search across multiple indexes | ![]() |
![]() |
Result highlighting | ![]() |
![]() |
Custom Similarity | ![]() |
![]() |
Searcher warming on index reload | ![]() |
![]() |
Term Vectors API | ![]() |
![]() |
SQL queries | ![]() |
![]() |
Distributed Map/Reduce processing | ![]() |
![]() |
Customizability
Feature | Solr 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
Pluggable API endpoints | ![]() |
![]() |
Pluggable search workflow | ![]() |
![]() |
Pluggable update workflow | ![]() |
![]() |
Pluggable Analyzers/Tokenizers | ![]() |
![]() |
Pluggable QueryParsers | ![]() |
![]() |
Pluggable Field Types | ![]() |
![]() |
Pluggable Function queries | ![]() |
![]() |
Pluggable scoring scripts | ![]() |
![]() |
Pluggable hashing | ![]() |
![]() |
Pluggable webapps | ![]() |
![]() |
Automated plugin installation | ![]() |
![]() |
Distributed
Feature | Solr 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
Self-contained cluster | ![]() |
![]() |
Automatic node discovery | ![]() |
![]() |
Partition tolerance | ![]() |
![]() |
Automatic failover | ![]() |
![]() |
Automatic leader election | ![]() |
![]() |
Shard replication | ![]() |
![]() |
Sharding | ![]() |
![]() |
Automatic shard rebalancing | ![]() |
![]() |
Change # of shards | ![]() |
![]() |
Shard splitting | ![]() |
![]() |
Relocate shards and replicas | ![]() |
![]() |
Control shard routing | ![]() |
![]() |
Pluggable shard/replica assignment | ![]() |
![]() |
Avoid duplicate indexing on replicas | ![]() |
![]() |
Consistency | Indexing requests are synchronous with replication. A indexing request won't return until all replicas respond. No check for downed replicas. They will catch up when they recover. When new replicas are added, they won't start accepting and responding to requests until they are finished replicating the index. | Replication between nodes is synchronous by default, thus ES is consistent by default, but it can be set to asynchronous on a per document indexing basis. Index writes can be configured to fail is there are not sufficient active shard replicas. The default is quorum, but all or one are also available. |
Misc
Feature | Solr 7.2.1 | Elasticsearch 6.2.4 |
---|---|---|
Web Admin interface | ![]() |
![]() |
Visualisation | Banana (Port of Kibana) | Kibana |
Hosting providers | WebSolr, Searchify, Hosted-Solr, IndexDepot, OpenSolr, gotosolr | Found, Scalefastr, ObjectRocket, bonsai.io, Indexisto, qbox.io, IndexDepot, Compose.io, Sematext Logsene |