elasticsearch中文档操作,索引导入数据批量导入删除文档
Posted Leo Han
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch中文档操作,索引导入数据批量导入删除文档相关的知识,希望对你有一定的参考价值。
向索引中增加数据(文档)
POST /goods_info/_doc
"name":"ThinkPad 联想 E14 11代i5/I7 2G独显 轻薄便携商务办公学生网课IBM笔记本电脑 i7-1165G7 32G内存 1T固态 定制 2G独显 WiFi6 FHD屏幕 雷电接口",
"detail":"ThinkPad 联想 E14 11代i5/I7 2G独显 轻薄便携商务办公学生网课IBM笔记本电脑 i7-1165G7 32G内存 1T固态 定制 2G独显 WiFi6 FHD屏幕 雷电接口",
"brand":"笔记本",
"price":"8299.00",
"sales_count":"1000",
"picture":"https://item.jd.com/10021516289831.html",
"click_url":"https://item.jd.com/10021516289831.html"
这种方式添加索引后,索引id是由ES生成的,在返回结果中能看到,或者我们可以在增加数据的时候,手动指定文档ID:
POST /goods_info/_doc/1
"name":"ThinkPad 联想 E14 11代i5/I7 2G独显 轻薄便携商务办公学生网课IBM笔记本电脑 i7-1165G7 32G内存 1T固态 定制 2G独显 WiFi6 FHD屏幕 雷电接口",
"detail":"ThinkPad 联想 E14 11代i5/I7 2G独显 轻薄便携商务办公学生网课IBM笔记本电脑 i7-1165G7 32G内存 1T固态 定制 2G独显 WiFi6 FHD屏幕 雷电接口",
"brand":"笔记本",
"price":"8299.00",
"sales_count":"1000",
"picture":"https://item.jd.com/10021516289831.html",
"click_url":"https://item.jd.com/10021516289831.html"
当我们指定了doc id之后,每次调用post方法对同一个doc id操作,doc的版本会增加,实现了更新文档
获取文档信息
GET /goods_info/_doc/1
删除文档
DELETE /goods_info/_doc/1
获取所有文档
GET /goods_info/_doc/_search
批量操作文档
批量操作的请求体必须包含两个内容:
- 操作方式
- 具体数据
所以一般都说批量操作数据必须是偶数行。
第一行数据是定义操作类型及操作对象,第二行数据才是操作的数据
比如:
POST _bulk
"index":"_index":"goods_info","_id":"1"
"name":"ThinkPad 联想 E14 11代i5/I7 2G独显 轻薄便携商务办公学生网课IBM笔记本电脑 i7-1165G7 32G内存 1T固态 定制 2G独显 WiFi6 FHD屏幕 雷电接口","detail":"ThinkPad 联想 E14 11代i5/I7 2G独显 轻薄便携商务办公学生网课IBM笔记本电脑 i7-1165G7 32G内存 1T固态 定制 2G独显 WiFi6 FHD屏幕 雷电接口","brand":"笔记本","price":"8299.00","sales_count":"1000","picture":"https://item.jd.com/10021516289831.html","click_url":"https://item.jd.com/10021516289831.html"
"index":"_index":"goods_info","_id":"2"
"name":"华为笔记本电脑MateBook D 14 2022款 14英寸 11代酷睿 i5 16G+512G 锐炬显卡 轻薄本/护眼全面屏 银","detail":"华为笔记本电脑MateBook D 14 2022款 14英寸 11代酷睿 i5 16G+512G 锐炬显卡 轻薄本/护眼全面屏 银","brand":"笔记本","price":"4799.00","sales_count":"10000","picture":"https://item.jd.com/100016960357.html","click_url":"https://item.jd.com/100016960357.html"
这里我们通过一次请求,添加了两条文档信息。
所以一般批量处理的模式是:
"actionName":"_index":"indexName", "_type":"typeName","_id":"id"
"field1":"value1", "field2":"value2"
这里的actinName主要包含如下五个:
(1)create
:create如果对应索引文档存在则会报错
(2)index
对应索引文档存在不会报错,更新文档,version+1
(3)update
更新索引文档部分字段信息
(4)delete
删除指定索引文档
(5)doc
更新索引文档部分字段值,必须配合update使用
查询到匹配条件然后删除文档
POST /<index>/_delete_by_query
比如:
POST /goods_info/_delete_by_query
"query":
"match":
"name":
"query": "笔记本"
这时就会删除匹配到name为笔记本
的文档删除
查询到匹配条件然后更新文档
POST /<index>/_update_by_query
如果我们不指定任何查询,那么会对索引中的每个文档执行更新:
POST /goods_info/_update_by_query
同时呢,也可以结合scrpt脚本对文档字段值,字段类型等进行更新:
POST my-index-000001/_update_by_query
"script":
"source": "ctx._source.count++",
"lang": "painless"
,
"query":
"term":
"user.id": "kimchy"
详见: doc apis
以上是关于elasticsearch中文档操作,索引导入数据批量导入删除文档的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch中文档操作,索引导入数据批量导入删除文档
Elasticsearch学习笔记-p3(RestClient操作文档)
Elasticsearch:彻底理解 Elasticsearch 数据操作