Elasticsearch深入浅出

一、简介

Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据。它通常用作底层引擎、技术,为具有复杂搜索功能和要求的应用程序提供支持。

Elasticsearch 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

ES 是基于Lucene这个非常成熟的索引方案,另加上一些分布式的实现:集群,分片,复制等。
特点:

  • 分布式实时文件存储、检索、分析
  • 零配置、集群自动发现
  • 索引自动分片、副本机制
  • RESTful风格接口
  • 多数据源
  • 自动搜索负载

二、ES分布式架构

在这里插入图片描述
上图信息:
节点数量:3
索引名称:demo
一个节点的分片数量(number_of_shards):2
副分片数量(number_of_replicas):2
主分片和副分片:

  • 当新建一个索引库时,可以预先设置其会被分为N个分片(主分片),同时可以为每个主分片产生N个备份分片(副分片)。

  • N个主分片随机分布在集群的多个节点中;N个副分片也是随机的分布在集群的多个节点中,但是副分片和其主分片不会在一个节点上。

1.写(添加数据)

1.客户端向主节点NODE1发送索引文档请求
2.主节点NODE1根据文档的_id来进行路由计算算出该文档属于P0分片,分配到NODE3的主分片P0上
3.NODE3的主分片P0将存入的数据备份到P0的备用节点P1、P2上。
4.当P0所有的Replicas副分片报告成功后,Node3向请求的主节点Node1发送成功报告,Node1再报告至Client。

2.读Get

【注】一个文档可以在primary shard(主分片)和所有的replica shard(副分片)上读取。
在这里插入图片描述
1.客户端对主节点NODE1发起Get请求
2.NODE1使用文档的_id找出它所在的分片是shard0,shard0的主分片P0及副分片R0都保存着_id的数据,所以不管从哪里读都可以,所以随机去找shard0分片,这次找到的shard0是NODE2的R0副分片
3.NODE2将R0查询的结果返回给NODE1,NODE1将查询的文档返回给客户端

3.跟新

在这里插入图片描述

4.搜索数据过程query(其实是协调节点(主节点)在做)

1.客户端发送一个请求给协调节点
2.协调节点将搜索的请求转发给所有的shard对应的primary shard(主分片)
3.query phase:每一个shard 将自己搜索的结果(其实也就是一些唯一标识),返回给协调节点,有协调节点进行数据的合并,排序,分页等操作,产出最后的结果
4.fetch phase ,接着由协调节点,根据唯一标识_id去各个节点进行拉去数据(使用倒排数据),最终返回给客户端

三、es增删改查

几个关键字:
put 增加/更新
update 改变
delete 删除
get 查询
post 查询/改变
head 改变/删除
一下用例都是在def索引、stu类型下

单行插入

put

PUT /def/stu/1
 {"id": 1, "studentNo": "TH-CHEM-2016-C001", "name": "Jonh Smith", "major":"Chemistry", "gpa": 4.8, "yearOfBorn": 2000, "classOf": 2016,  "interest": "soccer, basketball, badminton, chess"}

post:添加数据如果写_id且该_id存在那么就是替换原来的文本内容,如果_id不存在那么就是添加新数据。如果不写_id那么系统会自动添加一个数据,且系统自动创建一个_id

POST /def/stu/2
{"id":"110","name":"xiaowang","intresting":"football"}

批量插入_bulk
【注】语句需要写在一行中,用大括号{}包裹住

POST /_bulk
 {"create":{"_index":"def","_type":"stu","_id":"2"}}
 {"id": 2, "studentNo": "TH-PHY-2018-C001", "name": "Isaac Newton", "major":"Physics", "gpa": 3.6, "yearOfBorn": 2001, "classOf": 2018,  "interest": "novel, soccer, cooking"}
 {"create":{"_index":"def","_type":"stu","_id":"3"}}
 {"id": 3, "studentNo": "BU-POLI-2016-C001", "name": "John Kennedy", "major":"Politics", "gpa": 4.2, "yearOfBorn": 2000, "classOf": 2016,  "interest": "talking, dating, boxing, shooting, chess"}
 {"create":{"_index":"def","_type":"stu","_id":"4"}}
 {"id": 4, "studentNo": "BU-POLI-2015-C001", "name": "John Kerry",  "major":"Politics", "gpa": 4.1, "yearOfBorn": 1999, "classOf": 2015,  "interest": "money, basketball"}
 {"create":{"_index":"def","_type":"stu","_id":"5"}}
 {"id": 5, "studentNo": "BU-ARTS-2016-C002", "name": "Da Vinci",  "major":"Arts", "gpa": 4.8, "year

  1. 删除索引
DELETE /索引名

删除数据

DELETE /def/stu/110
POST /索引/类型/_id/_update
{
	"doc":{
		列名:值//精准修改其中某个列
	}
}

  1. _source:根据_id查询信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值