在 Elasticsearch 中,要更新一个文档,有两种方法,即,使用 PUT 方法直接覆盖原来的记录与使用 POST 修改文档的具体的字段信息。
PUT indexname/_doc/id { }
参数 | 描述 |
---|---|
indexname | 需要替换的索引名 |
id | 需要替换的文档 id |
一般对应到应用程序中,每次的执行流程基本是这样的:
POST indexname/_update/id { "doc": { "field1":"value1", "field2":"value2" ... } }
参数 | 描述 |
---|---|
indexname | 需要更新的索引名 |
id | 需要更新的文档 id |
field1 | 需要更新的字段 |
value1 | 将字段更新为的值 |
field2 | 需要更新的字段 |
value2 | 将字段更新为的值 |
看起来,好像就比较方便了,每次就传递少数几个发生修改的 field 即可,不需要将全量的 document 数据发送过去。
Elasticsearch 内部对 partial update 的实际执行,跟传统的全局替换方式是几乎一样的。
我们在 Kibana 的控制台上,输入以下代码,新建一个文档:
PUT haicodernet/_doc/1 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,此时我们创建文档成功了,现在,我们使用全局替换的方式,更新文档,具体代码如下:
PUT haicodernet/_doc/1 { "index":"haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }
更新成功后,如下图所示:
现在,我们查看该文档的内容,具体命令如下:
GET haicodernet/_doc/1
更新成功后,如下图所示:
我们看到,此时 index 字段的值已经被修改为了 haicoder.net 了。
我们在 Kibana 的控制台上,输入以下代码,新建一个文档:
PUT haicodernet/_doc/2 { "index":"www.haicoder.net", "name" : "javascript", "desc" : "javascript module", "categorys" : 5, "author" : "jobs steven", "tags": [ "javascript", "vue" ] }
输入完成后,我们点击运行按钮,输出了最终的运行结果,如下图所示:
我们看到,此时我们创建文档成功了,现在,我们使用局部更新的方式,更新文档的指定字段的值,具体代码如下:
POST haicodernet/_update/2 { "doc": { "index":"haicoder.net", "name":"JavaScript" } }
更新成功后,如下图所示:
现在,我们查看该文档的内容,具体命令如下:
GET haicodernet/_doc/2
更新成功后,如下图所示:
我们看到,此时 index 字段的值和 name 字段的值都已经被更新了,而且这种方式使用起来更方便简单。
在 Elasticsearch 中,要更新一个文档,有两种方法,即,使用 PUT 方法直接覆盖原来的记录与使用 POST 修改文档的具体的字段信息。