ElasticSearch创建文档

支持自动生成文档 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 :9200/test/_doc -d \ '{ "name": "qiaofeng", "age": 28 }' curl -H "Content-Type: application/json" -XPOST :9200/test/_doc -d \ '{ "name": "xuzhu", "age": 22 }' curl -H "Content-Type: application/json" -XPOST :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上传方式 :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请求后, 其结果是创建出了若干的资源。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfxp.html