ElasticSearch 安装与API的使用
目录
- Elastic Search
- Docker中安装ElasticSearch
- Elastic Search API得使用
- 创建Index:
- 修改Index Mapping:
- 修改Index Settings:
- 创建Index模板:
- 单条件查询: [query->term]
- 多条件查询: [query->bool->must->term]
- 对查询结果进行折叠去重一个字段: [collapse]
- 对查询结果进行折叠去重两个字段: [collapse->inner_hits->collapse]
- 对查询结果进行聚合实现Group BY: [aggerations]
- 对查询结果进行聚合最大值/最小值: [aggs->min/max]
- 对查询结果进行聚合时,需要使用其他数据: [aggs->top_hits]
- 在查询Payload中写逻辑运算: [script]
- 在更新Payload中写逻辑运算: [script]
- 依据查询条件进行更新
- 依据查询条件进行删除
- 简单得分页查询:[from size]
- 复杂得分页查询:[scroll]
- 多条插入数据:[_bulk]
- 重新索引:[reindex]
- 查看所有index:[_cat/indices/]
- 设置Cluster:[_cluster]
- 删除所有生成的Scroll
- 已知文档Id情况下存在更新,不存在插入数据[update]
- 提高 ES效率
Elastic Search
Docker中安装ElasticSearch
需要Java环境
- 下载tar.gz并解压,并移动
mv elasticsearch-7.1.0 /usr/local/elasticsearch
- 修改配置
vi /usr/local/elasticsearch/config/elasticsearch.yml
- yml文件
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
# 7.1 版本即便不是多节点也需要配置一个单节点,否则
#the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
cluster.initial_master_nodes: ["node-1"]
# 配置indices fielddata得内存,超过80%就会释放
indices.fielddata.cache.size: 80%
# request数量使用内存限制,默认为JVM堆的40%。
indices.breaker.request.limit: 80%
- 创建一个非
root
用户elsearch
来执行elasticsearch脚本。ES不能用root用户启动
# elasticsearch can not run elasticsearch as root
adduser elsearch # 会自动建组 test
# 将文件夹以及子文件夹全部该为test用户
chown -R elsearch:elsearch elasticsearch
ll
# drwxr-xr-x 1 elsearch elsearch 4096 May 28 16:54 elasticsearch
- 7.X新特性
- removal mapping types官方:https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html
目前版本有一个默认的type _doc,使用api对文档操作的时候,也不需要在url上加入 type了,直接index即可,具体的api可以大部分都可以通过在url去掉type进行操作。
- not_analyzed不存在了,如果需要不拆分
可以对index进行analyzer设置,将默认的analyzer设置成keyword就不会拆分了。
----------------------------------------------------------------
设置analyzer:需要先关闭index
1. POST http://server_ip/index_name/_close?pretty
2. PUT : http://server_ip/index_name/_settings?prettyBODY:{"index":{"analysis" : {"analyzer" : {"default" : {"type" : "keyword"}}}}}
3. POST http://server_ip/index_name/_open?pretty
- 没有
string
这个 column type了。可以换成text
或者keyword
- 在查询中,新增
{"track_total_hits":true}
,可以查询出total得总数。不会被限制成10000
Elastic Search API得使用
介绍本次BGP项目中使用到得API得使用方法以及某些特定Payload得写法
注:没有使用顺序,每个payload不是唯一得写法。
创建Index:
PUT
your_server_ip:9200/index_name
- Payload
{"settings": {"number_of_shards": 5,"analysis": {"analyzer": {"default": {"type": "keyword"}}},"refresh_interval": "30s","max_result_window" : "1000000","max_rescore_window": "1000000"},"mappings": {"properties": {"test": {"type": "keyword"}}
}
- 说明
settings
设定index,mappings
设置index得columnnumber_of_shards
:分片数量,analysis
:此处是为了不适用分词,这个是7.x版本新的设置方式refresh_interval
:设置刷新时间,为了最大化_bulk
得效率,最好设置30s左右max_result_window
:ES默认只能查询10000条数据,使用scroll
API可以查询到max_result_window得数量得数据max_rescore_window
:rescore
API使用,本次没有使用到
修改Index Mapping:
PUT/POST
your_server_ip:9200/index_name/_mappings
- Payload
{"properties": {"test": {"type": "keyword"}
}
- 说明
- 可以新增column
- 有一些字段类型得更改是不被允许得,只能使用
_reindex
API - 直接在
Payload
中传入properties
即可
修改Index Settings:
PUT/POST
your_server_ip:9200/index_name/_settings
- Payload
{"index":{"analysis" : {"analyzer" : {"default" : {"type" : "keyword"}}},"refresh_interval": "30s","max_result_window" : "1000000","max_rescore_window": "1000000"}
}
- 说明
- 可以一次性设置多个index,url中 index_name=
index1,index2,index3
- 某些更改设置,必须使用
_close
API关闭index,比如analysis
创建Index模板:
PUT
your_server_ip:9200/_template/template_name
- Payload
{"index_patterns": ["test*"],"settings": {"number_of_shards": 1,"analysis": {"analyzer": {"default": {"type": "keyword"}}},"refresh_interval": "30s","max_result_window" : "1000000","max_rescore_window": "1000000"},"mappings": {"properties": {"state": {"type": "keyword"}}}
}
- 说明
index_patterns
表示以test
开头得index都拥有如下得setting
与mapping
- 模板得意义在于,我们基于时间创建index时,不需要每次都添加index得
setting
和mapping
单条件查询: [query->term]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"query": {"term": { "router_name": "test" }}
}
- 说明
- 如上只是一个见到得精确匹配
router_name
是test
得所有文档
多条件查询: [query->bool->must->term]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"query": {"bool":{"must":[{"term": { "router_name": "test" }},{"range": {"count": {"gte": 700000,"lt": 800000}}}]}}
}
- 说明
- 两个查询条件,包括一个精确得一个范围得
bool
下使用must
表示,两个条件都需要满足bool
下还有must_not
,should
可以使用,具体参照官网。
对查询结果进行折叠去重一个字段: [collapse]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"sort": [{"timestamp": "desc"}],"collapse": {"field": "field1"}
}
- 说明
- 排序是为了折叠后留下最大得时间戳数据
对查询结果进行折叠去重两个字段: [collapse->inner_hits->collapse]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"size": 10000,"sort": [{"timestamp": "desc"}],"collapse": {"field": "f1","inner_hits": {"name": "peer","collapse": {"field": "f2"},"size": 10000}}
}
- 说明
- 再
collapse
中使用inner_hits
再次嵌套一个collapse
对查询结果进行聚合实现Group BY: [aggerations]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"sort": [{"timestamp": {"order": "desc"}}],"aggs":{"group1":{"terms":{"field":"f1"},"aggs":{"group2":{"terms":{"field":"f2"},"aggs":{"group3":{"terms":{"field":"f3"},"aggs":{"max_timestamp":{"max":{"field":"timestamp"}}}}}}}}}
}
- 说明
- 上面使用四层聚合,最后一层是求最大得时间戳的,
- 举个例子:f1:中国 f2:北京 f3:昌平,
- ES中,多层聚合只能嵌套,而且在聚合后数据量很大的情况下,最好想别的办法解决
aggs
是关键字aggerations
得缩写,ES都可以识别
对查询结果进行聚合最大值/最小值: [aggs->min/max]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"sort": [{"timestamp": {"order": "desc"}}],"aggs":{"group1":{"terms":{"field":"f1"},"aggs":{"group2":{"terms":{"field":"f2"},"aggs":{"group3":{"terms":{"field":"f3"},"aggs":{"max_timestamp":{"max":{"field":"timestamp"}}}}}}}}}
}
- 说明
- 上面使用四层聚合,最后一层是求最大得时间戳的,
- 举个例子:f1:中国 f2:北京 f3:昌平,
- ES中,为了表示递进关系只能嵌套聚合,在聚合后数据量很大的情况下,最好想别的办法解决
aggs
是关键字aggerations
得缩写,ES都可以识别- 聚合中还可以算
sum
avg
等。参照Metrics Aggregations
对查询结果进行聚合时,需要使用其他数据: [aggs->top_hits]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"aggregations": {"unique_key_group": {"terms": {"field": "f1","size": "100000"},"aggregations": {"max_timestamp": {"max": {"field": "timestamp"}},"top_hit_for_group": {"top_hits": {"size": 1,"sort": [{"timestamp": {"order": "desc"}}]}}}}}
}
- 说明
- 对一个字段进行聚合,但是,聚合之后 还需要用到别的字段的数据
- 在第一个聚合中,写入子聚合
top_hits
,并对时间排序,取到最大时间戳得数据
在查询Payload中写逻辑运算: [script]
POST/GET
your_server_ip:9200/index_name/_search
- Payload
{"script_fields": {"my_f1": {"script": {"lang": "expression","source": "doc['f1'] * multiplier","params": {"multiplier": 2}}}}
}
- 说明
- 如上是对字段
f1
进行乘2得运算 - 如上可以是哦嫩滚
params
设定参数。
在更新Payload中写逻辑运算: [script]
POST/GET
your_server_ip:9200/index_name/_update_by_query
- Payload
{"script": {"source": "ctx._source.state='Down'"}
}
- 说明
- 如上是对字段
state
进行更新,更新成Down
数据 - 关于
script
参照官网 Scripting
依据查询条件进行更新
POST
your_server_ip:9200/index_name/_update_by_query
- Payload
{"script": {"source": "ctx._source.state='json.peer_down'","lang": "painless"},"query": {"bool": {"must": [{"term": {"f1": "1"}},{"term": {"f2": "2"}}]}}
}
- 说明
- 如上是按照查询条件查询到数据,并将所有查询到数据得
state
更新为Down
依据查询条件进行删除
POST/GET
your_server_ip:9200/index_name/_delete_by_query
- Payload
{"query": {"bool": {"must": [{"term": {"f1": "1"}},{"term": {"f2": "2"}}]}}
}
- 说明
- 如上是按照查询条件查询到数据,并将所有查询到数据删除掉。
- 如果想清空数据表可以传入
matchall
得匹配{"query": {"match_all": {}}}
或者在url中加入参数?q=*:*
- 这个操作不会删除掉
index
简单得分页查询:[from size]
POST
your_server_ip:9200/index_name/_delete_by_query
- Payload
{"from":1,"size":10
}
- 说明
- 如上是从第一个数据开始,查询10个,至于分页基础参数,计算之后传入即可
复杂得分页查询:[scroll]
POST
your_server_ip:9200/index_name/_search?scroll=10m&size=10000
- Payload
{"query": {"match_all": {}}}
POST
your_server_ip:9200/_search/scroll
- Payload
{"scroll_id":"DnF1ZXJ5VGhlbkZldGNoDwAAAAAAAZOqFjJ2c0lSa2ZPUzlpcFpxWHYwYldpbncAAAAAAAGTqBYydnNJUmtmT1M5aXBacVh2MGJXaW53AAAAAAABk6kWMnZzSVJrZk9TOWlwWnFYdjBiV2ludwAAAAAAAZOrFjJ2c0lSa2ZPUzlpcFpxWHYwYldpbncAAAAAAAGTrBYydnNJUmtmT1M5aXBacVh2MGJXaW53AAAAAAABk64WMnZzSVJrZk9TOWlwWnFYdjBiV2ludwAAAAAAAZOtFjJ2c0lSa2ZPUzlpcFpxWHYwYldpbncAAAAAAAGTsxYydnNJUmtmT1M5aXBacVh2MGJXaW53AAAAAAABk68WMnZzSVJrZk9TOWlwWnFYdjBiV2ludwAAAAAAAZOyFjJ2c0lSa2ZPUzlpcFpxWHYwYldpbncAAAAAAAGTsBYydnNJUmtmT1M5aXBacVh2MGJXaW53AAAAAAABk7EWMnZzSVJrZk9TOWlwWnFYdjBiV2ludwAAAAAAAZO2FjJ2c0lSa2ZPUzlpcFpxWHYwYldpbncAAAAAAAGTtBYydnNJUmtmT1M5aXBacVh2MGJXaW53AAAAAAABk7UWMnZzSVJrZk9TOWlwWnFYdjBiV2ludw=="
}
- 说明
- 第一个查询,会得到一个scroll_id
- 10m代表,当前scroll_id有效时间是10分钟
- 第二个查询,拿到这个
scrolll_id
之后,一只访问_search/scroll
API,知道获取到当前index
得所有数据为止
多条插入数据:[_bulk]
POST
your_server_ip:9200/_bulk
- Payload
{ "index" : { "_index" : "test" } }
{"state":"111"}
{ "index" : { "_index" : "test", "_id" : "4" } }
{"state":"222"}
- 说明
bulk
插入时,不需要再url中写入index
只需要再payload
中传入即可。- 注意一行得空行,时必须得,ES会检查出错误
- 提醒一下,再使用
Python
或者Java
发送http请求时,需要再每一行中都严格插入\n
否则bulk
API会失败 _id
可传,可不传,如果不传入,ES会自动生成一个。- 在
bulk
中插入index
中没有得字段也是被允许得。 bulk
API不会检测index
是否存在,即便不存在得index
也可以正常插入。关于
bulk
得效率问题,经过测试每次10000
每次15000
每次20000
效率最高得时每次15000
- 上面提到过为了提高
bulk
得效率,最好设置refresh_interval
大一点,30秒左右。 bulk
中是可以做,增、删、改、插,四个操作的,每一个都是单独的。
重新索引:[reindex]
POST
your_server_ip:9200/_reindex
- Payload
{"source": {"index": "old_index"},"dest": {"index": "new_index"}
}
- 说明
- 上面说过,当一个
index
被创建,字段得类型是不允许更改得,这个时候可以用reindex
来迁移数据。
查看所有index:[_cat/indices/]
POST
your_server_ip:9200/_cat/indices/
- 说明
- 每一列得意义
health
status
index
uuid
pri
rep
docs.count
docs.deleted
store.size
pri.store.size
设置Cluster:[_cluster]
POST
your_server_ip:9200/_cluster/settings
- Payload
{"persistent": {"search.max_buckets": 100000000,"search.max_open_scroll_context": 1000000}
}
- 说明
- 可以集群设置。
max_buckets
此处设置,只要是ES中聚合aggregations
的buckets
数量默认是有限制的。max_open_scroll_context
,对对能够打开的scroll
查询的个数
删除所有生成的Scroll
DELETE
http://10.75.44.100:9200/_search/scroll/_all
- 说明
- Scroll的数量是有限制的,最好不要开太多。
已知文档Id情况下存在更新,不存在插入数据[update]
POST
http://10.75.44.100:9200/index_name/_update/document_id
- Payload
{"script" : {"source": "ctx._source.counter += params.count","lang": "painless","params" : {"count" : 4}},"upsert" : {"counter" : 1}
}
- 说明
- 如上是
upsert
。如果document_id
存在,就将counter
更新为4,不存在,则插入数据1,很实用。
提高 ES效率
关闭source:经测试不能关闭,关闭只是在当前字段为查询条件得情况下,关闭后可以提高某查询效率查到id后去mysql中查询具体数据,关闭后的字段将不能被查询出来使用。
开启最佳压缩(未设置)
设置延迟刷新
转载于:https://www.cnblogs.com/primadonna/p/11358440.html
ElasticSearch 安装与API的使用相关推荐
- ELasticSearch安装使用过程中遇到的坑的解决方案,以及使用Kibana操作ELasticSearch
一.安装elasticsearch和kibana 安装elasticsearch和kibana,我现在使用的是windows版本的,安装其实也不难,具体的安装教程可以参照这两篇博客,写的安装步骤也很详 ...
- elasticsearch安装采坑记录
首先下载ES elasticsearch 6.1.1版本 然后安装 安装准备: 安装Elasticsearch唯一的要求是安装官方新版的Java,包括对应的Jdk. 安装Elasticsearc ...
- ElasticSearch安装、IK、映射、索引管理、搜索管理和集群管理
ElasticSearch 一.ElasticSearch 1.1 概念 1.2 原理与应用 1.2.1 索引结构 1.2.3 RESTful应用 二.ElasticSearch安装 2.1 Wind ...
- es 安装以及api
一.引言 1.1 海量数据 在海量数据中执行搜索功能时,如果使用MySQL,效率太低 1.2 全文检索 在海量数据中执行搜索功能时,如果使用MySQL,效率太低 1.3 高亮显示 想将搜索关键字,以红 ...
- elasticsearch安装和使用
一.全文检索基础 1. 什么是全文检索 将⾮结构化数据中的⼀部分信息提取出来,重新组织,使其变得有⼀定结构,然后对此有⼀定结构的数 据进⾏搜索,从⽽达到搜索相对较快的⽬的.这部分从⾮结构化数据中提取出 ...
- Elasticsearch 安装配置及学习
何为全文搜索? 全文搜索本质:非结构化数据转成结构化数据,提取非结构化数据 全文搜索是一种将文件中所有文件与搜索项匹配的文字资料检索方法 原理:建立本库 ---> 建立索引 ---> 执行 ...
- Elasticsearch安装及SpringBoot整合ElasticSearch
一.Elasticsearch基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的 1).对比关系 索引库(indices)->Da ...
- 大数据搜索引擎之ElasticSearch安装篇(资源)
2019独角兽企业重金招聘Python工程师标准>>> 实验平台:操作系统:CentOS 7 软件链接(官网):https://www.elastic.co/products Ela ...
- ES实战系列-Elasticsearch安装
文章目录 Elasticsearch安装 下载7.8.1版本 集群部署 安装报错 创建用户 ES安装 集群安装 管理 注意事项 es不能使用root用户运行 错误:索引文件个数限制 bind错误 发送 ...
- 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...
最新文章
- 判断TREE的某个节点是否是叶节点.
- 京东自动评论脚本_安卓自动脚本,京东活动,抖音极速版刷视频
- MATLAB从入门到精通-控制系统动态特性的计算以及阶跃响应波德图等
- 从babel实现es6类的继承来深入理解js的原型及继承
- 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya‘s Game。
- ZwReadFile读TXT文件
- 第一章 Linux系统简介
- 安川e7变频器接线_台达变频器C2000系列在铝箔纸压花机上的应用
- Centos7中安装zookeeper3.7.0_找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeer---zookeeper工作笔记003
- java三星题之_JAVA三星题之playing a TicTacToe game
- Spark核心编程原理
- editplus3 关联鼠标右键
- 探索SpringCloud+ES实现高性能全文检索
- NOIP2010 机器翻译 题解
- 〖Python 数据库开发实战 - Python与MySQL交互篇⑧〗- 项目实战 - 开发新闻管理系统(项目展示)
- 中国苹果树苗市场产量需求与投资收益预测报告2022-2028年
- 机器学习学习笔记 --- 标称型数据和数值型数据
- 怎样看基金评级和排名
- 点击文件夹弹出多个窗口问题
- 11.pyecharts地图
热门文章
- python基于paramiko模块实现远程连接Linux虚拟机(服务器)并执行指定命令返回输出结果
- 解决UnicodeEncodeError: 'gbk' codec can't encode character u'\u25aa' in position 344 : illegal multiby
- windows10下搭建spark平台
- 分类算法学习(一)——KNN算法的原理及简单实现
- git branch是什么意思
- 区块链 FISCO BCOS学习文章(1)-平台介绍
- stat /bin/bash: no such file or directory“: unknown.
- edi python_在不从edi运行的情况下调用python函数
- 正则表达式在java中的用法
- 焦仲卿刺杀孙策_惊闻:孙伯符死于焦仲卿之手。。。