ElasticSearch6.2.4(2)——核心概念和文档实操

1.核心概念

(1)什么是document?

document是个文件,里面有很多file。比如

{

    "name":"小红",

    "age":"18"

}

这就一个文件,而name就是个file,age也是

(2)什么是index?

在我的理解es里的index概念就像是个数据库,里面存放很多个document

(3)什么是type?

比如document是存放动物的数据,那么type就是把动物的类型分类,比如猫科,狗科,鸟科等

(4)什么是shard和replica?

如果有个10T的数据,有5台服务器,每个服务器只能放2T的数据,怎么办?

分布式解决:那么就是理解10T为index,数据分成5份,每个服务器放2T的数据,而这5台服务器就是shard。

当有台服务器宕机了怎么办!所以就为这5台服务器分别配了台备用服务器,称为replica,至少一台shard服务器宕机了,还有代替。这样的话,拿数据就可以在replica拿,又可以在shard拿了,基本上不用怕数据同步问题,因为es是实时性的

2.简单的实操

(1)GET

结构:GET /index/type/id

例:

GET /shopping/category/1

返回

{
  "_index": "shopping",
  "_type": "category",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "name": "xiao hong",
    "type": "cat",
    "dscription": "most small",
    "age": 7,
    "child": {
      "num": 10,
      "category": "not"
    }
  }
}

(2)DELETE

结构:DELETE /index/type/id

例:DELETE /shopping/category/1

返回:

{
  "_index": "shopping",
  "_type": "category",
  "_id": "1",
  "_version": 6,
  "result": "deleted",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 5,
  "_primary_term": 1
}

这个只是打上delete标签,并不是真正的删除

(3)PUT

    结构:

PUT /index/type/id
{
	"field":"text"
}
    例:
PUT /shopping/category/1
{
  "name":"xiao hong",
  "type":"cat",
  "dscription":"most small",
  "age":7,
  "child":{
    "num":10,
    "category":"not"
  }
}

    返回:

{
  "_index": "shopping",
  "_type": "category",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}


_shard:一共有多少分片,虽然默认有5个shard和5个replica,但是一个document只会存放在一个shard里面,而一个shard有个replica,而我这只有个shard,没有replica,所有只有一个成功。

_seq_no:严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc的_seq_no大于先写入的Doc的_seq_no。

任何类型的写操作,包括index、create、update和Delete,都会生成一个_seq_no。这个是不可改的,而_version这个版本号是可以改的,后面会讲

_primary_term:_primary_term也和_seq_no一样是一个整数,每当Primary Shard发生重新分配时,比如重启,Primary选举等,_primary_term会递增1。

_primary_term主要是用来恢复数据时处理当多个文档的_seq_no一样时的冲突,比如当一个shard宕机了,raplica需要用到最新的数据,就会根据_primary_term和_seq_no这两个值来拿到最新的document

PUTdocument的时候,当ES里面有数据的时候,新数据会覆盖旧数据(旧数据会被打上delete标签,不会马上删除,只会等到内存不够的情况下才会真正的删除,然后会创建新的document)

(4)POST

结构:

POST /index/type/id
{
  "doc":{
    "field":"text"
  }
}

例:

POST /shopping/category/1/_update
{
  "doc":{
    "name":"xiao ming",
    "sex":"man"
  }
}

返回:

{
  "_index": "shopping",
  "_type": "category",
  "_id": "1",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 1,
  "_primary_term": 1
}

首先这个document必须存在。如果document本身没有这个field,那么也会添加到里面去(ES会将原先的document复制一份出来,然后在新的这个document上修改,修改完成后,在把原先的删除,也就是打上delete标签)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值