向索引中增加数据(文档)
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