概述
一、基本概念
es是基于lucense实现的分布式的全文搜索引擎,是合用java对lucense的封装,主要使用场景是对内容的快速智能检索及对匹配部分高亮显示,如日志收集处理(elk)、网站内容过滤等。最基本的概念如下:
1、index (索引) 类似关系数据库中数据库。在创建索引的时候需要确定主分片和副分片的数量,确定之后,主分片是不能修改的(原因是es数据分布式存储在不同的分片中,分配方式是通过hash取模的方式,如果主分片数量动态增加了,无疑要重新分配所有数据才能保证能正确查到数据,但es目前并不支持这个功能),而副分片可以修改。一个分片就是一个lucense实例,es的作用是统筹每个分区协调工作,实际上真正实现检索功能的是lucense。
2、type (分类) 类似表,但这么说并不准确,虽说type功能上看起来是一个表的功能,但lucense中并没有分类的概念,lucense中只有index,而type只是es在封装lucense时增加的概念,实现方式只是在文档中加上_type字段用于区别这个文档属于哪个逻辑上的类型而已。而且lucense中一个index的同名字段会被复盖,即是说如果我们定义一个index下有多个type,而这些type之间如有同名字段,只有一个生效,如果字段类型不同,会产生异常,这是在定义时必须注意的问题。
3、mapping (映射) 定义了类型的字段及类型、配置(如分词器的配置)等信息。你一定想知道,即然lucense中没有类型,那它又是如何存储每一个类型的不同映射的呢?其实es在保存映射到lucense的时候,会将这个index所有的映射合并成一个,这也是为什么出现同名字段但字段类型不同时会产生异常的原因了,es不允许出现这种情况。
4、doc(文档)类似表中一行一行的数据。
二、集群
es集群搭建非常的方便,几乎不需要做其它操作,只需把cluster.name配置改成一样即可,es分自动的把分片及备分均匀的分布到不同的节点上,原则上同一个分片和它的备份会分备到不同节点,如果没有足够的节点,那么备份分片将不会创建,可以在集群健康状态的接口中查看相关信息。
因为是一个index数据存放在不同的分片中,可能在不同的服务器上,所以一个检索请求会同时发送给所有的分片,如果有备份分片的话,接到请求的有可能是主分片,也有可能是备份分片(负载均衡),使用哪一个分片还与es负载均衡策略有关,有几种策略可供选择:按顺序轮训或者按负载分配(大部分集群负载均衡策略大都是一样的);每个分片检索完成之后将检索结果汇总并返回用户。
集群中的每个节点都可以做任何事情,但它们在运行的时候只负责一部分工作。节点按职责可分为主节点、数据节点、协调节点,一个节点可以同时拥有多个或者全部职则。
主节点只负载处理索引的创建删除、节点的增加删除等,不负责数据的修改或者检索。
数据节点响请数据的检索、增删等请求。
协调节点主要是汇总各分片数据、返回用户请求,我们在访问集群时,可以向任何节点发请求,这时这个节点就是协调节点,它知道集群中每个节点的信息,它会把请求转发到对应的分片上,最后汇总结果返回给用户。
因为检所数据需要汇总,带来的一个问题就是分页查询,这几乎是每个使用者都会遇到的问题。es的分页查询越是往后每个分片需要查询的数据量成倍增加,然后汇总再取需要的页数据,代价是非常巨大。es其实是没有办法完美的满足传统的分页查询方式,但我们可以用以下几个办法处理分页问题:
1、直接使用分页查询,但限制用户访问的页数,如果只访问前面几页,es仍然是能很快返回。
2、使用游标查询,它会给我们查询的索引建立一个有时间限制的快照,并会记录用户当前查询到了哪一个位置,下次查询时从这个位置上继续查询。
但不管使用哪种方式,都需要修改传统的分页方式,要么限制页数,要么不能跳页。
当集群主节点挂了的时候,同样会通过选举的方式重新选择主节点,相关参数配置参考官网文档,有详细说明
三、倒排索引
索引方式采用倒排索引,里面比较重要的概念是分词器,es本身有实现好的分词器,也可以自定义。使用倒排索引的字段一定是字符串类型的,其它的类型是精确查询。
最后
以上就是大意世界为你收集整理的Elasticsearch知识点总结的全部内容,希望文章能够帮你解决Elasticsearch知识点总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复