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中文档操作,索引导入数据批量导入删除文档

Java操作ElasticSearch-索引-文档

Elasticsearch学习笔记-p3(RestClient操作文档)

Elasticsearch:彻底理解 Elasticsearch 数据操作

Elasticsearch:彻底理解 Elasticsearch 数据操作

ElasticSearch高级操作