专栏首页立权的博客elasticsearch-基本概念

elasticsearch-基本概念

先类比 elasticsearch 和 关系型数据库对应的某些概念,了解ES的结构:

索引:简单理解成数据库

分片:一个索引由多个分片组成,应用程序向ES请求的时候,是向索引请求,但是实际上工作的是分片,每个分片都是一个Lucene(搜索引擎),需要占用一定的内 存,CPU,磁盘等物理资源,他是一个最小工作单位,是实际能跑的一个程序。

  主分片:主分片比起副分片,多出的功能只是提供写入文档(索引文档,在ES的官方文档中,经常会同义"索引"和"写入")

  副分片:类似HDFS中的Replica,或者更像是数据库主从复制中的 从数据库,只提供读功能

  如果一个ES集群只有一个主分片,那么整个索引的所有数据都在这个主分片里,无论有多少个副分片,和只有一个主数据库同理。

  如果一个ES集群有两个主分片,无论多少个副分片,那么整个索引的数据分布在这两个主分片里,类似与关系型数据库分库,横切数据库表

  N个主分片,以此类推。

类型:分片的数据的组成部分,每个部分代表一类事务。

文档:相当于关系型数据库中的一行记录,ES的实质是 分布式文档存储系统

id:类似与关系型数据库中行记录的主键

域:相当于字段

elasticsearch 存在两种获得文档的方式:

  1.根据域(字段)搜索

  2.ID直达

两种获取方式的速度都挺快,因为elasticsearch对同一条文档(记录)存储了两种数据结构

正排索引和倒排索引

省略掉偏移量之类的属性,我们只看简单的查找过程

下图第一个是正排索引,可以简单理解成我们存储进去的内容,并且每条文档有唯一的标识(id)确认

映射其实就是对类似关系型数据库的表的类型进行域(字段)定义,比如 age 是 integer......

映射还可以指明一个域是否可以被解析,如果可以的话,可以在映射指定相应的解析器

第二个是倒排索引,在存入文档的时候,都需要将存入的文档(一条记录)中需要分析(analyse)的域进行分析器分析

比如 I love your sister,一般使用英语分析器分词,分词后分出的单元叫做 term,比如这句话会被分为 I , love , your , sister 这四个term。

当然,有一些分析器有去除无用词功能,比如 the , a 这些无太大意义的词会被去除。

对于可分析的域,查询的值也要通过相同的分析器进行分析,然后进行检索,比如查询 love your,那么 也会按照上面同样的解析器解析查询的值,解析成 your ,sister 两个term然后再用倒排索引检索

查询这种可解析的域 叫做 全文域查询

如果一个域是不可分析的,那么查询的值本身就是一个term,这种查询叫做 精确值查询

文档中的字段,无论是否可解析,都会被建立倒排索引,所以把一条记录写入到ES中,“写入”被称为“索引”

面向对象表示和处理了真实世界中潜在的各种复杂数据结构,ES的每条文档都代表一个对象,当然,对象中可以嵌套对象,文档指的是嵌套结构中最顶层的对象

全文域可以理解成,我们需要做的是去这整个全文里去查找是否包含我们的查询值,比如某篇文章里面找地址

分出 term 后,会根据 term 构建 倒排索引,比如下面的 term : “南山”,会记住相关的文档的唯一标识

当然存储方式不一定如下图,因为这样的话要线下时间去遍历出文档的唯一索引,一种假设的方法是当相关文档数太多的时候,可以使用查找树结构或B+数结构

ES使用简单的 Resful 风格的 API ,索引+类型+id可以唯一标识一个文档(一条记录),使用不同的请求方法可以 进行不同操作,比如删除,新增,修改

GET or POST or PUT...  /索引名/类型名/id

需要注意的是 ES 是不支持修改的,名义上是修改,但实际上是 将原本的内容 读出 转换成 JSON ,然后修改 ,修改后写会索引,同时删除旧文档。

ES可以全量替换掉某个id的文档,实际过程也是 删除 - 新增

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java锁膨胀过程中的解惑:1.单线程不一定能获取偏向锁 ; 2.安全点重偏向不能直接占有仍有效偏向锁

    1.偏向锁的获取逻辑主要在汇编实现的 biased_locking_enter 方法中

    执生
  • elasticsearch-分片思想

    最好的情况是,我们能知道自己对单个分片的要求,比如单个分片对用户的响应时间不能长于哪个值,测试的方法是使用历史数据,压入到一个测试的分片中

    执生
  • Mysql-Innodb 锁总结

        Flush tables 做的是将缓存刷回硬盘,with read lock 给所有表加读锁,对于大部分 lock,当客户端连接断开的时候,锁一般会释放...

    执生
  • 触类旁通Elasticsearch:优化

    ES提供的批量(bulk)API,可以用来一次索引多篇文档,从而大幅加快索引速度。如图1所示,可以使用http完成这个操作,并且将获得包含全部索...

    用户1148526
  • ElasticSearch系列05:倒排序索引与分词Analysis

    假设我们的文章的储存结果如上,对于关系型数据库mysql来说,普通的索引结构就是“id->题目->内容”,在我们搜索的时候,如果我们知道id或者题目,那么检索效...

    方才编程_公众号同名
  • J.Woodcock&J.Davies_UsingZ_1996_C1 阅读

    随着软件的日益发展, 软件的功能等需求越来越多, 文档也随之增加, 组件之间的交互和冲突最后导致系统出现问题, 逐渐偏离了我们的预期. 为解决该问题, 其中一个...

    Mezereon
  • Burpsuite插件的使用

    用户1697231
  • Burpsuite插件的使用

    Burp插件的使用 使用准备 Burpsuite可以使用三种语言编写的扩展插件,Java、Python和Ruby。除Java外,其它两种需要的扩展...

    奶糖味的代言
  • Postman之设置环境变量

    上帝:我记得有个故事,讲的是一个邮递员杀人的事情I remembered a particular story about a postman who was ...

    测试小兵
  • 用MD5文件完整性校验演示,MD5工具。下载游戏带的MD5是什么?MD5的作用。

    想玩游戏,下载了一个游戏的几个压缩包,发现还附带了MD5的校验信息,因为游戏一般都比较大,网络传输的时候很有可能会发生错误,如果有错误的话玩游戏中途停止了就不好...

    小蓝枣

扫码关注云+社区

领取腾讯云代金券