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. Web Vitals

    Web Vitals https://www.youtube.com/watch?v=2k1QbgLAFdI&feature=youtu.be $ npm i -S web-vitals ht ...

  2. computer network layers architecture (TCP/IP)

    computer network layers architecture (TCP/IP) 计算机网络分层架构 TCP/IP 协议簇 OSI 模型(7 层) TCP/IP (4 层) Applicat ...

  3. nasm astrlen函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  4. NGK公链账本技术浅析

    NGK公链账本是一个去中心化加密账本,运行在分布式网络上.分布式账本是区块链技术中最重要的组成部分之一.NGK作为公链资产,在公链中起到桥梁作用,可以促进其他资产(法币.数字资产.股权以及实物资产)交 ...

  5. 12.scikit-learn中的Scaler

    import numpy as np from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.t ...

  6. Java流程控制:循环结构

    一.简介 顺序结构的程序语句只能被执行一次,如果您想要同样的操作执行多次,就需要使用循环结构. Java中有三种主要的循环结构: 'while'循环 'do...while'循环 'for'循环 在J ...

  7. Docker 概述(一)

    1-1 虚拟化技术发展史 在虚拟化技术出现之前,如果我们想搭建一台服务器,我们需要做如下的工作: 购买一台硬件服务器:在硬件服务器上安装配置操作系统系统:在操作系统之上配置应用运行环境:部署并运行应用 ...

  8. fastjson 漏洞利用 命令执行

    目录 1. 准备一个Payload 2. 服务器上启动 rmi 3. 向目标注入payload 参考 如果你已经用DNSLog之类的工具,探测到了某个url有fastjson问题,那么接着可以试试能不 ...

  9. 企业安全_检测SQL注入的一些方式探讨

    目录 寻找SQL注入点的 way MySQL Inject 入门案例 自动化审计的尝试之旅 人工审计才能保证精度 寻找SQL注入点的 way 在企业中有如下几种方式可以选择: 自动化 - 白盒基于源码 ...

  10. apicloud编译所需的ios证书的获取方法

    在我们通过apicloud或hbuilderX这些工具打包ios应用的时候,需要一个ios证书. 那么我们如何生成这个ios证书呢?网上介绍的方法都是需要使用mac电脑,然后用mac电脑的钥匙串访问的 ...