【elasticsearch】在学习es的使用前,总要先了解下它的基本概念

elasticsearch

基本概念

是面向文档的、实时的分布式搜索分析引擎,其中索引和搜索的功能由Lucene实现。
实时:新增的数据在短时间内(1s)内可以搜索到
分布式:可以动态对集群规模进行调整、扩容
Lucene:java写的全文搜索框架,用于处理纯文本的数据,主要用于建立索引、执行搜索,所以并不包括分布式的服务
全文索引:对于全部的文本数据进行分析并建立索引,使其可以被搜索
es可以让我们轻易实现搜索引擎的功能如日志分析,配合开源爬虫建立垂直领域搜索引擎等。其聚合功能可以用来进行数据的分析统计。

索引结构

由_index,_type,_id标识唯一文档。
ps:有些文章里将其和关系型db作对比,把_index比作数据库、_type比作表,这个理解有误,避免混淆,在es后续更新中将弱化、删除_type的概念。在操作数据的时候最好用_index为单位。

分片

单机无法存储海量数据,为了大规模处理、存储,通过增加机器的方式提高系统水平扩展的能力。可以将海量数据分成多块存储到多台机器上。
每个分片可以单独承担读写的功能,集群规模变更时,增加分片,并迁移原分片。
分布式中为了保证高可用,将每个分片设置主从的概念:主分片和副分片,实现读写分离(主写从读,降低集群各节点的压力),但同时由于增加了系统的复杂度,可能会导致数据一致性的问题。
可以设置索引别名,指向一个或多个索引,避免单个索引数据量过大膨胀的问题。
索引和分片的关系:
在这里插入图片描述

动态更新索引

对于文章建立索引之后,建立了倒排索引的数据结构,而倒排索引在建立以后是不可变的,即不会有并发问题,能被文件系统缓存。
对于每条数据的更新、删除,都只是对其进行一个标记并放到一个单独的位置,并没有真正的做删除。因此被删除的数据依旧在磁盘存在!

近实时搜索

es每次产生一个Lucene的新分段,先将其写入文件系统缓存,稍后flush刷入磁盘,而写入内存的操作很快,所以能很快被搜索到。
由于每次刷新不会实时落盘,所以如果宕机小概率会丢失数据,所以要将每次操作记录事务日志,在es启动的时候同步操作的记录。

段合并

在Lucene的段数据太多的情况下,由于每次搜索需要遍历所有的段再合并结果,会导致速度变慢。需要对分段进行合并(例如将相似大小的分段合并),在合并操作以后标记为删除的字段才算删除。
在段合并过程中,会需要一定量的磁盘空间,如果没有保证有足够的磁盘空间的话,比如一个段超过了磁盘一半的空间就会导致无法合并,部分数据就无法物理删除。

客户端API

要通过客户端对集群读写时,有REST接口,JAVA REST API 或者JAVA API。
JAVA REST API 是对REST接口的封装,走9200端口;
JAVA API走9300端口,而JAVA API由于历史包袱等原因,将在7.0、8.0版本逐渐废除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值