以下内容为学习工作汇总,关键问题的汇总。
参照:elasticsearch 分片(Shards)的理解_云中鲸的博客-CSDN博客_elasticsearch 分片
创建 IndexName 索引时候,在 Mapping 中可以如下设置分片 (curl)
PUT indexName
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
注意
索引建立后,分片个数是不可以更改的
建议:(仅参考)
1、每一个分片数据文件小于30GB
2、每一个索引中的一个分片对应一个节点
3、节点数大于等于分片数
根据建议,至少需要 10 个分片。
结果: 建10个节点 (Node),Mapping 指定分片数为 10,满足每一个节点一个分片,每一个分片数据小于30G左右。
mapping部分可以不写,只写PUT /my-index-000001创建索引,等数据插入的时候es会自动匹配数据类型来创建mapping。
mapping 部分可以参考:ES Mapping设置及常见参数设置 - 简书
PUT /my-index-000001
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
es索引有个刷新频率的概念,默认貌似1s一次我们可以根据需要来设置,如果批量倒数期间可以设置长点或者关闭
自动刷新并设置刷新间隔
注意:一个绝对值 1 表示的是 1毫秒 --无疑会使你的集群陷入瘫痪。
#设置自动刷新60s
PUT /test-logstash-index-tank/_settings
{
"refresh_interval": "60s"
}
关闭自动刷新
PUT /test-logstash-index-tank/_settings
{
"refresh_interval": -1
}
手动刷新:
//刷新(Refresh)所有的索引。
POST /_refresh
//只刷新(Refresh) test-logstash-index-tank索引
POST /test-logstash-index-tank/_refresh
大侠总是有,我们无需重复劳动了,参考文档,感谢一下两位大侠慷慨之作
简单搜索语法:2.3. 开始搜索 | 第二章.Elasticsearch入门指南 |《Elasticsearch中文文档 7.3》| Elasticsearch 技术论坛
各种聚合:5.0. 聚合 | 第五章. Aggregations |《Elasticsearch中文文档 7.3》| Elasticsearch 技术论坛
es权威指南中文翻译版:Introduction · Elasticsearch 权威指南(中文版)
1、es乐观锁--乐观并发控制
{
"error" : "VersionConflictEngineException[[website][2] [blog][1]:
version conflict, current [2], provided [1]]",
"status" : 409
}
参考:版本控制 · Elasticsearch 权威指南(中文版)
es中所有更新和删除文档的请求都接受version
参数,它可以允许在你的代码中增加乐观锁控制。
当我们制定的版本低于当前版本时,es会报以上错误,告诉我们已经有人更新了数据,建议我们先看一查最新数据后在修改。
1、Elasticsearch status 429 "es_rejected_execution_exception"
当 Elasticsearch 集群收到大量请求且无法再接收任何请求时,通常会发生“es_rejected_execution_exception”异常。每个节点都有一个线程池队列,可以容纳 50 到 200 个请求,具体取决于您使用的 Elasticsearch 版本。队列已满时,将拒绝新请求。
参考:Elasticsearch status 429 "es_rejected_execution_exception"_hyx216的博客-CSDN博客_429 es
GET /rt_yonghu_user_dm_orders_info_total/_search
{
"query": {
"script": {
"script": {
"source": "doc['id.keyword'].value != doc['orders.Oid.keyword'].value"
}
}
}
}
语法没问题,但是这里的orders有为空的情况 导致orders.Oid会报错,作以再过滤下orders不为空的情况,如下:
GET /rt_yonghu_user_dm_orders_info_total/_search
{
"query": {
"bool": {
"must": [
{
"script": {
"script": {
"source": "doc['id.keyword'].value != doc['orders.Oid.keyword'].value"
}
}
}
],
"filter": [
{
"exists": {
"field": "orders.Oid"
}
}
]
}
}
}