跳转到内容

搜索引擎知识点汇总

第一章

  • ES与Luence的区别?
    • 功能上:lunece功能有限,es功能更加强大。lunece只提供了基础的搜索引擎的功能,而es具有更多的企业级功能,如分布式、容错性、实时性等,es还提供了聚合功能,借助一些其他工具,如kinaba还能实现一些统计功能;还提供了一些数据安全方面的功能,如借助x-pack进行用户验证等;
    • 可编程性:lunece需要用户拥有Java编程语言,而es使用restful风格的api接口,用户可以借助任何语言来操作es;
    • 二者联系: es是基于lunece构建的;
  • es与mysql的区别?
    • 索引方式:关系型数据库大多采用的是b-tree的结构,es采用的则是倒排索引;这就导致,对关系型数据库进行count的操作时可能需要秒级服务,而es可能毫秒级就能返回结果,也就是说es近乎实时;倒排索引还能让es支持对结果进行打分排序;
    • 对事务的支持:关系型数据库大多支持事务,es不支持事务,也就是说对es的并发请求时,极有可能会丢失某个更新操作;但是es提供了乐观锁的方式,即认定冲突是不会发生的,使用了版本号的概念;
    • sql与dsl: sql能够执行一些较为简单直接的逻辑,es除了能执行较为简单直接的逻辑外,还能够支持文本搜索、地理位置搜索等复杂数据搜索;
    • 扩展方式:关系型数据库可能需要借助第三方组建的方式来完成分库分表;而es天生支持扩展,数据本来就可以分片的;
    • 查询速度:关系型数据库数据量过大时,查询速度变得很慢;es就是为大量数据的检索而产生的;
    • 数据的实时性:关系型数据库存储和查询近乎实时,es数据的写入是准实时的,在内存和磁盘之间增加了一层系统缓存,每隔一段时间就会把内存的数据刷新到系统缓存中,才能够被读到;
  • es中的基本概念
    • 索引: 就是类似于关系型数据库中的表。
    • 文档: 类似于关系型数据库概念里面的表里面的一条数据;
    • 字段: 文档所包含的数据结构的基础构成单位,就是数据的各种属性;
    • 字段的数据类型: 字符串、文本、数字、ip、经纬度、数组等;
    • 映射:字段与数据结构的对应关系,es中一旦设定,就不允许修改;
    • 集群和节点
      • 集群:对外提供相同功能的一组服务器的集合;
      • 节点:集群中某一台服务器的称谓;
      • 分布式:把具有不同功能的一组服务器组合到一块,作为一个整体系统统一对外提供服务;
      • 可用性:系统或服务在某一段时间内,能够对外提供正常服务的时间比例;
      • 冗余: 也称副本,为了提高可用性的一种手段,即对数据节点或计算节点进行扩展,简单来说就是“堆机器”,一台服务器有宕机风险,那就多台一块搞;
    • 分片:
      • 主分片由于单个节点性能有限(计算性能、存储性能),需要把大块的数据分开存储和计算,每一块的数据就是这块数据的分片;分片数量只能设置一次,之后就不能修改,默认是5个分片;
      • 副分片:为了提高系统的可用性,对数据节点采用的一种冗余的做法,让分片数据多放到几台服务器上,一台挂了,还有另外一台,这样保证数据不会丢失;一般情况下一块数据的主副分片不会存放到同一台物理主机上;
      • 与关系型数据库中,主库只提供写服务、从库只提供读服务的方式不同,es中的主副分片都可以对外提供读写服务;
  • es的架构原理
    • 节点的角色: master节点、数据节点、协调节点。
      • master节点负责维护整个集群的相关工作、管理集群的变更,包括索引的创建与删除、节点健康状态监控、节点上下线;
      • 数据节点主要负责文档的存储与检索;
      • 协调节点则是客户端向es集群发起请求时,es集群就需要找到数据位置,而客户端连接到的那个节点就负责这个工作——检索数据所在的节点位置,并把请求转发给对应的节点,然后把对应节点的响应数据再返回给客户端;
        • 原理:协调节点中保存着一份分片-节点路由表,这张表存放着分片与节点的对应关系,协调节点会通过轮训算法对请求进行转发;
        • 分片的算法:先对用户提交的参数进行hash,然后在对总的分片个数取模,得到的结果就是分片的id;
        • 分片个数不能变的原因:分片个数发生改变后,分片id就会发生错误,会导致路由表发生混乱,最终导致找不到数据所在的节点;
    • 分片数据的高可用原理: 当集群感知到某一块数据的主分片发生故障无法对外提供服务时,集群就会把这块数据的某一个副分片,提升为主分片,然后对外提供服务;当原来的主分片的故障恢复后,现在的主分片就会把发生故障的这段时间内所产生的数据同步到原来的主分片上;
    • 数据的读写原理: 写原理,当协调节点根据分片算法找到对应的主分片所在的节点后,就会把请求转发给对应的节点,主分片写完数据后,再依次去写自己的副分片,当所有的副分片也写完后,主分片所在的节点会返回协调节点一个成功响应,然后协调节点再把请求成功的响应返回给客户端;
  • es的应用场景
    • 垂直领域的搜索引擎
    • 推荐系统
    • 日志分析
    • 业务系统中的二级索引: 查询数据时,先从es中查询到数据在关系型数据库中的相关索引字段,然后再拿着这些索引字段去关系型数据库中查询具体的数据;
  • es的安装与简单使用
    • 单机安装
    • 集群安装
  1. https://juejin.cn/post/6844904117580595214#heading-8 安装、es中相关概念、kibana的相关操作

  2. https://juejin.cn/post/6844904166700105742 ES的Java客户端的相关操作

  3. 什么是全文检索?

    1. 对每一个文章中的每一个词创建索引,指明该词在文章中出现的次数和位置。
  4. 索引

    1. 一个拥有几分相似特征的文档的集合。索引名称必须是小写字母,类似于关系型数据汇中的database的概念
  5. 类型

    1. 有点像database中的table的概念
  6. 一个索引只能创建一个映射(版本6中)

只有 text 分词,其他的类型都不分词;默认的分词器,standard 标准分词器,对英文是单词分词,对中文是单字分词;

索引库的原理,倒排索引

make it come true