1.初识elasticsearch

1.1.了解ES

1.1.1.elasticsearch的作用

elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容

例如:

  • 在GitHub搜索代码

  • 在电商网站搜索商品

  • 在百度搜索答案

  • 在打车软件搜索附近的车

1.1.2.ELK技术栈

elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域:

而elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。

1.1.3.elasticsearch和lucene

elasticsearch底层是基于lucene来实现的。

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:https://lucene.apache.org/

elasticsearch的发展历史:

  • 2004年Shay Banon基于Lucene开发了Compass
  • 2010年Shay Banon 重写了Compass,取名为Elasticsearch。

1.1.4.为什么不是其他搜索技术?

目前比较知名的搜索引擎技术排名:

虽然在早期,Apache Solr是最主要的搜索引擎技术,但随着发展elasticsearch已经渐渐超越了Solr,独占鳌头:

1.1.5.总结

什么是elasticsearch?

  • 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能

什么是elastic stack(ELK)?

  • 是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch

什么是Lucene?

  • 是Apache的开源搜索引擎类库,提供了搜索引擎的核心API

1.2.倒排索引

倒排索引的概念是基于MySQL这样的正向索引而言的。

1.2.1.正向索引

那么什么是正向索引呢?例如给下表(tb_goods)中的id创建索引:

如果是根据id查询,那么直接走索引,查询速度非常快。

但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:

1)用户搜索数据,条件是title符合"%手机%"

2)逐行获取数据,比如id为1的数据

3)判断数据中的title是否符合用户搜索条件

4)如果符合则放入结果集,不符合则丢弃。回到步骤1

逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。

1.2.2.倒排索引

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

如图:

倒排索引的搜索流程如下(以搜索"华为手机"为例):

1)用户输入条件"华为手机"进行搜索。

2)对用户输入内容分词,得到词条:华为手机

3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。

4)拿着文档id到正向索引中查找具体文档。

如图:

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

1.2.3.正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

是不是恰好反过来了?

那么两者方式的优缺点是什么呢?

正向索引

  • 优点:

    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:

    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

1.3.es的一些概念

elasticsearch中有很多独有的概念,与mysql中略有差别,但也有相似之处。

1.3.1.文档和字段

elasticsearch是面向 文档(Document) 存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中:

而Json文档中往往包含很多的字段(Field),类似于数据库中的列。

1.3.2.索引和映射

索引(Index),就是相同类型的文档的集合。

例如:

  • 所有用户文档,就可以组织在一起,称为用户的索引;
  • 所有商品的文档,可以组织在一起,称为商品的索引;
  • 所有订单的文档,可以组织在一起,称为订单的索引;

因此,我们可以把索引当做是数据库中的表。

数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping),是索引中文档的字段约束信息,类似表的结构约束。

1.3.3.mysql与elasticsearch

我们统一的把mysql与elasticsearch的概念做一下对比:

MySQL Elasticsearch 说明
Table Index 索引(index),就是文档的集合,类似数据库的表(table)
Row Document 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
Column Field 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
Schema Mapping Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQL DSL DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

是不是说,我们学习了elasticsearch就不再需要mysql了呢?

并不是如此,两者各自有自己的擅长支出:

  • Mysql:擅长事务类型操作,可以确保数据的安全和一致性

  • Elasticsearch:擅长海量数据的搜索、分析、计算

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用mysql实现
  • 对查询性能要求较高的搜索需求,使用elasticsearch实现
  • 两者再基于某种方式,实现数据的同步,保证一致性

1.4 安装es、kibana

http://t.csdn.cn/1FkPZ

1.初识elasticsearch相关推荐

  1. ElasticSearch学习笔记二 初识Elasticsearch

    初识Elasticsearch Elasticsearch简介 Elasticsearch术语及概念 文本(Text) 索引词/精确值(term) 精确值 VS 全文 分析(Analysis)与分析器 ...

  2. 初识 ElasticSearch,一个上天下地的搜索引擎 No.158

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 我想跟大家先讲这么一个故事.在2017年,我有幸参与到Elasti ...

  3. ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念

    文章目录 什么是ElasticSearch? Lucene ELK Elasticsearch的特点 应用场景 架构设计 基本概念 文档 类型 索引 什么是ElasticSearch? Elastic ...

  4. elasticsearch体验(一.初识elasticsearch)

    为什么80%的码农都做不了架构师?>>>    elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器,同大名鼎鼎的solr类似,也是一个开源企 ...

  5. 初识ElasticSearch(2) -文档查询之match查询 | 分词器

    1. 分词器: 2. match查询: 2.1. 数据准备 - 创建带分词器的索引映射 2.2. 数据准备 - 添加文档 2.3. 数据准备 - 查看文本分词 2.4. 查询 - 映射有分词器的字段查 ...

  6. 初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

    1. bulk: 1.1. bulk语法: 1.2. bulk行为-增删改: 2. bulk-index批量插入: 3. bulk-update批量修改: 4. bulk-delete批量删除: 5. ...

  7. Elasticsearch 教程--入门

    1.1 初识 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架. 但是 L ...

  8. 终于有人把 Elasticsearch 原理讲透了

    上个世纪末,我在广州做 PHP 程序员,那会儿程序员的门槛真低啊.我的上司是技术经理,非常照顾我.有个客户是开律所的,过来提了一个私活的需求,要做个法律查询的网站. 上司让我赚点外块,说干就干,整个 ...

  9. 数据库、缓存、消息队列之外的下一站——Elasticsearch

    搜索是现代软件必备的一项基础功能,而 Elasticsearch 就是一款功能强大的开源分布式搜索与数据分析引擎. 它可以从海量数据中快速找到相关信息,在同领域内几乎没有竞争对手--近两年 DBRan ...

最新文章

  1. 平均14915元,2021 年 1 月程序员工资统计出炉
  2. mysql dba系统学习(8)查询日志文件功能 mysql dba系统学习(9)slow query log慢查询日志功能
  3. 【Docker】备份Docker镜像image、容器container、数据volume
  4. java远程操作ftp服务器上传下载
  5. mysql 取 浮点运算_mysql 浮点型运算误差原因分析及解决方法
  6. 打造大型直播平台之《PC客户端架构》
  7. 删除git中缓存的用户名和密码
  8. java的注解定义map_java – MapStruct:丰富映射注释以定义自定义映射器
  9. Unity随机创造敌人
  10. ubuntu20.04安装成功SecureCRT 9.0.1,全网首发!!
  11. Latex编辑器解决支持中文的问题
  12. 虚拟机玩转 Veritas NetBackup(NBU)之服务端安装部署
  13. RoboMaster视觉教程(5)目标位置解算(通过像素点获取转角)
  14. python 自动生成word文档,用 Python 自动生成 Word 文档
  15. php生成CAD图纸,CAD怎么创建块?CAD创建块的命令
  16. 佳能 digital photo professional直接安装方法
  17. 一款开源的播放器框架WMPlayer
  18. idea2020shezhi代码检查级别_阿里巴巴代码缺陷检测探索与实践
  19. PX4中文维基汉化项目启动
  20. 树莓派语音交互--语音输入识别

热门文章

  1. 看漫画学焊接!5分钟教你电烙铁的焊接方法
  2. 试用期没过,因在公司上了 1024 网站...
  3. linux的idr机制
  4. java spring 中 每小时一次_spring 定时任务的 执行时间设置规则
  5. P1397 [NOI2013] 矩阵游戏(矩阵乘法欧拉定理)
  6. botzone Tetris2
  7. NO_DATA_FOUND和%NOTFOUND的区别
  8. 完美解决c# 连接oracle US7ASCII字符中文乱码 亲测
  9. 计算机网络知识点之五
  10. ajax富客户端存在的意义,基于AJAX的网上银行富客户端研究与设计