《深入理解ElasticSearch》读书笔记

看过es的官方api文档,也早就配置好了,java也用过几次了,但是很多东西还是不理解,所以还是要细读一下这本书,这本书很老了,大概看看就好,还是要看官方api

理解Lucene才能明白为什么ES

ES的工作原理,尤其是索引和查询处理都是基于lucene的,所以理解apache lucene是很重要的。
es的创始人选择lucene,而不是自己开发全文检索库,肯定说明lucene是有很多优点的,书的作者猜测估计是因为成熟高性能可扩展轻量级以及功能丰富强大。
lucene的扩展包括多语言处理、拼写检查、高亮显示

lucene必须要先理解四个东西:
document:文档,索引与搜索的主要数据载体,包含一个或多个字段,存放将要写入索引或者从索引搜索出来的数据
field:文档的一个片段,包括两个部分,字段的名称和内容
term:词项,搜索时的一个单位,代表文本中的某个词
token:词条,词项的某次出现,包括词项的文本,开始和结束的位移以及类型

倒排索引:将词项映射到文档,这个lucene已经做到很复杂了,不说了

lucene里把文档的数据变成倒排索引这个转换过程 叫做分析,一个分析器通常包括分词器、过滤器和字符映射器
lucene的查询可以包含很多种查询,就不在这细说了,比如基本的布尔查询、字段查询、模糊查询

ES基本概念

索引:数据要存储在索引中,可能一个或者多个,这个是有shard分片,复制replica机制决定的,可以看作数据库,往里写文档,从里读文档
文档:es的主要实体,因为对es来说,操作都是对于文档的操作,文档是一个json对象
映射:这个mapping的过程很重要,其实如果你没有,也能搞,因为es会自动把json的key写到es的field(最大1000个)里,但是你会有种感觉,我怎么查呀,缺点什么东西。mapping做的事情就是定义各种文档的元数据,设定一些参数。
类型:每个文档都有个type定义
节点:部署一个es服务的主机可以看作一个es的节点
集群:当数据量很大或者压力超过单机负载时,需要多个节点,这样就组成了一个集群,某些节点不可用,集群仍然可以无间断的服务
分片:这个是我原来觉得很抽象的一个概念。集群允许系统存储的数据总量超过单机容量,es就将数据散步到多个物理lucene索引上,这些lucene的索引就是分片,散步这些分片的过程是分片处理sharding。
副本:分片解决的问题是用户的数据太大,不能单机存储。而副本解决的是访问压力过大无法单机处理请求。为每个分片创建冗余的副本,处理查询,可以把副本当成最初的主分片。
网关:es工作过程中,关于集群的信息、索引的信息等都会被收集起来,并且在网关中持久化

其他特性:
1.安装启动很方便,这个确实
2.分布式不像hadoop有主节点控制各个节点,默认自己就是集群中的一部分,一旦启动就会加入某个集群。一个节点启动过程中,会广播给其他es节点,并于他们链接。
3.P2P架构,节点会自动连接到集群中的其他节点,进行相互的数据交换和监控操作,比如索引分片的自动复制。
4.扩充新节点很方便
5.文档的数据结构没有强加限制,易于调整
6.准实时搜索和版本同步
7.节点中会有被选成管理节点,负责集群的状态管理以及集群拓扑变化中作出反应。

集群的红色、黄色与绿色:
红色说明这个节点宕掉了,黄色说明内部正在决定分片的复制等等,如果各种分片和副本都已经分配好,就会整个进入绿色

扩展

java控制es主要是通过rest和highrest(封装很多东西)进行通信,所以对rest应该有一些基础的理解。
http://example.com/customers/1234
http://example.com/orders/2007/10/776654
http://example.com/products/4554
http://example.com/processes/salary-increase-234
从链接上你仿佛能看到你的东西怎么被架构的,甚至被放在那个地方。
这是一种网络应用的软件架构风格,即通过url来设计系统的结构。根据REST,每个url都代表一个resource,而整个系统就是由这些resource组成的。因此,如果url是设计良好的,那么系统的结构就也应该是设计良好的。对于非高手级的开发人员来说,考虑一个系统如何架构总是一个很抽象的问题。

发表评论

电子邮件地址不会被公开。