ElasticSearch的核心概念原理

一、ElasticSearch

ElasticSearch是个开源的分布式的搜索引擎,它可以近乎实时的存储、检索数据;

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ElasticSearch提供javaAPI,使用者可以通过javaAPI调用,但是7.0以后不会提供普通javaAPI,需要使用高级APIrest-high-level调用。

二、Lucene

说到ES就不得不提Lucene,Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的搜索引擎,而且一个全文搜索引擎的架构。

Lucene之所以比传统的关系型数据库检索的效率高,因为其使用的事倒排索引,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。

 

二、ElasticSearch和Solr的区别

   1)Solr建立索引时候,搜索效率下降,实时搜索效率不高,es实时搜索效率高

    2)Solr利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。

     3)Solr支持更多格式的数据,比如JSON、XML、CSV,而Elasticsearch仅支持json文件格式。

     4)Solr官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供

     5)Solr在传统的搜索应用中表现好于Elasticsearch,但在处理实时搜索应用时效率明显低于Elasticsearch。

     6)Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用

7)Solr每次变动数据时会从新更新索引库, Elasticsearch完全支持 Apache Lucene 的接近实时的搜索。

二、ElasticSearch基本概念

cluster

-代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点通过选举产生的,主节点仅是对内部来说。es的一个概念是去中心化,字面意思就是没有中心节点,这是对于集群外部来说的,从外部看来你可以与任何一个节点通信。

-主节点的职责是负责管理集群的状态(节点的发现和删除),包括管理分片的状态,副本的状态

-主需要同一个网段内启动多个es,默认情况下es会自动发现同一个网段相同cluster.name的节点 自动组成集群(实际为防止脑裂,一般会禁止自动发现)

-集群的查看状态:http://127.0.0.1:9200/_cluster/health?pretty

shards

-代表索引分片,es可以把一个完成的索引分成多个分片,这样的好处可以把一个索引分布到不用的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且不能修改。默认分片有5个inde.number_of_shards: 5

-可以创建索引时指定例如:

curl -XPUT -H "Content-Type:application/json" http://127.0.0.1:9200/yanbin -d '{"settings":{"number_of_shards":3}}'

replicas

-代表索引副本,es可以给索引设置副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本恢复。二是提高查询效率,es会自动对搜索请求做负载。默认分片有1个inde.number_of_replicas: 5

curl -XPUT -H "Content-Type:application/json" http://127.0.0.1:9200/yanbin/_settings -d '{"settings":{"number_of_replicas":3}}' 注:PUT添加/更新 POST添加_settings 修改设置项

recovery

-代表数据恢复或数据重新分布,es有节点退出宕机或者添加时会很久负载对索引分片从新分配,挂掉的节点重新启动时也会进行数据恢复。

gateway

-代表es索引的持久化存储方式,es默认是先把索引放到内存中,当内存满了的时候再持久化到硬盘。当这个es集群关闭或者重启时就会从gateway中读取索引数据。gateway支持多种存储,默认本地磁盘文件,hadoop 中hdfs 等

discovery.zen

-代表es自动发现同网段节点机制,它先通过广播需要存在的节点,再通过多播协议进行节点之间通信,同时支持点对点的交互。

-如果集群不同网段节点,禁用自动发现机制 discovery.zen.ping.multicast.enabled:false

设置新节点在启动时能够被发现的主节点列表。 discovery.zen.ping.multicast.unicast.hosts:["192.169.1.1","192.169.1.2"]

transport:

-代表内部节点或集群与客户端的交互方式,默认内部使用的TCP协议进行交互。同时支持https(json),merchand,kafka,zeroMq等

settings修改索引库默认配置

mapping索引库的索引字段名称和数据进行定义

阅读更多

没有更多推荐了,返回首页