ElasticSearch的概念:
ElasticSearch 是一个基于Lucene的搜索服务器
是一个分布式、高扩展、高实时的搜索与数据分析引擎
基于RESTful web接口
ElasticSearch 是用Java语言开发的,并作为apache许可条款下的开放源码发布,是一种流行的企业搜索引擎
官网:https://www.elastic.co/
ElasticSearch的应用场景:
搜索:海量数据查询;
日志数据分析;(elk)
数据实时分析
注意:引入ElasticSearch功能强大,提升查询速度,引入ElasticSearch比较复杂,因为搜索比较复杂。
MySQL 与 ElasticSearch
--MySQL 有事务性,而ElasticSearch 没有事务性
--ElasticSearch 没有物理外键这个概念,如果你的数据强一致性要求比较高,建议慎用。
ElasticSearch和MySQL分工不同,MySQL负责存储数据,ElasticSearch负责搜索数据.
一、为什么使用ElasticSearch?
Mysql,Oracle等关系型数据库,在数据量比较大时,对多条件搜索,全文检索等数据检索查询 比较耗性能,响应慢,
关系型数据库查询存在的问题;
1、性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
2、功能弱:如果以“华为手机”作为条件,查询不出来数据
如百度搜索,GitHub上的代码搜索,电商商城的商品搜索,美团的酒店搜索。所以需要引入 如ElasticSearch,solr ,lucense 搜索解决方案。
二、Lucene和ElasticSearch简介和比较
Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:https://lucene.apache.org/ 。
Lucene的优势: 易扩展 高性能(基于倒排索引)
Lucene的缺点: 只限于Java语言开发 学习曲线陡峭 不支持水平扩展
ElasticSearch相对于Lucene 有 两个优点:
1.支持分布式,可水平扩展
2.提供Restful接口,可被任何语言调用
ElasticSearch为目前广泛应用的搜索解决方案。
三、ElasticSearch的数据存储和原理
ElasticSearch 和MySQL 分工不同, MySQL负责存储数据,ElasticSearch 负责查询数据。
分词: 如 把“床前明月光“ 拆成 (床,前,床前,明,月,明月,光,月光)
倒排索引:将各个文档(document)中的内容,进行分词,形成词条(term),然后记录词条和数据的唯一标识的对应关系,形成的产物。
ElasticSearch将数据存储在索引库(index)中,数据叫document(json格式)。
数据库查询存在的问题;
1.性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
2,。功能弱:如果以“华为手机”作为条件,查询不出来数据
客户端查询;
去倒排索引中 进行词条匹配;
ElasticSearch是一个服务器,和MySQL进行数据同步,提供查询,生成的倒排索引中,词条会排序,形成一颗树形结构,提升词条的查询速度。
存储和搜索; 文档:json数据形式,需要进行分词; 对查询进行分词,查询结果取交集或并集
文档(document)和词条((term)):
正向索引:倒排索引:文档:索引:
ElasticSearch负责提升MySQL的查询性能,适合大数据量或者电商的系统,需要把MySQL数据同步到ElasticSearch;
四、ElasticSearch 的操作
ElasticSearch聚合的分类和DSL实现查询;如:
Avg:求平均值
Max:求最大值
Min:求最小值
ElasticSearch实现自动补全,ElasticSearch的数据与mysql的数据同步;倒排索引,IK分词器,拼音分词器等问题,