readme
- 发现搜索引擎很多dsl无法使用 故记下
- 工作中遇到的问题 也同时记录于此
elasticsearch目录
- bin-> 存放启动ES等命令脚本
- config-> 存放ES的配置文件,ES启动时会读取其中的内容
- elasticsearch.yml-> ES的集群信息、对外端口、内存锁定、数据目录、跨域访问等属性的配置
- jvm.options-> ES使用Java写的,此文件用于设置JVM相关参数,如最大堆、最小堆
- log4j2.properties-> ES使用log4j作为其日志框架
- data-> 数据存放目录(索引数据)
- lib-> ES依赖的库
- logs-> 日志存放目录
- modules-> ES的各功能模块
- plugins-> ES的可扩展插件存放目录,如可以将ik中文分词插件放入此目录,ES启动时会自动加载
使用docker 搭建elasticsearch 和 kibana
- docker run --name kibana -p 5601:5601 -d -e ELASTICSEARCH_URL=http://localhost:9200 kibana:6.7.1
- docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch:6.7.1
- docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:elasticsearch kibana:6.7.1
- ps -ef | grep '.node/bin/node.src/cli'
- kill -9 PID
kibana 使用
- Discover 查看更多关于搜索和过滤数据的信息。
- Visualize 查看所有 Kibana 提供的可视化控件种类。
- Management 查看如何配置 Kibana 和管理已保存的对象。
- Console 查看如何使用交互控制台向 Elasticsearch 提交 REST 请求。
ElasticSearch 核心概念
- 集群 由一个或多个节点组成。一个集群有一个默认名称"Elasticsearch"。
- 节点
- Master节点:存元数据。
- Data节点:存数据。
- Ingest节点:可在数据真正进入index前,通过配置pipline拦截器对数据ETL。
- Coordinate节点:协调节点。如接收搜索请求,并将请求转发到数据节点,每个数据节点在本地执行请求并将结果返回给协调节点。协调节点将每个数据节点的结果汇总并返回给客户端。每个节点默认都是一个协调节点。当将node.master,node.data和node.ingest设置为false时,该节点仅用作协调节点。
注意:Coordinate Tribe 是一种特殊类型的协调节点,可连接到多个集群并在所有连接的集群中执行搜索和其他操作。
- 索引(index) 一个index可以理解成一个关系型数据库。
- 类型(type) 一种type就像一类表。如用户表、充值表等。
- 注意:
- ES 5.x中一个index可以有多种type。
- ES 6.x中一个index只能有一种type。
- ES 7.x以后,将移除type这个概念。
- 映射(mapping) mapping定义了每个字段的类型、字段所使用的分词器等。相当于关系型数据库中的表结构。
- 文档(document) 一个document相当于关系型数据库中的一行row。
- 字段(field) 文档中的一个字段field就相当于关系型数据库中的一列column。
- 分片(shard)和副本(replica)
- 副本是分片的副本。分片有主分片(primary Shard)和副本分片(replica Shard)之分。一个Index数据在物理上被分布在多个主分片中,每个主分片只存放部分数据。每个主分片可以有多个副本,叫副本分片,是主分片的复制。
- 注意:
- 一个document只存在于某个primary shard以及其对应的replica shard上,不会在多个primary shard上。
- 默认情况下,一个index有5个主分片,每个主分片都有一个副本。这样,整个index就有10个分片,要保证整个集群健康,就需要至少两个节点。因为主分片和副本分片不能在同一台机器上。
- 主分片的数量在创建索引后不能再被修改,副本分片的数量可以改变。
- 每个分片shard都是一个完整的lucene实例,有完整创建索引和处理请求的能力。
- 分片有助于es水平扩展。副本一般用来容错,相当于主分片的HA。除此之外,分片和副本还有助于提高并行搜索的性能,因为可以在所有副本上并行执行搜索。
- 分段(segment) 一个shard包含多个segment,每个segment都是倒排索引。
- segment查询 查询时,每个shard会把所有segment结果汇总作为shard的结果返回。
- segment生成
- 写入ES时,一方面会把数据写入到内存Buffer缓冲,为防止Buffer中数据丢失,另一方面会同时把数据写入到translog日志文件。
- 每隔1秒钟,数据从Buffer被写入到segment file,直接写入os cache。
- os cache segment file被打开供search使用,然后内存Buffer被清空。
- 随着时间推移,os cache中segment file越来越多,translog日志文件也越来越大,当translog日志文件大到一定程度的时候就会触发flush操作。
- flush操作将os cache中segment file持久化到磁盘并删除translog日志文件。
- 当segment增多到一定程度,会触发ES合并segment,将许多小的segment合并成大segment并删除小segment,提高查询性能。
问题
Kibana中创建索引 关于选择时间的问题。切记不要用long类型,这会导致es无法识别其类型 搭建日志系统中 创建索引时指定时间字段和类型
- 第一种方式
PUT localhost:9200/{date-test//这里为索引名}
{
"mappings": {
"test": {//这里为type
"properties": {
"requestTime": {//指定时间字段
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"//指定格式
},
"timestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
localhost:9200/date_test/test/_mapping
- 根据模板创建
//todo
- 根据条件删除文档
http://172.25.35.230:9200/mobile-requestpagelog/_delete_by_query
body:
{
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"lte": 1559318400000
}
}
},
{
"term": {
"eventId": {
"value": "h5_request"
}
}
}
]
}
}
}
result: