了解Elasticsearch基础,这篇就够了

一:为什么要学习Elasticsearch?
它是一个分布式的开源搜索和分析引擎,点击此处了解更多,它的底层使用开源库Lucene,并且,Elasticsearch对Lucene再次做了简化封装,可以直接为我们提供rest Api(只需给它发送请求即可)
二: Elasticsearch 的用途是什么?
Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  1. 应用程序搜索
  2. 网站搜索
  3. 企业搜索
  4. 日志处理和分析
  5. 基础设施指标和容器监测
  6. 应用程序性能监测
  7. 地理空间数据分析和可视化
  8. 安全分析
  9. 业务分析
    Elasticsearch官方中文文档
    Elasticsearch官方英文文档

三:基本概念

  1. Index(索引)
    动词,相当于mysql中的insert (MySQL叫"插入一条数据",而elasticsearch叫"索引一条数据")
    名词,相当于Mysql中的database;(要在elasticsearch存数据,必须创建一个Index)
  2. Type(类型)
    在Index(索引) 中,可以定义多个类型 ;类似于MySQL中的Table,一个数据可可以有多个索引.
  3. Document(文档)
    保存在某个索引(Index)下(MySQL的某个数据库下),某个类型(Type)下的一个数据(MySQL表中的某条数据)就叫Document;且文档均是JSON格式.

四:Elasticsearch-------倒排索引
Elasticsearch之所以可以帮我们更快的找到我们所需要的数据,就是因为它的倒排索引机制
倒排索引表:

记录
红海 1,2,3,4,5
行动 1,2,3
探索 2,5
特别 4,5
纪录片 4
特工 5

分词:将整句拆分成单词
保存的记录

  • 1.红海行动
  • 2.探索红海行动
  • 3.红海特别行动
  • 4.红海纪录片
  • 5.特工红海特别探索
    检索:
  1. 红海特工行动?
  2. 红海行动?
  • 在MySQL中,我们模糊查找数据时,都使用like %**%关键字,这就使得查询效率特别低下(无法使用索引);

  • Elasticsearch在保存记录时,例如上述5条数据,它会额外维护一张倒排索引表,例如:存储 - 1.红海行动,它的操作如下:

  1. 分词:将"红海行动"分为"红海"和"行动"2个单词(当然,也可以拆成"红",“海”,“行”,"动"4个字),此时,倒排索引表将会插入如下记录:(这里姑且将1想象成每条记录的id吧)
记录
红海 1
行动 1
  1. 接下来我们保存第2条记录 - 2.探索红海行动,此时,倒排索引表会继续分词,假设分成"探索","红海"和"行动"3个单词,此时,倒排索引表变成这样
记录
红海 1,2
行动 1,2
探索 2
  1. 以此类推,保存 - 3.红海特别行动,倒排索引表变为
记录
红海 1,2,3
行动 1,2,3
探索 2
特别 3
  1. 保存 4.红海纪录片,倒排索引表变为
记录
红海 1,2,3,4
行动 1,2,3
探索 2
特别 3
纪录片 4
  1. 保存**- 5.特工红海特别探索**,倒排索引表变为即变为
记录
红海 1,2,3,4,5
行动 1,2,3
探索 2,5
特别 4,5
纪录片 4
特工 5

此时假设我们要检索:

  1. 红海特工行动?
  2. 红海行动?
    检索步骤:
  1. 将检索内容查分成单词
    保存的记录:
  2. 1.红海行动
  3. 2.探索红海行动
  4. 3.红海特别行动
  5. 4.红海纪录片
  6. 5.特工红海特别探索
    举例:当我们查询** 1) 红海特工行动?这条记录时,它先将其拆分成"红海",“特工”,"行动"三个单词,此时我们在倒排索引表中可以看到,这3个单词在5条记录都存在,但是,我们要的只有一条, Elasticsearch查出的记录会有一个相关性得分:由于3号和5号记录命中了2个单词**,所以最符合的是它俩,但那个更符合呢?
    3号记录中,被我妈拆分成3个单词,有2个就已经命中,命中率2/3; 而5号记录共4个单词,命中2个单词,因为此时2/3 >2/4=1/2,故3号的相关性得分最高,因此3号就是我们要查的最相思的数据(类似于MySQL的模糊查询)!

猜你喜欢

转载自blog.csdn.net/lq1759336950/article/details/114416740
今日推荐