elasticsearch 主键生成策略以及如何指定特定字段为id主键列

es种一共两种主键生成策略,一个是手动指定和一个是自动生成

1.document的id

1)根据应用情况来说,是否满足是否指定document id的手动指定,一般情况,是从某些其他的系统中,导入一些数据到es时,会采用这种方式,就是使用系统中已有数据的唯一标识,作为es中document的id,举个例子,比如说我们现在在开发一个电商网站,做搜索功能,或者oa系统的员工查询,这个时候,数据首先会在网站的系统中的数据库中,会先有一份,此时就肯定会有一个数据库的primary key(自增长,uuid,业务id),此时就比较适合采用数据在数据库中已有的primary key

语法:

PUT /index/type/id
{
    "xxx":"xxx"
}

例子:

PUT /ecommerce/product/4
{
  "name":"yayale yagao",
  "desc":"gaoxiao meibai",
  "price":100,
  "producer":"yayale producer",
  "tags":[
    "fangzhu","meibai","qingxin"
    ]
}

执行结果:

{
  "_index": "ecommerce",
  "_type": "product",
  "_id": "4",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 2,
  "_primary_term": 3
}

2)如果数据主要存储到es中,那么就可以使用document中的自动生成的id

语法:不写id

POST /index/type

{

    "xxx":"xxx"

}

例子:

POST /test_index/salesOrder/
{
  "OrderProductIds":"5"
}

执行结果:生成的自动id是20的guid

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

例子2:

POST /ecommerce/product
{
  "name":"heiren yagao",
  "desc":"gaoxiao meibai",
  "price":100,
  "producer":"heiren producer",
  "tags":[
    "fangzhu","meibai","qingxin"
    ]
}

执行结果:

{
  "_index": "ecommerce",
  "_type": "product",
  "_id": "1131mmABEP2XuYqpoflk",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 3,
  "_primary_term": 3
}

es在20之后就不执行_id 设置为其他字段了

如下链接只能在低版本使用
elasticsearch指定其他字段为主键_id字段

elasticsearch 文档唯一性由多个字段共同确定(类似联合主键),并发下如何确保唯一

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T-OPEN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值