ElasticSearch 安装与使用
- 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?pretty
    BODY:
    {
        "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条数据,使用scrollAPI可以查询到max_result_window得数量得数据max_rescore_window:rescoreAPI使用,本次没有使用到
修改Index Mapping:
PUT/POST your_server_ip:9200/index_name/_mappings
- Payload
 
{
	"properties": {
        "test": {
        "type": "keyword"
    }
}
- 说明
 
- 可以新增column
 - 有一些字段类型得更改是不被允许得,只能使用
_reindexAPI - 直接在
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 - 某些更改设置,必须使用
_closeAPI关闭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都可以识别- 聚合中还可以算 
sumavg等。参照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/scrollAPI,知道获取到当前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否则bulkAPI会失败_id可传,可不传,如果不传入,ES会自动生成一个。在
bulk中插入index中没有得字段也是被允许得。bulkAPI不会检测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中查询具体数据,关闭后的字段将不能被查询出来使用。
开启最佳压缩(未设置)
设置延迟刷新
补充
修改于20191128
当你的ES查询URL中又特殊的字符的时候请用以下的代替
空格    -    %20
"          -    %22
#         -    %23
%        -    %25
&         -    %26
(          -    %28
)          -    %29
+         -    %2B
,          -    %2C
/          -    %2F
:          -    %3A
;          -    %3B
<         -    %3C
=         -    %3D
>         -    %3E
?         -    %3F
@       -    %40
\          -    %5C
|          -    %7C
												
											ElasticSearch 安装与使用的更多相关文章
- ElasticSearch安装及部署
		
安装及部署 一.环境配置 操作系统:Cent OS 7ElasticSearch版本:1.3.2JDK版本:1.7.0_51SSH Secure Shell版本:XShell 5elasticsear ...
 - Elasticsearch安装和使用
		
Elasticsearch安装和使用 Elasticsearch 是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene.RESTful.分布式.面向云计算设计.实时搜索.全文搜索. ...
 - Elasticsearch安装详解
		
本文只介绍在windows上的安装和配置,其他安装和配置请参见官方文档 ES在windows上安装需下载zip安装包,解压后bin目录下有个 elasticsearch-service.bat 文件. ...
 - Elasticsearch.安装插件(head)
		
Elasticsearch.安装插件(head) 环境: Linux 7.x jdk1.8 目录结构(跟目录多了两个文件) /resources ### 存放软件源 /u01/ ...
 - Elasticsearch.安装(单节点)
		
Elasticsearch.安装(单节点) 环境Linux 7.x jdk 1.8 elasticsearch 5.x 环境目录结构(根目录多了两个文件夹): /resources /** 存放 ...
 - ELK日志监控平台安装部署简介--Elasticsearch安装部署
		
最近由于工作需要,需要搭建一个ELK日志监控平台,本次采用Filebeat(采集数据)+Elasticsearch(建立索引)+Kibana(展示)架构,实现日志搜索展示功能. 一.安装环境描述: 1 ...
 - elasticsearch 安装,以及遇到的问题总结
		
系统.软件环境: Centos 6.5 elasticsearch 6.1.1 elasticsearch 安装的话是很简单的,但是安装完成启动的时候报错,下面我就一一的来描述错误,并提供相应的解决方 ...
 - elasticsearch 安装、配置
		
elasticsearch:基于java开发,基于RESTful web 接口,提供分布式多用户能力的全文搜索引擎. elasticsearch 安装: 1. java SE Development ...
 - 如何给Elasticsearch安装中文分词器IK
		
安装Elasticsearch安装中文分词器IK的步骤: 1. 停止elasticsearch 2.2的服务 2. 在以下地址下载对应的elasticsearch-analysis-ik插件安装包(版 ...
 - (转载)Centos下Elasticsearch安装详细教程
		
原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...
 
随机推荐
- CS程序和BS程序文字转语音
			
一.项目中一直用到了文字转语音的功能,需求也比较简单,就是将一段报警信息通过语音的方式播放出来,之前一直采用CS客户端,利用微软自带的Speech语音播放库就可以完成, 1.1 封装winSpedk类 ...
 - 基于SpringBoot从零构建博客网站 - 设计可扩展上传模块和开发修改头像密码功能
			
上传模块在web开发中是很常见的功能也是很重要的功能,在web应用中需要上传的可以是图片.pdf.压缩包等其它类型的文件,同时对于图片可能需要回显,对于其它文件要能够支持下载等.在守望博客系统中对于上 ...
 - c++学习书籍推荐《C++语言的设计与演化》下载
			
百度云及其他网盘下载地址:点我 编辑推荐 <C++语言的设计与演化>由C++语言的设计者Bjarne Stroustrup著就,是一本阐述C++语言的设计及开发过程的无可争辩的内情手册.S ...
 - Elasticsearch(一)开启外网访问
			
1. 设置Elasticsearch对外访问的Host 修改Elasticsearch配置文件 elasticsearch.yml : network.host: 128.24.108.84 //在 ...
 - 每周一个js重要概念之一 调用堆栈
			
js写了也有两年多了,大到复杂的后台系统,小到页面,还有日均300万的网页主站,HTML5的适配页面等等. 框架也杂七杂八接触了不少,从小的jquery.bootstrap.echarts等等,到大一 ...
 - Java虚拟机知识点【内存】
			
运行时数据区 程序计数器(Program Counter) 每个线程独占自己的程序计数器.如果当前执行的方式不是native的,那程序计数器保存JVM正在执行的字节码指令的地址,如果是native ...
 - go 学习笔记之初识 go 语言
			
Go 是一种开源编程语言,可以轻松构建简单,可靠,高效的软件. 摘录自 github: https://github.com/golang/go,其中官网(国外): https://golang.or ...
 - 小白学python之整型,布尔值,十进制二进制转换和字符串详解for循环!
			
整型与字符串转化 十进制转二进制. python2,存在int 整型和long(长整型),在python3里就是int/获取的是浮点数 小数 print(bin(15)) 这样可以通过代码来计算十进制 ...
 - 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能
			
在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...
 - Git储藏和引用日志
			
在日常工作中,当要经常停下手头的工作区修复临时的BUG,紧急处理来自同事或者经理的请求,但是又不能将手头的工作进行提交的时候.那么Git储藏功能(stash)就起到作用了. 储藏可以捕获我们的工作区状 ...