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": ["movieId", "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
{
"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 rest-high-level-client 基本操作
Elasticsearch rest-high-level-client 基本操作 本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch , 虽然这个客户 ...
- 使用Sense操作ElasticSearch CRUD
安装完成之后,我们该开始学习关于ElasticSearch最基本的CURD操作了. ElasticSearch作为一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,其接口也 ...
- python对接elasticsearch的基本操作
基本操作 #!/usr/bin/env python # -*- coding: utf-8 -*- # author tom from elasticsearch import Elasticsea ...
- 3.ELK 之elasticsearch CRUD
名词介绍 index: type: document: 数据类型: 索引(index)创建示例 . type的创建(7.x之后)将会去掉该内容,点我看为什么? 参考脚本: mapping使用 其他 ...
- Elasticsearch之基本操作
elasticsearch是一个是开源的(Apache2协议),分布式的,RESTful的,构建在Apache Lucene之上的的搜索引擎. 它有很多特点例如Schema Free,Document ...
- MongoDB 4.X CRUD基本操作
本文总结了MongoDB 4.X在mongo shell客户端涉及的对文档一些基本的增删改查操作,即CRUD操作.主要结合了自己平时使用MongoDB的操作命令,更详细的命令可以参考官方文档: htt ...
- ElasticSearch Python 基本操作
创建索引 from elasticsearch import Elasticsearch es = Elasticsearch('192.168.149.96:9200') mappings = { ...
- CentOS7.5安装MongoDB4.0与CRUD基本操作
一 MongoDB简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数 ...
- Elasticsearch 术语介绍和CRUD实际操作入门
一.Elastic Stack 核心Elasticsearch Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎.Elasticsearch 是面向文档的,这就意味着 ...
随机推荐
- 使用ganglia 实现监控 hadoop 和 hbase(详细过程总结)
一,环境准备 hadoop 2.8.2 分布式环境(三个节点 安装请参考 hadoop分布式环境安装) hbase 1.2.6 分布式环境(三个节点 ,安装参考hbase分布式环境安装 ) 主节点采 ...
- UML——构件图
宏观导图: 细节探究: 一.What 构件:是一个应用很广的名词,在建筑工程.机械工程.软件工程中等都有该概念.其实,说道底表达的都是一个意思.就像是标准化生产出来的零部件一样,具有可替换性.同质性, ...
- Java 复习整理day10
package com.it.demo01_quickstart; /* 案例: 讲解网络编程相关概念. 网络编程简介: 概述: 网络编程也叫: 套接字编程, Socket编程, 就是用来实现 网络互 ...
- Python 字符串指定位置替换字符
指定位置替换字符 def replace_char(old_string, char, index): ''' 字符串按索引位置替换字符 ''' old_string = str(old_string ...
- Linux lsblk和df命令区别
lsblk 查看的是block device,也就是逻辑磁盘大小. df查看的是file system, 也就是文件系统层的磁盘大小
- P1020 导弹拦截(LIS)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- Codeforces Round #481 (Div. 3) C. Letters (模拟,二分)
题意:有个\(n\)个公寓,每个公寓\(a_{i}\)代表着编号为\(1-a_{i}\)个房间,给你房间号,问它在第几栋公寓的第几个房间. 题解:对每个公寓的房间号记一个前缀和,二分查找属于第几个公寓 ...
- Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two (DFS)
题意:给你一个长度为\(n\)的序列\(a\).对它重新排列,使得\(a_{i+1}=a_{i}/3\)或\(a_{i+1}=2*a_{i}\).输出重新排列后的序列. 题解:经典DFS,遍历这个序列 ...
- Common Divisors CodeForces - 1203C
题意: 给你n个数,让你找出来公因子有多少个.公因子:对于这n个数,都能被这个公因子整除 题解: 只需要找出来这n个数的最大公因子x,然后找出来有多少不同数能把x给整.(因为我们可以保证x可以把这n个 ...
- 在Ubuntu虚拟机上搭建青岛OJ
源码地址为:https://github.com/QingdaoU/OnlineJudge 可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/ ...