06 curl 操作elasticsearch的CRUD
中文文档:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html
查看健康状态
curl -X GET 127.0.0.1:9200/_cat/health?v
查询当前es集群中所有的indices
curl -X GET 127.0.0.1:9200/_cat/indices?v
推荐使用Kibana进行DSL编写,有代码提示与纠正(提示给跟我一样的小白)
创建索引并配置:
number_of_shards为数据分片,默认值为5
number_of_replicas为数据备份数,如果只有一台机器,建议设置为0,避免索引一直处于yellow状态
注:该设置创建索引后无法修改(我记得是这样,有错望纠正)
PUT /index_name/_settings
{
"number_of_shards": 3,
"number_of_replicas": 0
}
定义字段的类型
text:文本类型(会被es分词器进行分词)可以保存字符串也可以保存数组
keyword:文本类型(不被分词) 可以保存字符串也可以保存数组
scaled_float:浮点型数据类型,scaling_factor用于精度限制
date:时间类型,可用format约束时间格式(epoch_millis为时间戳)
例子:
查看mapping
PUT /index_name/_doc/_mapping?pretty
{
"_doc":{
"properties":{
"my_id":{
"type":"long"
},
"content":{
"type":"text"
},
"money":{
"type":"scaled_float",
"scaling_factor":100
},
"customer":{
"type":"keyword"
},
"sync":{
"type":"boolean"
},
"create_time":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
保存数组
text
和 keywor
类型可以保存字符串也可以保存数组
"properties": {
"fofa_rules": {
"type": "keyword"
}
创建mapping
curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user1 -d '
{
"mappings":{
"person":{
"properties":{
"address":{
"type":"text",
"fields":{
"keyword":{
"ignore_above":2048,
"type":"keyword"
}
}
},
"name":{
"type":"text",
"fields":{
"keyword":{
"ignore_above":256,
"type":"keyword"
}
}
}
}
}
}
}' | jq .
存字符串
修改值为字符串
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/1/_update -d'
{
"doc":{
"name":"lisi",
"address":"北京"
}
}'
curl -X GET 127.0.0.1:9200/user/person/_search?q=_id:1 | jq .
查询结果:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "user",
"_type": "person",
"_id": "1",
"_score": 1,
"_source": {
"name": "lisi",
"age": 9,
"married": false,
"address": "北京"
}
}
]
}
}
存数组
修改值为数组
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/1/_update -d'
{
"doc":{
"name":["lisi","wangwu"],
"address":["安徽","北京"]
}
}'
curl -X GET 127.0.0.1:9200/user/person/_search?q=_id:1 | jq .
查询结果
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "user",
"_type": "person",
"_id": "1",
"_score": 1,
"_source": {
"name": [
"lisi",
"wangwu"
],
"age": 9,
"married": false,
"address": [
"安徽",
"北京"
]
}
}
]
}
}
创建索引
curl -X PUT 127.0.0.1:9200/www
删除索引
curl -X DELETE 127.0.0.1:9200/www
获取mapping
curl -X GET 127.0.0.1:9200/user/_mapping?pretty
返回参数
{
"user" : {
"mappings" : {
"person" : {
"properties" : {
"age" : {
"type" : "long"
},
"married" : {
"type" : "boolean"
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"query" : {
"properties" : {
"match" : {
"properties" : {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
}
}
}
}
}
创建mapping
注意:
- 这里只要上面获取mapping返回值里的mapping值
- 要创建的索引必需不存在
curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user -d '
{
"mappings":{
"person":{
"properties":{
"age":{
"type":"long"
},
"married":{
"type":"boolean"
},
"name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
}' | jq .
添加字段
给user
引索的person
类型添加字段
curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user/_mapping/person -d '
{
"properties":{
"created_at":{
"format":"YYYY-MM-dd HH:mm:ss",
"type":"date"
},
"it":{
"type":"boolean"
},
"is_scan":{
"type":"long"
},
"address":{
"type":"text",
"fields":{
"keyword":{
"ignore_above":256,
"type":"keyword"
}
}
}
}
}'
设置默认值
参考下面文档
https://blog.csdn.net/huangzhen__/article/details/104769018?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-1-104769018.pc_agg_new_rank&utm_term=Mapping%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4%E5%80%BC&spm=1000.2123.3001.4430
插入记录
post的方式,会自动生成id
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person -d '
{
"name": "dsb",
"age": 9000,
"married": true
}'
输出:
{
"_index":"user",
"_type":"person",
"_id":"55GiOH4BfTVguARX3JmZ",
"_version":1,
"result":"created",
"_shards":{
"total":2,
"successful":1,
"failed":0
},
"_seq_no":0,
"_primary_term":1
}
也可以使用PUT方法,但是需要传入id
curl -H "Content-Type:application/json" -X PUT 127.0.0.1:9200/user/person/4 -d '
{
"name": "sb",
"age": 9,
"married": false
}'
检索
Elasticsearch的检索语法比较特别,使用GET方法携带JSON格式的查询条件。
以下带 | jq .
需要安装jq这是格式化json显示
全检索:
curl -X GET 127.0.0.1:9200/user/person/_search | jq .
输出结果:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "user",
"_type": "person",
"_id": "55GiOH4BfTVguARX3JmZ",
"_score": 1,
"_source": {
"name": "dsb",
"age": 9000,
"married": true
}
},
{
"_index": "user",
"_type": "person",
"_id": "4",
"_score": 1,
"_source": {
"name": "sb",
"age": 9,
"married": false
}
}
]
}
}
按条件检索:
get查询
curl -X GET 127.0.0.1:9200/user/person/1 | jq .
查询结果:
{
"_index": "user",
"_type": "person",
"_id": "1",
"_version": 4,
"found": true,
"_source": {
"name": "lisi",
"age": 9,
"married": false,
"address": "北京"
}
}
查name=sb
的记录
curl -X GET 127.0.0.1:9200/user/person/_search?q=name:sb | jq .
返回参数:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "user",
"_type": "person",
"_id": "1",
"_score": 0.2876821,
"_source": {
"name": "sb",
"age": 9,
"married": false
}
}
]
}
}
查age=9
的记录
curl -X GET 127.0.0.1:9200/user/person/_search?q=age:9 | jq .
post查询
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_search -d '
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "sb"
}
}
]
}
}
}' | jq .
输出结果:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.6931472,
"hits": [
{
"_index": "user",
"_type": "person",
"_id": "4",
"_score": 0.6931472,
"_source": {
"name": "sb",
"age": 9,
"married": false
}
}
]
}
}
更多条件
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_search -d '
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gt": "10"
}
}
}
]
}
},
"from": 0,
"size": 10,
"sort": {
"age": {
"order": "desc"
}
},
"aggs": {}
}' | jq .
返回结果:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "user",
"_type": "person",
"_id": "55GiOH4BfTVguARX3JmZ",
"_score": null,
"_source": {
"name": "dsb",
"age": 9000,
"married": true
},
"sort": [
9000
]
},
{
"_index": "user",
"_type": "person",
"_id": "0ZHGOH4BfTVguARXXZoF",
"_score": null,
"_source": {
"name": "sbs",
"age": 6000,
"married": true
},
"sort": [
6000
]
}
]
}
}
修改
指定id修改
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/4/_update -d'
{
"doc":{
"name":"11"
}
}'
返回结果:
{
"_index":"user",
"_type":"person",
"_id":"4",
"_version":2,
"result":"updated",
"_shards":{
"total":2,
"successful":1,
"failed":0
},
"_seq_no":2,
"_primary_term":1
}
按条件修改
把所有age>1的所有记录的married修改为true
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_update_by_query -d'
{
"script":{
"source":"ctx._source.married=params.married",
"params":{
"married":true
}
},
"query":{
"bool":{
"must":[
{
"range":{
"age":{
"gt":"1"
}
}
}
]
}
}
}'
把所有age>1的所有记录的age修改为12
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_update_by_query -d'
{
"script":{
"source":"ctx._source.age=12"
},
"query":{
"bool":{
"must":[
{
"range":{
"age":{
"gt":"1"
}
}
}
]
}
}
}'
把所有name=sbs的所有记录的age修改为38
{
"script":{
"source":"ctx._source.age=38"
},
"query":{
"bool":{
"must":[
{
"match":{
"name":"sbs"
}
}
]
}
}
}
删除
删除指定id的记录
curl -H "Content-Type:application/json" -X DELETE 127.0.0.1:9200/user/person/4
按条件删除
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user/person/_delete_by_query -d'
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"sb"
}
}
]
}
}
}'
删除所有数据
# user和product索引里类型为_doc的删除所有数据
curl -H "Content-Type:application/json" -X POST 127.0.0.1:9200/user,product/_doc/_delete_by_query -d'
{
"query":{
"bool":{
"must":[
{
"match_all":{
}
}
]
}
}
}'
06 curl 操作elasticsearch的CRUD的更多相关文章
- Curl操作Elasticsearch的常用方法
Elasticsearch对于文档操作,提供了以下几种API,本文就说明如何使用curl方式来调用这些API. API种类 单文档操作API 1.* Index API 索引文档 * 为文档创建索引 ...
- elasticsearch(5) curl 操作elasticsearch
创建索引之前可以对索引做初始化操作, 比如指定shards数量以及replicas的数量. library为索引的名称 CURL -XPUT 'http://192.168.1.10:9200 ...
- window下使用curl操作elasticsearch
1.下载curlzip,https://curl.haxx.se/download.html; 2.解压,在bin文件夹中找到curl.exe,右键“以管理员身份运行”,cmd e: 换盘符:出现E: ...
- 使用Sense操作ElasticSearch CRUD
安装完成之后,我们该开始学习关于ElasticSearch最基本的CURD操作了. ElasticSearch作为一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,其接口也 ...
- ElasticSearch第二步-CRUD之Sense
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- 使用curl命令操作elasticsearch
使用curl命令操作elasticsearch 大岩不灿 发表于 2015年4月25日 浏览 7,426 次 第一:_cat系列_cat系列提供了一系列查询elasticsearch集群状态的接口.你 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(3):使用curl命令操作elasticsearch
使用Elasticsearch不免要提到curl工具,curl是利用URL语法在命令行方式下工作的开源文件传输工具.官网地址:https://curl.haxx.se/ 因为elasticsearch ...
- ElasticSearch之CURL操作(有空再去整理)
https://www.cnblogs.com/jing1617/p/8060421.html ElasticSearch之CURL操作 CURL的操作 curl是利用URL语法在命令行方式下工 ...
- Go操作Elasticsearch
文章转自 Elasticsearch Elasticsearch 下载 https://www.elastic.co/cn/start 运行 解压后cd到解压目录 ./bin/elasticsea ...
- GO学习-(31) Go语言操作Elasticsearch
Elasticsearch 本文简单介绍了ES.Kibana和Go语言操作ES. Elasticsearch 介绍 Elasticsearch(ES)是一个基于Lucene构建的开源.分布式.REST ...
随机推荐
- 美团一面:项目中使用过Redis吗?我说用Redis做缓存。他对我哦了一声
引言 Redis,作为一种开源的.基于内存且支持持久化的键值存储系统,以其卓越的性能.丰富灵活的数据结构和高度可扩展性在全球范围内广受欢迎.Redis不仅提供了一种简单直观的方式来存储和检索数据,更因 ...
- 使用sbt对Scala程序进行打包并运行(Spark单机运行)
十.使用sbt对Scala程序进行打包并运行(Spark单机运行) 在./sparkapp 中新建文件 simple.sbt(vim ./sparkapp/simple.sbt),添加内容如下,声明该 ...
- #博弈论#Poj 2505 A multiplication game
题目 给你一个整数\(n\),你从1开始乘,乘2-9之间的任意一个数. 最先得到大于等于\(n\)的数的人胜利.Stan先手Ollie后手. 那么,请问给你一个数\(n\),Stan和Ollie都足够 ...
- 李东山:如何让 OpenHarmony 支持低功耗蓝牙芯片 GR551x
编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 李东山 深圳市汇顶 ...
- 成长计划校园极客秀 | 玩转OpenHarmony开发智能煤气检测系统
成果展示 1.整体展示 2.碰一碰无感配网 3.报警 简介 目前,煤气泄漏给居民生活带来伤害的事情仍时有发生,但我相信万物互联能够有效避免这种伤害,于是我基于OpenHarmony设计了一款煤气检测装 ...
- jemter做参数化的几种方法
第一种:使用用户参数:添加--前置处理器--用户参数
- mysql统计查询和索引练习
课程数据表course SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table ...
- 抓包整理————tcp 传输数据的基础概念[十一]
前言 简单介绍一下tcp 数据传输. 正文 tcp 数据传输是怎么样子的呢? 比如我们在代码中写好了,connection 去连接. 然后我们用 write 去读取数据,这个时候呢,到底我们的操作系统 ...
- mysql 重新整理——sql 执行语句的顺序[五]
前言 盗图: 其实在复杂的语句中,需要我们逐步去分析,然后呢,我们了解一些优化器到底是如何帮我们优化的,就知道到底是mysql怎么执行代码. 我把以前的丢了,后续补全.
- opensips使用drouting进行路由
操作系统 :CentOS 7.6_x64 opensips版本:2.4.9 drouting是Dynamic Routing(动态路由)的缩写,该模块可为特定呼叫选择(基于多个条件)最佳网关.今天整理 ...