1. 新建文档

  • 支持自动生成文档 ID 和指定文档 ID 两种方式
  • 通过调用 “post/users/_doc” ,系统会自动生成 document id
  • 使 用HTTP PUT /usr/_create/1 创建时,URL中显示指定 _create ,此时如果改 ID 的文档已经存在,操作失败

新建一个索引,然后向索引中添加一个文档

1. 使用kibana创建
PUT blog/_doc/1   # 1 表示新建文档的 id
{
"title":"雪中悍刀行",
"date":"2020-11-05",
"content":"关于庙堂权争与刀剑交错的江湖"
}

添加成功后,响应的 json 如下

{
"_index" : "blog",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
  • _index 表示文档索引。
  • _type 表示文档的类型。
  • _id 表示文档的 id。
  • _version 表示文档的版本(更新文档,版本会自动加 1,针对一个文档的)。
  • result 表示执行结果。
  • _shards 表示分片信息。
  • _seq_no_primary_term 这两个也是版本控制用的(针对当前 index)

当然,添加文档时,也可以不指定 id,此时系统会默认给出一个 id,如果不指定 id,则需要使用 POST 请求,而不能使用 PUT 请求。

POST blog/_doc
{
"title":"剑来",
"date":"2020-11-05",
"content":"烽火戏诸侯作品"
} curl -H "Content-Type: application/json" -XPOST http://master:9200/test/_doc -d \
'{
"name": "qiaofeng",
"age": 28 }' curl -H "Content-Type: application/json" -XPOST http://master:9200/test/_doc -d \
'{
"name": "xuzhu",
"age": 22
}' curl -H "Content-Type: application/json" -XPOST http://master:9200/test/_doc -d \
'{
"name": "duanyu",
"age": 20
}'

系统自动生成ID的不能使用 PUT 请求,因为会报错

{
"error" : "Incorrect HTTP method for uri [/blog/_doc?pretty=true] and method [PUT], allowed: [POST]",
"status" : 405
}
2. 使用 curl 命令创建

创建文档,指定Id,如果id已经存在,报错:

curl -H "Content-Type:application/json" -XPUT 'http://10.135.73.73:9201/index_name/_doc/1?pretty' -d \
'{
"name": "xuwl",
"age": 18,
"job": "Linux"
}'
命令介绍:
-H:指定内容类型
-X:指定http请求方式,这里为PUT上传方式
http://10.135.73.73:9201:指定一台es服务器对外的http端口
/index_name:文档的索引名称,必须小写
/type_name:文档的类型名称,7.0开始一个索引只能创建一个Type ,即,“_doc”
/1:文档的ID编号
?pretty:人性化创建索引
-d:指定使用JSON方式来撰写上传文档
{ "name": "xuwl", "age": 18, "job": "Linux" }':使用JSON格式来撰写上传文档内容

索引初始化,创建索引之前可以对索引做初始化操作,比如指定shards数量以及replicas的数量

curl -XPUT 'http://master:9200/test/' -d \
'{
"settings":{
"index":{
"number_of_shards":5
"number_of_replicas":1
}
}
}'

适当的提升分片数量可以提升建立索引的速度;

一般情况下:一个索引库建立5-20个分片是最合适的;

注意:如果分片过少或者过多,都会降低检索的速度

分片数过多会导致:

  • 会导致打开比较多的文件

  • 分片是存储在不同机器上的,分片数越多,机器之间的交互也就越多;

分片数太少导致:

  • 单个分片索引过大,降低整体的检索速率

建议:

  • 将单个分片存储存储索引数据的大小控制在20G左右;绝对不要超过50G , 否则性能很差

最终分片数量 = 数据总量/20G

多副本可以提升检索的能力,但是如果副本数量太多,插入数据的时候容易出现卡顿现象;

因为主分片要把数据同步给所有的副本,所以建议副本数量最好是1-2个;

Es在索引数据的时候,如果存在副本,那么主分片会将数据同时同步到副本;

如果当前插入大量数据,那么会对es集群造成一定的压力,所以在插入大量数据前,也就是在建立索引的时候,我们最好把副本数设置为0;等数据建立完索引之后,在手动的将副本数更改到2,这样可以提高数据的索引效率

参考:https://www.cnblogs.com/niutao/p/10909358.html

查看索引

curl -XGET 'http://10.135.73.73:9201/_cat/indices?v'

查看分片

可以看到我们分片存储的对应的地址,没有出现我们的master节点地址,也没有出现我们的client节点,仅仅只有我们所设置的数据存储节点,

额,下面还有10.150.55.95是我们的master节点的原因,是因为我把node.data设置为了true..... 我错了,

大家要相信我,只要把node.data设置为false它肯定是不会存储数据的。。。

curl -XGET 'http://10.135.73.73:9201/_cat/shards?v'

PUT和POST的用法区别

  • PUT, DELETE操作是幂等的。 所谓幂等是指不管进行多少次操作,结果都一样。 比如我用PUT修改一篇文章, 然后在做同样的操作,每次操作后的结果并没有不同, DELETE也是一样。

  • POST操作不是幂等的, 比如常见的POST重复加载问题: 当我们多次发出同样的POST请求后, 其结果是创建出了若干的资源。

  • 还有一点需要注意的就是, 创建操作可以使用POST, 也可以使用PUT, 区别在于POST是作用在一个集合资源之上的(/articles) ,而PUT操作是作用在一个具体资源之上的(/articles/123) , 比如说很多资源使用数据库自增主键作为标识信息, 而创建的资源的标识信息到底是什么只能由服务端提供, 这个时候就必须使用POST。

创建全新内容的两种方式:

  1. 使用自增ID(POST)
curl -H "Content-Type: application/json" -XPOST http://master:9200/test/user/ -d \
'{
"name" : "xiaoyaozi" }'
  1. 在url后面添加参数
curl -H "Content-Type: application/json" -XPUT http://10.135.73.73:9201/test/user/2?op_type=create -d \
'{
"name":"lucy",
"age":18
}'
curl -H "Content-Type: application/json" -XPUT http://10.135.73.73:9201/test/user/3/_create -d \
'{
"name":"lily",
"age":28
}'

ElasticSearch创建文档的更多相关文章

  1. Elasticsearch创建文档,利用Kibana进行创建文档

    首先先来了解一下什么是文档,es里边的文档相当于mysql数据库里边的一张表,如果你用过mongodb的话,那么肯定对es这种数据格式一定很了解了.接下来我们来看一下如何创建一个文档. PUT /sd ...

  2. ElasticSearch(2)-文档

    上一篇 ES(1) 官网原地址:https://www.elastic.co/guide/en/elasticsearch/reference/1.7/_cluster_health.html ES权 ...

  3. elasticsearch 路由文档到分片

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  4. elasticsearch——海量文档高性能索引系统

    elasticsearch elasticsearch是一个高性能高扩展性的索引系统,底层基于apache lucene. 可结合kibana工具进行可视化. 概念: index 索引: 类似SQL中 ...

  5. ElasticSearch——原始文档和倒排索引

    一.原始文档 如上图所示, 第二象限是一份原始文档,有title和content2个字段,字段取值分别为”我是中国人”和” 热爱共X产党”,这一点没什么可解释的.我们把原始文档写入Elasticsea ...

  6. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  7. Elasticsearch 删除文档

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  8. Elasticsearch 更新文档

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  9. elasticsearch父子文档处理(join)

    elasticsearch父子文档处理 join 一.背景 二.需求 三.前置知识 四.实现步骤 1.创建 mapping 2.添加父文档数据 3.添加子文档 4.查询文档 1.根据父文档id查询它下 ...

随机推荐

  1. mdn & remove & removeChild

    mdn & remove & removeChild Element https://developer.mozilla.org/en-US/docs/Web/API/Element ...

  2. NGK” 呼叫河马 “智能合约火爆全网

    最近有一款基于NGK.IO公链上的智能合约"呼叫河马"在区块链市场很火.通过访问和查阅资料可知,"呼叫河马"是一款全新的智能合约Dapp小游戏,智能合约代码是1 ...

  3. NGK——解决区块链用户之“难”

    自比特币诞生以来,区块链行业已发展十余年,而且在在金融.民生.司法存证.供应链协同.税务发票.版权保护等领域得到一定程度的应用,但大多属于边缘业务,以探索试点为主,应用深度和广度不足.为什么会这样?是 ...

  4. 如何用python自动编写《赤壁赋》word文档

    目录 前言 安装-python-docx 一.自动编写<赤壁赋> 准备数据 新建文档 添加标题 添加作者 添加朝代 添加图片 添加段落 保存word文档 二.自动提取<赤壁赋> ...

  5. JDBC概念理解

    ##JDBC: 概念:Java DataBase Connectivity  Java 数据库连接  Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则 ...

  6. 手把手教你Spring Boot整合Mybatis Plus 代码生成器

    一.在pom.xml中添加所需依赖 <!-- MyBatis-Plus代码生成器--> <dependency> <groupId>com.baomidou< ...

  7. vue之下拉菜单Dropdown的使用

    通过组件slot来设置下拉触发的元素以及需要通过具名slot为dropdown 来设置下拉菜单.默认情况下,下拉按钮只要hover即可,无需点击也会显示下拉菜单. <el-dropdown> ...

  8. tcp粘包情况分析

    1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.在tcp长连接时,发送端发到buffer里面,接收端也有个buffe ...

  9. vscode中js文件使用typescript语法报错,如何解决

    原因:由于vcode自身的语法检查有些问题 解决办法:在设置里面加上 "javascript.validate.enable": false 禁用默认的 js 验证 总结: 由于v ...

  10. Hi3559AV100外接UVC/MJPEG相机实时采图设计(二):V4L2接口的实现(以YUV422为例)

    下面将给出Hi3559AV100外接UVC/MJPEG相机实时采图设计的整体流程,主要实现是通过V4L2接口将UVC/MJPEG相机采集的数据送入至MPP平台,经过VDEC.VPSS.VO最后通过HD ...