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分词器,拼音分词器等问题,

 

 

posted on 2022-09-06 15:00  努力--坚持  阅读(10)  评论(0编辑  收藏  举报