ES学习(二)基础语法[多图预警]

16 篇文章 0 订阅
4 篇文章 2 订阅

二、es基本语法操作示例

前面我们已经成功搭建了单机的es环境,并学会了简单使用es的可视化页面工具kibana,是时候用它来练习es语法了。文档型数据库的优势是存储的灵活性,以及单次随机查询的性能较好,例如:mongoDB,相伴随而来的就是其非常难掌握的s一样的语法,因此不感兴趣的就可以不用往下看了,等用到的时候再补充。

es的一些概念和原理我就不说了,百度百度都能有,我自己也是半吊子说不清楚。es的语法涉及到的细节也非常多,我就增删改查这些基本的功能写个简单版本,以备以后用到时好快速上手。好了打开kibana的dev tools,我们来愉快的coding吧。

2.1 用户名和密码[可跳过]

// 列出所有索引
GET /_cat/indices?v

根据此处提示查看相关的官方文档,提示我们安全级别过低,需要创建用户名密码,其实这步可以跳过不管,直接进入2.2。

Security APIs | Elasticsearch Guide [7.16] | Elastic

2.1.1 修改配置

根据文档指示,修改配置文件如下

//es配置
network.host: 0.0.0.0
xpack.security.enabled: true
discovery.type: single-node

// kibana配置 新建文件/root/docker/kibana/config/kibana.yml
server.host: "0.0.0.0"
elasticsearch.username: "kibana_system"
elasticsearch.password: "123456"

 2.1.2 设置es密码

修改好配置后,重启es服务,设置密码为123456,命令见代码段,操作见下图

// 进入docker容器 修改所有密码为123456
docker exec -it es /bin/bash
./bin/elasticsearch-setup-passwords interactive

2.1.3 使用配置文件启动kibana

此处因为需要添加kibana账户,我们先前没有给kibana弄配置文件,因此需要重建下kibana的容器。

// 停止清除老的容器,使用如下命令启动kibana
docker run --name kibana --net elastic -p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=http://es:9200" \
-v /root/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d docker.elastic.co/kibana/kibana:7.16.0

ps:官方文档中此处推荐使用的kibana-keystore设置密码方式,会导致页面无法访问但日志不报错,原因未知。

2.1.4 使用elastic/123456登录es和kibana

再次查看所有索引

2.2 索引

为了节省篇幅,json查询语句部分我都压缩成一行了,使用的话找个在线格式化工具就行了

JSON在线校验格式化工具(Be JSON)

2.2.1 创建索引

put /open-soft

2.2.2 开启和关闭索引

POST /open-soft/_close
POST /open-soft/_open

2.2.3 索引设置 ​

put /open-soft/_settings {"refresh_interval":"2s"}
get /open-soft/_settings

 

 2.2.4 索引映射

映射:定义每个字段的类型,所使用的分词器

get /open-soft/_mapping
put /open-soft/_mapping{"properties":{"name":{"type":"text"},"age":{"type":"integer"}}}

 2.3 文档

2.3.1 查询和新增

get /open-soft/_doc/1
put /open-soft/_doc/1{"name":"cheng","age":30}

2.3.2 更新

新增的语法再执行一次,若存在相同id,则根据id重写文档,可以新增或者减少字段

put /open-soft/_doc/1{"name":"cheng1","age":31}

 按文档的指定字段更新

post /open-soft/_update/1{"doc":{"name":"cheng2"}}

 2.3.3 删除

delete /open-soft/_doc/1

2.4 数据检索_search

开始数据检索前我们还是要导入sample data以方便写查询语句,因为重装kibana时我es也重装了,所以这里需要重新导入一次。点击左侧边栏->点击Home->Try sample data->Sample flight data

2.4.1 分页

get kibana_sample_data_flights/_search{"from":100,"size":10,"query":{"match_all":{}}}

 from:从第几条开始收集结果

size:一共收集返回几条

 query match_all:相当于sql的where 1=1;

 2.4.2 返回指定字段和排序

get kibana_sample_data_flights/_search{"query":{"match_all":{}},"_source":["FlightDelayMin","Origin"],"sort":[{"FlightDelayMin":"desc"},{"Origin":"asc"}]}

这句查询语句相当于Sql的 select FlightDelayMin, Origin from tb where 1=1 order by FlightDelayMin desc, Origin asc;

_source:指定查询返回的字段,字符串数组

sort:按指定字段排序,对象数组

2.5 基于词项的查询

前面的查询都是没有where条件的,基于词项的查询相当于对指定的词项(字段)作精确的匹配,类似sql语句中的 =、>、<、in、between、exists、like "xx%"等,学完这边,基本上类似mysql的大部分查询能力就都能实现了

2.5.1 term

get kibana_sample_data_flights/_search{"query":{"term":{"DestWeather":"Rain"}},"_source":"DestWeather"}

term:相当于等于号,查询语句为:where DestWeather = "Rain";

2.5.2 terms

get kibana_sample_data_flights/_search{"query":{"terms":{"DestWeather":["Rain","Sunny"]}},"_source":"DestWeather"}

 terms:可以匹配多个字段的值,相当于in,查询语句为:where DestWeather in ("Rain", "Sunny");

2.5.3 range

get kibana_sample_data_flights/_search{"query":{"range":{"FlightDelayMin":{"gte":10,"lte":200}}},"_source":"FlightDelayMin"}

 range是范围查询,相当于Sql的查询语句为 where FlightDelayMin >= 10 and FlightDelayMin <= 200; 或者 where FlightDelayMin between 10 and 20;

2.5.4 exists

get kibana_sample_data_flights/_search{"query":{"exists":{"field":"DestCountry"}}}

 相当于 where DestCountry is not null

2.5.5 prefix

get kibana_sample_data_flights/_search{"query":{"prefix":{"DestCountry":"C"}}}

 前缀查询,相当于 where DestCountry like "C%";

2.5.6 wildcard和regexp

通配符查询和正则匹配查询,因开销较大一般不建议首先使用

//通配符查询
get kibana_sample_data_flights/_search{"query":{"wildcard":{"Dest":"*Xi?an*"}}}

//正则表达式查询,只能匹配field为text的
getkibana_sample_data_flights/_search{"query":{"regexp":{"FlightNum":"[A-Za-z0-9]*W"}},"_source":"FlightNum"}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值