Lvhj 的独立博客

欲买桂花同载酒,终不似,少年游.

Elasticsearch

Elasticsearch是一个实时分布式搜索和分析引擎,建立在全文搜索引擎 Apache Lucene™ 的基础上,用Lucene作为内部引擎提供RESTful API服务,同时支持扩展,可以处理PB级别数据。Elasticsearch 需要运行在JAVA环境中,最低版本为 Java 8

Elasticsearch通过指定索引将数据储存在集群中某一个节点中的某一个主分片和其复制分片中。每一个节点都知道与索引相对应的数据储存位置,所以在搜索时利用索引即可在相应的一个分片中读取到数据。

四个重要概念

  • 节点(node)是一个Elasticsearch服务实例。

  • 集群(cluster)由一个或多个节点组成。

  • 索引用来指向一个或多个分片

  • 分片分为两种:主分片(primary shard)和复制分片(replica shard)。

具有相同的cluster.name的节点协同工作,分享数据和实现分布负载。集群会自动选取一个节点作为主节点,主节点不参与文档级别的变更或搜索,意味着在流量增长的时候,主节点不会成为集群的瓶颈。

当索引创建完成,主分片数量固定,复制分片的数量可以随时调整。主分片可以位于任何节点当中,系统随机分配。默认情况下,一个索引被分配5个主分片和若干个复制分片。主分片和复制分片分别位于不同的节点当中,单个节点的集群没有复制分片。索引对应的数据储存于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。复制分片是主分片的一个副本,可以像主分片一样提供读请求服务。

主节点宕机之后,集群会重新选取主节点,复制分片成为主分片继续提供搜索服务。防止硬件故障导致的数据丢失。主分片或者复制分片都可以处理读请求。所以数据冗余(即分片)越多,能处理的搜索吞吐量就越大。

Elasticsearch就是通过先储存再搜索实现了分布式的数据储存和数据搜索。

Elasticsearchsolr相比较

1.建立索引时,solr实时搜索效率下降,Elasticsearch性能优于Solr,原因Solr产生io阻塞。若不考虑建索引的同时进行搜索,Solr速度更快。

2.随着数据量增加,Solr搜索效率下降,Elasticsearch无明显变化。

3.Solr支持多种数据格式搜索,Elasticsearch仅支持Json格式。

总结:两者均可作为索引引擎提供服务,Solr拥有良好用户基础,而Elasticsearch则是效率更为突出的新型搜索服务。