elasticsearch学习篇

最近花了一些时间研究elasticsearch,下面的内容是我的学习总结。

1、ES定义

elasticsearch简称ES,它是一个开源的高扩展的分布式全文检索引擎,可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ES使用java开发并使用Lucene作为其核心来实现索引与搜索功能,他可以通过RESTful API与java代码来使用它。


2、大规模数据如何实现检索?

在回答上面这个问题时我们可以从如下几个方面来思考:

1)该用什么数据库?

2)如何解决服务器单点故障?

3)如何保证数据安全性?

4)如何解决检索难题?

5)如何解决统计分析问题?

带着这些问题我们来看看一些解决方案


3、关系型数据库的解决方案

1)通过主从备份解决数据安全性问题

2)通过数据库中间件发送心跳监控来解决单点故障问题

3)通过数据库中间件将查询语句分发到各个节点上进行查询,并汇总结果来解决检索问题



4、非关系型数据库(NoSQL)解决方案

1)通过备份解决数据安全性问题

2)通过节点竞选机制解决单点故障问题

3)从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果



5、ES解决方案

1)存储数据时按有序存储

2)将数据与索引分离

3)压缩数据

4)ES集群服务允许多个服务器节点,每个节点划分多个分片,每个分片都有副本

5)分片主节点失效时,ES集群将自动将副本节点升级为主节点

6)分词,存储数据时通过把句子分成重要的词,当查询到这些词时可以查询到该句子

ES更适用于全文检索,其检索数据的速度要优于其他方案。


6、ES核心概念

1)cluster:集群

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2)Node:节点

形成集群的每个服务器称为节点。

3)shard:分片

当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4)Replia:副本

为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

5)全文检索

全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。
全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。


7、与关系型数据库mysql相比


1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
2)一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type),
3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.


8、ES组合ELK是什么?

ELK=elasticsearch+Logstash+kibana
elasticsearch:后台分布式存储以及全文检索
logstash: 日志加工、“搬运工”
kibana:数据可视化展示。
ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。


9、分词器 IK Analysis

git地址:https://github.com/medcl/elasticsearch-analysis-ik/

在ES中Mapping定义了字段是否需要分词,以及采用何种分词方法,IK支持的两种分词方式

1)ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

2)ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

在设定分词方式后,ES在插入数据时会自动加入分词信息,查询时会根据分词信息全文检索出数据。

IK有自己的默认中文词库,可以满足大部分场景需求,也可以自定义词库,注意自定义词库需要使用UTF-8编码,并在

IKAnalyzer.cfg.xml配置词库


10、ES如何处理节点或分片故障

1、主节点故障,ES集群必须有一个主节点,当主节点发生故障时,集群必须要有一个主节点才能使其功能正常,所以集群做的第一件事就是各节点选举了一个新的主节点。

2、分片故障,主分片故障时ES将把其分片副本升级为主分片这时集群健康回到yellow状态。这个提升是瞬间完成的,就好像按了一下开关。为什么集群健康状态是yellow而不是green?我们指定了每个主分片对应两个复制分片,当前却只有一个复制分片被分配,这就是集群状态无法达到green的原因,不过当故障分片被修复时,集群状态会恢复至正常。


11、ES与solr的比较

ES其综合性能要优于solr。solr在查询速度上要更快一些,但其添加、更新操作更慢,使用于电商等查询多的项目。


12、ES如何使用

1)下载并安装ES,下载地址https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.3.5/elasticsearch-2.3.5.zip

2)安装分词器IK和kibana等ES插件

3)启动ES,在项目中加入对ES的支持(jar包等)

4)初始化索引、类型、字段及分词信息

5)插入数据、查询数据

6)使用方法,ES可以通过java api与restful api两种方式使用,参考地址:https://www.ibm.com/developerworks/library/j-use-elasticsearch-java-apps/index.html

7)elasticsearch中文社区地址:https://elasticsearch.cn/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值