ElasticSearch个人理解

来源:互联网 发布:中文翻译韩文软件 编辑:程序博客网 时间:2024/05/16 04:54

ElasticSearch

介绍

Elasticsearch是一个实时(索引数据到能被搜索大概1s左右)的分布式搜索和分析引擎,主要用于全文搜索,结构化搜索以及分析Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理,可以说是一个开箱即用的分布式实现,其内部定义了大量的默认值Elasticsearch并不仅仅是Lucene这么简单,它不但包括了全文搜索功能,还可以进行以下工作:

1. 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

2. 实时分析的分布式搜索引擎。

3. 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

 

ES提供了两套API(内部调用都指向同一个地方)分别是基于curlrest APIJava API,通过API不仅能对数据的CURD进行处理,还能对索引及es集群进行关联。

提交方式分别为:

新增:put  删除:delete   修改:update   查询:get

 

ES与关系型数据库对比:

Database    table     row          column

Index       type      document     field

 

通过上面的大致介绍对es有了一个初步的概念性的了解。Es之所以能进行海量数据快速响应,就取决于它使用Invertied Index(倒排索引)。正排索引:比如将人员信息插入数据库中,会有主键人员ID,当然也可以为该ID创建索引。倒排索引:比如该人员信息会有姓名,学历,地址等信息,es将会根据索引Mapping对这些字段进行索引和统计,以方便查询。倒排文件的优点是:实现简单,响应时间快,支持复杂查询,适合商用搜索引擎。缺点是:建立索引要消耗很大的磁盘、内存空间;当网页更新后,索引的维护代价也比较大

 

而保证数据的安全性就是因为es对数据进行了冗余存储,当索引数据的时候,而是会根据主配置文件config/elasticsearch.yml中的分片和副本进行数据的索引(默认为5个分片和1个副本)。即将会把该数据存储在5个分片上并为每个分片创建一个备份数据(也就是10个分片上会有该数据)。

2 集群

1 发现。发现主要有两个目的:选出主节点和发现集群中的新节点。

启动一个es节点的时候,该节点会自动寻找同一网段下相同集群名称并且可见的主节点并加入该集群,如果没有该节点就是主节点。ElasticSearch是通过主配置文件中elasticsearch.yml中将cluster.name值进行发现的,该值如果不设置默认值为elasticsearch。同一网段下可能会有多个集群,所以最好是显示的设置该值。

没有安装额外的插件的情况下,ES允许使用Zen发现,它提供了单播(一次只允许传输一条消息到单个主机上)和多播(一次传递到一组计算机)发现。首先可能需要使用命令ifconfig查看响应中是否有multicast,查看网络是否支持多播,这样会更简单,但是单播较多播安全。

2 主节点

默认情况下es允许一个节点同时成为主节点和数据节点。即:

node.master = true

node.data = true

当你的es需要处理大量的数据,为提高性能需要该节点只处理请求管理集群时候:

node.master = true

node.data = false

当你只想es存储数据的时候

node.master = false

node.data = true

 

   为防止由于网络问题,集群中是某些节点断开链接,然后通过Zen发现再组成集群,出现两个名称相同的集群,称之为”脑裂”。所以需要设置组成集群的条件:

discovery.zen.ping.mininum_master_nodes = 6

一般情况想设置为集群数量一般加一(若集群节点个数为10,则设置为6)。

3 主节点会通过ping其他的数据节点,检查链接状态。

 

3 索引

1 es索引

Es索引的时候将数据存储在多个分片上并且每个分片会创建副本。默认情况下,es会创建5个分片和一个副本,也就是说十个分片上会有该数据。并且索引在创建的时候就必须设置,之后不允许修改,副本可以在运行中进行修改。

 

2 映射

Es支持的数据核心类型:string , number , date , boolean , binary

映射也是索引数据和查询的关键,可根据具体的需求对需求对索引数据制定映射规则。创建规则之后肯定就的对数据进行高效的索引,对于的数据两比较大的时候可以使用批量索引以提高索引数据(但是数据量不能大于100M)。  

 

3 路由

使用hash算法将数据分散到不同的分片上。在特殊的情况下可以通过控制路由将数据处理到指定的节点。但是一般不推荐,因为可能会出现某些节点数据严重瘫痪。

 

 

 

4 应用场景

Es主要能的主要使用场景就是进行快速查询和聚合(分类统计),这方面es提供了强大的java API的支持。

 

1.查询

进行查询的一般过程:发散阶段是查询数据存储在了哪些分片上(返回分片也可以根据设置策略进行控制),当然了不会去查询备份数据。收集阶段是根据返回的分片信息进行数据的查询和组合,并进行返回。

各个应用的数据结构和需求不同,es提供了词条查询,分页,排序(如果没有指定排序,默认会使用得分排序),模糊查询,正则查询,高亮显示等强大的java API支持。

 

2.聚合

聚合可以理解为数据库的多次分组查询,对数据进行统计。通常用于对数据的分析,前台常使用图表(柱图,线图,饼图等)进行展示。

 

 

 

 

 

0 0
原创粉丝点击