es--总结

搜索引擎

  • 分类
    • 网页
    • 业务
    • 日志
  • 特点
    • 数据量很大
    • 搜索内容条件是完全随机
  • 如果用传统数据库Oracle存储?
    • 不能,大容量下,做模糊匹配,性能非常差
  • 如果Hbase大数据数据库?
    • 不能,索引能力非常差
  • ES应用场景:基于大数据量构建全文索引

ES的特点

  • 分布式
  • 全文检索
  • NRT(近实时)

ES概念和存储结构

  • Index:索引库
    • 类似于数据库的概念
    • 里面存储的是所有数据的索引
  • Type:索引类型
    • 类似于数据库中表的概念
    • 这是一个逻辑上的概念,物理上没有区分
    • 问题:如果一个 索引库中的两个索引类型中出现了相同的列名,但类型不一样
      • 物理上属于同一列
      • 逻辑上属于不同列
      • 读取数据时就会出现问题
    • 6.x开始:每个Index中只能有一个Type
    • 后期Type这个概念会被取消
    • 任何一条Document,虽然在物理上属于Index,但是在访问时必须加上Type才能访问
  • Document:一条数据
    • 就是存储在ES中的一条数据,类似于Hbase 中的一条Rowkey的数据
    • Document = DocumentId + data【fields】
    • DocumentId类似于Rowkey,是ES为每个索引类型都自带的一列,值由我们自己定义
      • 用于作为唯一标识
      • 用于分区规则:按照documentId的hash取余分区的个数
  • Fields:真正数据中存储的列
  • Shard:分片
    • 默认每个索引库都会有5个主分区
  • Replicas:副本
    • 默认每个主分区都会有1个副本分区
    • 如果我们创建一个索引库,这个索引库会创建10个分区
    • 角色
      • 主分区:对外提供读写服务
      • 副本分区:与主分区同步数据
    • 注意
      • 任何一个分区的总个数【主分区+副本分区】不允许超过机器个数
  • 架构
    • 分布式主从
      • Master
      • Node
    • 主从节点、主副分区选举都由自己完成
    • 自己实现了 类似于Zookeeper的功能

RestfulAPI

  • PUT:创建、插入、更新
  • GET:查询
    • GET /index/type/documentId
      • 查询某一条数据
    • GET /index/_search + Query
      • 查询多条数据
      • 常见的查询器
        • match/matchAll
        • term
        • range
        • bool
        • exists
        • 浅分页
        • 深分页
  • DELETE:删除

mapping和setting

  • mapping:用于管理索引库中字段属性
    • 字段名称
    • 字段类型
    • 是否索引
    • 是否分词
    • ……
  • setting:用于整个ES的配置管理
    • 配置分片已及副本个数
    • 配置分词器

分词器

  • 应用
    • 存储数据:对数据进行分词构建倒排索引
      • 正常索引:通过id找到这条数据位置
      • 倒排索引:通过数据得到符合的id
        • 通过id获取所有数据位置
    • 检索数据:对搜索词进行分词
      • term:精准匹配,不分词
      • match:模糊匹配,分词
        • 搜索引擎
  • 分词器的本质是根据词库中的词进行分词
  • 词库肯定是动态的
    • 动态更新词库

ES中的读写流程以及存储过程

  • 类似于Impala
    • 哪台ES节点接受请求,哪台就是中心调度节点,负责这个请求的转发以及返回结果
  • 类似于Zookeeper
    • 自己实现了选举的集群管理
    • 主从节点都会存储数据
    • 每个索引库中的主从分片都提供读
    • 只有主分片对外提供写,同步给所有从分片
  • 类似于Kafka
    • 通过副本来保证分区可用性,每个分区可以有多个副本
    • 主分区对外提供写,从分区负责同步
      • 主分区与从分区数据不一致
    • 如果主分区故障,从分区用于重新选举一个新的主分区
  • 类似于hbase
    • hbase
        • wal
        • memstore
        • flush
        • compact
        • memstore
        • blockcache
        • storefile
    • es
        • buffer:translog
        • os cache
        • flush
        • merge
        • os cache
        • segmentfile
  • 没有删除和更新,都是做标记,在合并的时候删除

Java API

  • JDBC/Hive/Hbase/HDFS
  • 客户端连接服务端
    • 先构建连接
      • 指定连接地址:用户名、密码
    • 构建客户端
    • 所有操作都是客户端对象中方法
  • 如何构建ES客户端
    • JSON
    • JAVA Bean:fastJson
    • bulk
    • 根据某个documentId来获取数据
    • 构建查询器
      • range
      • term
      • match
      • bool
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值