Elasticsearch
简单介绍
本人也是刚刚使用ES,仅对做简单使用,未深究。数据类型、集群安装、详细命令、Logstash、参数等均为提及
- Elasticsearch 可以理解为一个数据库管理系统,等价MySQL。
- 可以创建多个索引,等价mysql的一个数据库
- 每个索引可以创建多个文档, 等价mysql一个数据库的一个表
- 每个索引可以创建多个字段,等价mysql一个数据库的一个表的字段
- 每个字段都被索引并可被搜索
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
- 采用倒排索引的策略
- 采用RESTful API 隐藏 Lucene 的复杂性
一、Elasticsearch倒排索引
将文档内容进行索引,后面的Document代表该条记录的ID值,也就是整条数据,比如找到了Term中butterfly就找到了Document1了
二、windows安装
1、windows无需安装,解压后进入elasticsearch-7.3.2-windows-x86_64\elasticsearch-7.3.2\bin目录,双击elasticsearch.bat即可
2、出现started后即服务启动完成,地址为127.0.0.1:9200
3、进入kibana-7.3.2-windows-x86_64\bin 双击 kibana.bat
4、出现 Server running at http://localhost:5601 后运行完成
5、进入http://localhost:5601
6、打开开发界面
7、即ES+kibana运行完成
三、索引管理
1. 规划分片结构
有两个数据节点,设置4个分片。 因为对数据安全不高,每个分片对应0个副本 。
2. 需要保存的json格式
{
"L11": "美丽的祖国",
"L12": {
"L12_1": 20220707123456,
"L12_2": "这是一个美好的世界,编程快乐",
"L12_3": "你好 ES,你好 Kibana ",
"L12_4": 20210707123456
},
"L13": 20220307123456
}
3. 对应的索引结构
PUT /demo_v1
{
"settings": {
"index":{
"number_of_shards":4, //分片数量,∑分片=总数据量 默认5个分片 建议为节点的2到3倍,每个分片<50G
"number_of_replicas":0 //每个分片对应副本数量
}
},
"mappings": {
"properties": {
"L1": {
"properties": {
"L11": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
//对L11字段做text分词,同时对分词内容做keyword索引
"L12": {
"properties": {
"L12_1": {
"type": "long"
},
//long类型可以直接索引
"L12_2": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"L12_3": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"L12_4": {
"type": "long"
}
}
},
"L13": {
"type": "long"
}
}
}
}
}
}
4. 执行后创建成功
5. 删除索引
四、数据增删查
1. 数据上传
注: _doc为默认文档(表)
post /demo_v1/_doc
{
"L1": {
"L11": "我爱你,中国",
"L12": {
"L12_1": 20220707123456,
"L12_2": "这是一个美好的时间,编程快乐",
"L12_3": "你好 ES ",
"L12_4": 20210707123456
},
"L13": 20220307123456
}
}
2. 数据删除
注:wait_for_completion=false 代表后台删除,返回一个任务id,对大数据量删除特别好使
POST /demo_v1/_delete_by_query?wait_for_completion=false
{
"query": {
"bool": {
"must": [
{
"range": {
"L1.L12.L12_1": {
"gte": 20220707123456, //大于等于
"lte": 20220707123456 //小于等于
}
}
}
}
}
}
get /_tasks/SC_w5G_cRuyUSPPPLf9Dww:45573
注: "completed" : true代表执行完成
3. 数据查找
POST /demo_v1/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"L1.L12.L12_1": {
"gte": 20220707123456,
"lte": 20220707123456
}
}
}
]
}
}
}
五、Shell脚本删除数据
1. 将要删除的请求复制为URL
即:
curl -XPOST "http://localhost:9200/demo_v1/_delete_by_query?wait_for_completion=false" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "L1.L12.L12_1": { "gte": 20220707123456, "lte": 20220707123456 } } } ] } }}'
vim delete_es.sh
delete_tm_start=$(date "+%Y%m%d%H%M%S")
delete_tm_end=$(date "+%Y%m%d%H%M%S")
curl --user 用户名:密码 -XPOST "http://localhost:9200/demo_v1/_delete_by_query?wait_for_completion=false" -H 'Content-Type: application/json' -d '{"query": {"bool": {"must": [{"range": {"L1.L12.L12_1": {"gte": '$delete_tm_start',"lte": '$delete_tm_end'}}}]}}}'
chmod +x delete_es.sh 后即可进行crontab调度删除