【ELK】7. elasticsearch linux上操作es命令详解
==========
1.检查ES节点是否正常启动
curl http://192.168.6.16:9200
正常状态:
非正常状态:
1>确保服务是不是正常启动了,端口用的是哪个
2>防火墙是否关闭或者端口是否开放
3>你的curl命令是否有问题,curl命令可能导致服务无法访问,可以尝试重启服务后,在外部浏览器访问URL地址即可。不一定非得用curl
2.cat检测集群健康状况
curl http://192.168.6.16:9200/_cat/health?v
绿色表示一切正常, 黄色表示所有的数据可用但是部分副本还没有分配,红色表示不可用
3.查询es中所有索引,所有已存在的索引
curl http://192.168.6.16:9200/_cat/indices?v
4.创建新的索引【索引要求是全小写字符,可以有下划线隔开】
curl -XPUT http://192.168.6.16:9200/my_new_index?pretty
再查看:
curl http://192.168.6.16:9200/_cat/indices?v
5.对新增的索引,插入一条数据
type是user, id指定为1
curl -XPUT http://192.168.6.16:9200/my_new_index/user/1?pretty -d '{"name":"张三","age":"23"}'
6.根据ID,获取刚刚索引中新增的数据
curl -XGET http://192.168.6.16:9200/my_new_index/user/1?pretty
7.修改数据
7.1先新增一条数据
curl -XPUT http://192.168.6.16:9200/my_new_index/user/2?pretty -d '{"name":"李四","age":"25"}'
7.2 根据ID查询这条数据
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
7.3修改id为2的数据
curl -XPUT http://192.168.6.16:9200/my_new_index/user/2?pretty -d '{"name":"李四修改","age":"28"}'
即使用相同的新增命令操作 相同的ID,数据不同
7.4查询修改结果
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
8.更新数据,使用POST请求,注意请求体,格式
curl -XPOST http://192.168.6.16:9200/my_new_index/user/2/_update?pretty -d '{"doc":{"name":"李四更新","age":"230"}}'
查看更新后的数据:
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
9.更新数据的同时,新增列
就是将doc中的json数据列增加即可
curl -XPOST http://192.168.6.16:9200/my_new_index/user/2/_update?pretty -d '{"doc":{"name":"李四更新","age":"230","address":"北京东直门"}}'
查看:
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
10.将age字段字符串类型,修改为数字类型,并使用简单脚本对其操作
10.1 查看数据
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
10.2 将age类型由字符串更改为数值
就是将json中的age的值的引号去掉
curl -XPOST http://192.168.6.16:9200/my_new_index/user/2/_update?pretty -d '{"doc":{"name":"李四更新","age":230,"address":"北京东直门"}}'
10.3 查看修改后数据
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
10.4使用简单脚本,对年龄增加5
如果报错。解决方法:https://www.cnblogs.com/sxdcgaq8080/p/11119420.html
curl -XPOST http://192.168.6.16:9200/my_new_index/user/2/_update?pretty -d '{"script" : "ctx._source.age += 5"}'
查看:
curl -XGET http://192.168.6.16:9200/my_new_index/user/2?pretty
11.删除数据,根据ID删除
curl -XDELETE http://192.168.6.16:9200/my_new_index/user/2?pretty
12.批量插入 bulk
【注意JSON字符串格式】
curl -XPOST http://192.168.6.16:9200/my_new_index/user/_bulk?pretty -d '
{"index":{"_id":"3"}}
{"name":"赵思","age":12}
{"index":{"_id":"4"}}
{"name":"钱三一","age":13}
'
想要看插入以后索引下的数据,查询在后面16
13.批处理语句,bulk,更新id为1的数据,删除id为3的数据
curl -XPOST http://192.168.6.16:9200/my_new_index/user/_bulk?pretty -d '
{"update":{"_id":"1"}}
{"doc": {"name":"张三变李四","age":25}}
{"delete":{"_id":"3"}}
'
14.导入批量数据集文件json文件【使用bulk批量导入】
测试的json批量数据集文件,java生成代码:

public static void main(String[] args) {
File file = new File("E:\\1\\myjson.json");
FileWriter writer = null;
int size = 200;
try {
writer =new FileWriter("E:\\1\\myjson.json");
for (int i = 10; i < size+10; i++) {
writer.write("{\"index\":{\"_id\":\""+i+"\"}}"+"\r\n"+"{\"name\":\"张三"+i+"\",\"age\": "+i+",\"address\":\"北京"+i+"\"}"+"\r\n");
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果报错,解决方案:https://www.cnblogs.com/sxdcgaq8080/p/11119883.html
指定要导入的 索引、type、使用bulk命令 @符号后面跟json文件的绝对路径
curl -XPOST http://192.168.6.16:9200/my_new_index/user/_bulk?pretty --data-binary @/cjf/es/elasticsearch-2.3.3/data/myjson.json
查看index详情:
curl http://192.168.6.16:9200/_cat/indices?v
可以看到成功批量插入了200条
===================================下来看查询(删除索引在最后)=========================================
15.查询某个索引中的所有数据
curl http://192.168.6.16:9200/my_new_index/_search?q=*&pretty
等价于
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match_all":{
}
}
}
'
即
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '{"query":{ "match_all":{}}}'
16.查询指定索引下的数据
【如果不指定size,默认返回10条】
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match_all":{
}
},
"size":10
}
'
17.分页查询,从第10条,返回10条
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match_all":{
}
},
"from": 10,
"size": 10
}
'
18.按照age字段倒序排序 sort,取出20条
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match_all":{
}
},
"sort":{
"age":{
"order":"desc"
}
},
"from": 0,
"size": 20
}
'
19.只返回想查询的部分字段
只返回name和address列
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match_all":{
}
},
"_source":[
"name",
"address"
]
}
'
20.条件匹配查询
20.1查询age=200的数据
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match":{
"age":200
}
}
}
'
20.2 查询address中包含 “北京” 的数据
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match":{
"address":"北京"
}
}
}
'
20.3 查询 address中 包含“北京” 或 “西安”的所有数据 【匹配单个词语 空格分隔】
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match":{
"address":"北京 西安"
}
}
}
'
20.4 查询address中包含“北京 西安” 完整词语的【短语匹配,“北京 西安”作为一个完整词语查询】
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"match_phrase":{
"address":"北京 西安"
}
}
}
'
21.布尔查询 bool
21.1布尔查询bool and查询,必须同时满足 address中包含“北京”,又要满足address中包含“西安”
must表示所有查询必须都为真才被认为匹配
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"bool":{
"must":[
{
"match":{
"address":"北京"
}
},
{
"match":{
"address":"西安"
}
}
]
}
}
}
'
21.2 布尔查询bool or查询 address中包含“北京” 或者 address中包含“西安” 都可以
should 表示查询列表中只要有任何一个为真则认为匹配
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"bool":{
"should":[
{
"match":{
"address":"北京"
}
},
{
"match":{
"address":"西安"
}
}
]
}
}
}
'
21.3 布尔查询bool 都不能满足的 既不能包含这个,也不能包含那个
must_not表示查询列表中没有为真的(也就是全为假)时则认为匹配
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"bool":{
"must_not":[
{
"match":{
"address":"北京"
}
},
{
"match":{
"address":"西安"
}
}
]
}
}
}
'
21.4 这样,就可以布尔查询 多条件组合 查询
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"bool":{
"must":[
{
"match":{
"age":200
}
}
],
"must_not":[
{
"match":{
"address":"西安"
}
}
]
}
}
}
'
22. 范围查询 range 查询年龄25-30之间的
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"query":{
"range":{
"age":{
"gte":25,
"lte":30
}
}
}
}
'
23.聚合查询 aggs
按照name进行聚合分组,然后按照记录数,从大到小排序,默认返回前10条
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"size":0,
"aggs":{
"group_by_name":{
"terms":{
"field":"name"
}
}
}
}
'
24. 聚合查询 aggs ,求age的平均值
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"size":0,
"aggs":{
"average_age":{
"avg":{
"field":"age"
}
}
}
}
'
按name分组,求age的平均值
curl -XPOST http://192.168.6.16:9200/my_new_index/_search?pretty -d '
{
"size":0,
"aggs":{
"group_by_name":{
"terms":{
"field":"name"
},
"aggs":{
"average_age":{
"avg":{
"field":"age"
}
}
}
}
}
}
'
===============带鉴权 查询mapping、修改mapping、以及用新增field字段查询===================
举例:
Username:elastic
Password:changeme
IP:es-ware-1.inner-rta-os.com
Port:9200
Index:XXX_ware__ware_sku_5
新增field:ware_ware__duration_type integer类型
25.带鉴权 查询指定index的mapping
curl -u "elastic:changeme" -XGET "http://es-ware-1.inner-rta-os.com:9200/XXX_ware__ware_sku_5/_mapping" -H "Content-Type: application/json"
26.带鉴权 指定index的mapping新增field字段
curl -u "elastic:changeme" -XPUT "http://es-ware-1.inner-rta-os.com:9200/XXX_ware__ware_sku_5/_mapping/union" -H "Content-Type: application/json" -d '{"properties":{"ware_ware__duration_type":{"type":"integer"}}}'
27.带鉴权 根据你新加的字段进行过滤的脚本
curl -u "elastic:changeme" -XGET "http://es-ware-1.inner-rta-os.com:9200/XXX_ware__ware_sku_5/_search" -H "Content-Type: application/json" -d '{"query":{"match":{"ware_ware__duration_type":1}}}'
=====================复杂条件查询 & 指定返回字段 & 查找并更新 ======================
28.查询条件 venderId=5 and rf_id= 621946 查询
{index}/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"ware_ware__rf_id": "621946"
}
},
{
"term": {
"ware_ware__vender_id": 5
}
}
]
}
}
}
29. 分页查询条件 venderId=5 and duration_type= null,指定返回字段
{index}/_search
{
"_source": ["ware_ware__duration_type", "ware_ware__rf_id"],
"from": 0,
"size": 10000,
"query": {
"bool": {
"must": [{
"term": {
"ware_ware__vender_id": 5
}
}
],
"must_not": [{
"exists": {
"field": "ware_ware__duration_type"
}
}
]
}
}
}
30.按条件查找并更新
{index}/_update_by_query
curl -X POST "localhost:9200/your_index/_update_by_query" -H 'Content-Type: application/json' -d
'
{
"query": {
"bool": {
"must": [
{
"term": {
"ware_ware__vender_id": 5
}
},
{
"term": {
"ware_sku__rf_id": "523936"
}
}
],
"must_not": [
{
"exists": {
"field": "ware_ware__duration_type"
}
}
]
}
},
"script": {
"source": "ctx._source.ware_ware__duration_type = 1",
"lang": "painless"
}
}
'
条件
ware_ware__vender_id = 5 && ware_sku__rf_id = 523936 && ware_ware__duration_type为空的
更新
将 ware_ware__duration_type 更新为 1
31.按条件查找并删除
{index}/_delete_by_query
curl -X POST "localhost:9200/your_index/_delete_by_query" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"name": "John Doe"
}
}
}
'
查找ware_sku__vender_id=5 && ware_ware__duration_type 字段不存在的数据,删除它们
{
"query": {
"bool": {
"must": [
{
"term": {
"ware_sku__vender_id": 5
}
}
]
,
"must_not": [
{
"exists": {
"field": "ware_ware__duration_type"
}
}
]
}
}
}
100.删除索引
100.1 查看所有索引信息
curl http://192.168.6.16:9200/_cat/indices?v
100.2 删除指定索引
curl -XDELETE http://192.168.6.16:9200/my_new_index?pretty
100.3 再次查看
curl http://192.168.6.16:9200/_cat/indices?v
==========================================