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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值