Elasticsearch CRUD基本操作
前言
本次我们聊一聊Elasticsearch的基本操作CRUD,他跟我们常用的关系型数据库的操作又有什么不一样的地方呢?今天我们就来好好讲解一番。
说明
本次演示用的版本是7.11。
工具可以使用Kibana的控制台,界面美观且有一定的缩进,而且能简化命令行的curl操作,如果对安装有问题的,可以看一下我之前的文章。
API约定
关系型数据库用的是SQL进行数据的访问,而Elasticsearch用的是REST进行数据的访问,HTTP的请求头PUT、GET、POST、DELETE正好可以对应CRUD(create、read、update、delete)四种数据操作。
数据的格式用的是JSON。
索引操作
创建索引
创建索引movie
PUT /movie { "settings": { "index": { "number_of_shards": 1, "number_of_replicas": 0 } } }
number_of_shards是主分片数,number_of_replicas是一个主分片有多少个本,那么总的分片数就是“(number_of_replicas + 1) * number_of_shards”
查看索引
GET /movie/
删除索引
DELETE /movie/
文档操作
插入文档
7.x版本,type默认是“_doc”。可以用POST,也可以用PUT
// 自动生成_id POST /movie/_doc { "title": "The Pursuit of Happyness", "actors": [ "Will Smith", "Jaden Smith", "Thandie Newton" ] } // 指定_id=1 PUT /movie/_doc/1 { "title": "The Pursuit of Happyness", "actors": [ "Will Smith", "Jaden Smith", "Thandie Newton" ] } // 演示覆盖 PUT /movie/_doc/1 { "title": "xxx" }
如果是指定_id的情况下(称为index操作),那么如果文档已经存在的话,会直接进行覆盖,也就是如果里面有些字段没传,那个字段就不会存储了,比如上面第三个请求,执行完后去获取“_id=1”的数据,只能获取到title字段,actors字段是不存在的。
更新文档
更新“_id=1”的数据,注意需要有“doc”。如果用“POST /movie/_update/1”这种语法,就直接覆盖了。
POST /movie/_update/1 { "doc":{ "title": "The Pursuit of Happyness xxx" } }
删除文档
删除“_id=1”的数据
DELETE /movie/_doc/1
获取文档
获取“_id=1”的数据
GET /movie/_doc/1
搜索文档
GET /movies/_search { "profile": "true", "_source": ["mov 56c ieId", "title","genres"], "sort": [{"movieId": "desc"}], "from": 0, "size": 3, "query": { "match_all": {} } }
- movies是之前导入的数据,非前面用的movie,需要测试的话要先导入一下数据。
- profile 相当于MySQL中的explain
- _source 是要返回的字段
上面的请求,类比SQL如下
select movieId, title, genres from movies order by movieId desc limit 0, 3
更复杂的搜索查询,后面持续更新。
批量文档操作
批量操作
POST movie/_bulk {"index":{"_index":"movie","_id":1}} {"title": "xxx xx"} {"index":{"_index":"movie","_id":2}} {"title": "The Pursuit of Happyness"} {"update":{"_index":"movie","_id":2}} {"doc":{"title": "xxx xx"}}
支持在一次API调用中,对不同的索引做不同的操作,减少网络请求的次数,提高性能。支持的操作有index、create、update、delete。批量操作,如果其中一条有错误没法执行,不会阻碍其他的请求,会继续执行下去。
请求体要特别注意一下,不能格式化,而且第一行指定index跟id,第二行指定数据,以此类推。
批量读取
请求体可以格式化
GET _mget { 118e "docs": [ { "_index": "movie", "_id": 1 }, { "_index": "movie", "_id": 2 } ] }
如果是对同一个index进行操作,可以在URI指定index
GET movie/_mget { "docs": [ { "_id": 1 }, { "_id": 2 } ]
批量查询
GET /movies/_msearch {} {"from":0,"size":1,"query":{"match_all":{}}} {} {"from":0,"size":2,"query":{"match_all":{}}}
与_bulk操作类似,不能进行格式化。
- Elasticsearch基本CRUD操作
- elasticsearch基本索引和CRUD操作、bulk批量操作
- 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查
- elasticsearch基本操作之--java基本操作 api
- Hbase学习笔记——基本CRUD操作
- Elasticsearch_基本操作
- Elasticsearch简单使用系列--使用Java API进行CRUD操作
- ElasticSearch之安装及基本操作API
- HBase(五):HBase基本API操作之CRUD
- ASP.NET Web API 基本操作(CRUD)
- elasticsearch基本操作之--java基本操作 api
- 三、基本CRUD操作
- Elasticsearch-基本操作
- Elasticsearch学习总结三 elasticSearch基本操作API
- mongoDB基础知识2----基本操作(CRUD),索引(常见、全文、地理位置)
- elasticsearch基本操作之--使用java操作elasticsearch
- Elasticsearch之文档基本操作。
- Elasticsearch之基本操作
- JAVA实现DAO基本层CRUD操作
- 【ElasticSearch】3.elasticsearch增删改查基本操作