Elasticsearch
Elasticsearch
要争气
人生来平凡,因奋斗进取而不凡。
展开
-
Elasticsearch API
第一部分1 查看集群有哪些节点运行get _cat/nodes2 查看索引的mappings和settingsget goods3 查看索引中的文档数get goods/_count4 集群健康状态get _cluster/health5 集群节点信息get _cat/nodes6 集群分片信息get _cat/shards7 创建索引 index方式7.1 如果没指定ID,则自动生成post goods/_doc{ "sku":"G10001",原创 2021-04-01 17:31:49 · 534 阅读 · 0 评论 -
ElasticSearch之mapping分词器选择
前言市场上分词器,眼花缭乱,让你一脸懵逼。Standard: 单字切分法,一个字切分成一个词。CJKAnalyzer: 二元切分法, 把相邻的两个字, 作为一个词.SmartChineseAnalyzer: 对中文支持较好, 但是扩展性差, 针对扩展词库、停用词均不好处理.paoding`: 庖丁解牛分词器, 没有持续更新, 只支持到lucene3.0。mmseg4`: 支持Lucene4.10, 且在github中有持续更新, 使用的是mmseg算法.Whitespace分词器:转载 2021-07-29 17:31:51 · 701 阅读 · 0 评论 -
图解elasticsearch数据写入流程(包含对refresh、fsync、flush操作的理解)
elasticsearch写入数据时涉及到的核心概念讲解:segment file: 存储倒排索引的文件,每个segment本质上就是一个倒排索引,每秒都会生成一个segment文件,当文件过多时es会自动进行segment merge(合并文件),合并时会同时将已经标注删除的文档物理删除; commit point(重点理解): 记录当前所有可用的segment,每个commit point都会维护一个.del文件(es删除数据本质是不属于物理删除),当es做删改操作时首先会在.del文件中声明某个转载 2021-04-24 09:05:46 · 541 阅读 · 0 评论 -
Elasticsearch 文档到分片路由算法 查询文档到分片路由信息
根据文档ID计算HASH值,然后对主分片数量进行取模,得到对应的主分片,也可以使用指定参数,进行HASH值的计算,让特定的文档落在特定的分片上。# 添加测试文档PUT /nba/_doc/1{ "name": "哈登", "team_name": "⽕箭", "position": "得分后卫", "play_year": "10", "jerse_no": "13"}# 查询文档对应的分片GET /nba/_search_shards?routing=1{原创 2021-04-23 18:19:55 · 248 阅读 · 0 评论 -
【分布式搜索引擎】Elasticsearch写入和读取数据过程
一、Elasticsearch写人数据的过程1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)2)coordinating node,对document进行路由,将请求转发给对应的node(有primary shard)3)实际的node上的primary shard处理请求,然后将数据同步到replica node4)coordinating node,如果发现primary node和所有replica node都搞定之后,就返回响应结果给客转载 2021-04-23 16:58:58 · 578 阅读 · 0 评论 -
Elasticsearch 使用_cat命令查看帮助命令信息
get _cat使用_catkey查看帮助命令:=^.^=/_cat/allocation/_cat/shards/_cat/shards/{index}/_cat/master/_cat/nodes/_cat/tasks/_cat/indices/_cat/indices/{index}/_cat/segments/_cat/segments/{index}/_cat/count/_cat/count/{index}/_cat/recovery/_cat/re..原创 2021-04-23 16:05:00 · 718 阅读 · 0 评论 -
Elasticsearch分片管理 主分片在不同的节点上迁移
ES是通过分片将一个索引数据分布在不同的数据节点上,分片分为主分片和副本分片,通过扩展主分片可以实现数据横向扩展的目标。副本分片是主分片的数据备份,主要是实现数据的高可用,增加副本分片数量在一定程度上提升数据读取的吞吐量。分片分布在哪个节点上是ES自己管理的,可以使用集群的reroute命令把索引的某个主分片从一个节点移动到另外一个节点,相同的主分片和副本分片不能分布在同一个节点上,索引的主分片数量一旦设定不允许修改,如果修改则需要重建索引,副本分片的数量运行动态修改。可以使用如下方式,将索引wba1的原创 2021-04-23 15:38:25 · 1461 阅读 · 0 评论 -
Elasticsearch根据输入内容给出自动建议和自动补全
自动建议:包括按词项给出建议和按语句给出建议,按词项给出建议包括三种类型:missing 当搜索内容不存在给出建议;popular 建议文档出现的频率比搜索内容高的词;always 总是给出建议。自动补全:需要提前在Mapping设置字段类型为completion,根据搜索的内容给出自动补全信息。1 按词项给出建议# 按每个词项给出查询建议 text会被分词,每个词项,当搜索内容不存在时给出建议POST /nba_latest/_search{ "suggest": { .原创 2021-04-21 16:43:42 · 329 阅读 · 0 评论 -
Elasticsearch高亮查询
# 高亮显示匹配的内容POST /nba_latest/_search{ "query": { "match": { "displayNameEn": "james" } }, "highlight": { "fields": { "displayNameEn": {} } }}# 用指定的标签高亮显示匹配的内容 post /nba_latest/_search{ "query": { "match": {.原创 2021-04-21 15:42:02 · 417 阅读 · 0 评论 -
Elasticsearch执行Refresh操作时间间隔配置
将文档写入ES时,文档会被先写入index buffer中,当执行refresh之后,文档会被写入segment,此时可以进行读取,默认执行refresh时间间隔是1s,可以通过参数修改或者关闭refresh操作。# 设置refresh间隔30sput star/_settings{ "index":{ "refresh_interval":"30s" }}# 关闭refresh 新写入文档无法通过_search读取put star/_settings{ "inde原创 2021-04-21 15:17:35 · 1485 阅读 · 0 评论 -
Elasticsearch的Refresh和Flush执行过程
整体流程:数据写入buffer缓冲和translog日志文件中。 当你写一条数据document的时候,一方面写入到mem buffer缓冲中,一方面同时写入到translog日志文件中。 buffer满了或者每隔1秒(可配),refresh将mem buffer中的数据生成index segment文件并写入os cache,此时index segment可被打开以供search查询读取,这样文档就可以被搜索到了(注意,此时文档还没有写到磁盘上);然后清空mem buffer供后续使用。可见,..转载 2021-04-21 15:11:54 · 592 阅读 · 0 评论 -
Elasticsearch重建索引
当需要对索引的培训信息进行修改时,比如修改字段的类型,需要重建索引。重建索引的过程:1 给原索引创建一个别名,外界通过别名访问;2 创建新的索引,其结构复制原索引,在此基础上根据需求修改索引的配置信息;3 使用reindex api把旧索引的数据复制到新的索引中;4 更改外界访问索引时用的别名绑定的索引,由旧索引改为新索引;5 删除旧索引;以下是对索引nba进行重建索引的示例:# 给要重建的索引创建一个别名nba_latest,供外界访问post _aliases{原创 2021-04-21 12:01:16 · 338 阅读 · 0 评论 -
Elasticsearch 别名
别名,相当于索引的软连接,一个索引可以由多个别名,一个别名也可以指向多个索引。# 查询nba索引的别名GET /nba/_alias# 查询所有索的别名GET /_alias# 给索引nba新增别名POST /_aliases{ "actions": [ { "add": { "index": "nba", "alias": "nba_v1.0" } } ]}# 给索引nba新增别名POST /nb原创 2021-04-21 11:22:14 · 156 阅读 · 0 评论 -
Elasticsearch query_string单字符串多字段查询
# 查询英文姓名包括 james 或 curry的文档POST /nba/_search{ "query": { "query_string": { "default_field": "displayNameEn", "query": "james OR curry" } }, "size": 100}# 查询英文姓名包括james和harden的文档POST /nba/_search{ "query": { "query_st.原创 2021-04-21 10:29:43 · 724 阅读 · 0 评论 -
Elasticsearch聚合分析
# 求Rockets队的平均年龄post nba/_search{ "query": { "term": { "teamNameEn": { "value": "Rockets" } } }, "aggs": { "avgAge": { "avg": { "field": "age" } } }, "size": 0}#求出打球时间不为空的球员数量POST /nb.原创 2021-04-21 10:07:19 · 163 阅读 · 0 评论 -
Elasticsearch排序
# 按打球时间倒序排列post nba/_search{ "query": { "match": { "teamNameEn": "Rockets" } }, "sort": [ { "playYear": { "order": "desc" } } ]}# 按打球时间倒序,身高升序排列post nba/_search{ "query": { "match": { "t.原创 2021-04-20 16:31:57 · 115 阅读 · 0 评论 -
Elasticsearch布尔查询
must 必须匹配,会进行相关性打分;filter 必须匹配,不会进行相关性打分;should 应该匹配,默认不做必须限制,可以使用minimum_should_match参数配置,should数组中的条件必须满足;# must必须匹配,会进行相关性打分POST /nba/_search{ "query": { "bool": { "must": [ { "match": { "displayName...原创 2021-04-20 16:19:14 · 119 阅读 · 0 评论 -
Elasticsearch范围查询
#查询球龄2-10年POST nba/_search{ "query": { "range": { "playYear": { "gte": 2, "lte": 10 } } }}#查询生日在1999-2022年的球衣,format格式化参数中的日期POST nba/_search{ "query": { "range": { "birthDay": { "gte": "01/01/1999", "lte": "2022", "format": "dd/MM/yy.原创 2021-04-20 15:49:30 · 575 阅读 · 0 评论 -
Elasticsearch基本查询
# 词项搜索 精准匹配适合keyword 数值 日期等类型POST nba/_search{ "query": { "term": { "jerseyNo": "23" } }, "from": 0, "size":3}#查找某个字段的值非空的文档 POST nba/_search{ "query": { "exists": { "field": "teamNameEn" } }}#前缀匹配POST nba/_search{ "query": { "pr.原创 2021-04-20 15:16:40 · 65 阅读 · 0 评论 -
搜索的简单使用
1 初始化测试数据delete nbaput nba{"mappings": { "properties": { "name": { "type": "text" }, "team_name": { "type": "text" }, "position": { "type": "text" }, "play_year": { "type": "long" }, "jerse_no": { "type": "keyword" } } }}put nba原创 2021-04-18 19:56:52 · 70 阅读 · 0 评论 -
ELK+Filebeat+Kafka构建Nginx日志分析平台
1 软件版本drwxr-xr-x. 11 tech root 205 4月 15 16:19 elasticsearch-7.1.0drwxr-xr-x. 6 tech root 224 4月 15 16:07 filebeat-7.1.0drwxr-xr-x. 7 root root 156 4月 15 16:09 kafka_2.13-2.7.0drwxr-xr-x. 13 tech root 246 4月 12 19:25 kibana-7.1.0-linux原创 2021-04-16 10:18:06 · 281 阅读 · 0 评论 -
使用Linux 的nc命令导入服务的日志数据到Logstash
nc是一个linux命令,它可以作为client发起tcp连接请求,可以使用logstash的tcp插件,开启一个端口,使用tcp的方式采集数据,nc作为tcp客户端,把日志数据导入到logstash。配置并启动logstash,监听5514端口# Sample Logstash configuration for creating a simple# Beats -> Logstash -> Elasticsearch pipeline.input { tcp {原创 2021-04-13 16:24:14 · 536 阅读 · 0 评论 -
ELK+Filebeat+Kafka+Zookeeper构建大数据日志分析平台
架构运行过程:在需要采集日志的服务上部署filebeat,filebeat将采集到的数据output到kafka,logstash在kafka上消费数据进行转换,output数据到elasticsearch,进行数据搜索和分析,kibana对elasticsearch中数据做可视化。...原创 2021-04-13 11:11:29 · 323 阅读 · 1 评论 -
Filebeat 轻量级日志采集器
Filebeat是beats的一种产品,是一款轻量级的日志采集器,它比logstash消耗资源少很多,通常在需要日志采集的服务上部署一个filebeat进行日志数据采集。filebeat可以配置从日志文件、redis、tcp等多种数据源输入采集数据,输出到ogstash、elasticsearch、redis、kafka、文件等多种介质。filebeat采集的数据,以及一些其他参数,会封装成一个json对象结构进行output,可以配置添加或移出字段。下载filebeat:curl -o fil.原创 2021-04-11 17:21:10 · 378 阅读 · 0 评论 -
使用MetricBeats采集Mysql服务的指标数据在Kibana上展示
首先激活Elasticsearch、Kibana和Mysql的Module指标对象;接下来把Kibana的仪表盘数据加载到啊Elasticsearch;最后启动Kibana;操作过程如下:a)metricbeats文件目录:[root@localhost metricbeat-7.1.0-linux-x86_64]# ll总用量 99116drwxr-x---. 2 root root 23 4月 7 09:58 data-rw-r--r--. 1 root .原创 2021-04-07 11:14:43 · 635 阅读 · 0 评论 -
使用Logstash的JDB插件从Mysql导入数据到ES增量更新
在导入前先启动ES,然后在Logstash的配置文件中使用jdbc插件配置如下信息:1 mysql数据库连接信息;2 定义表中追踪字段,为数值或日期类型,每次修改数据或者插入数据则需要增加追踪字段的值;3 定义更新成功时追踪字段的值保存到的文件名称;4 写查询SQL,条件是大于追踪字段的值;5 ES会根据cron定时去采集上一步查询的数据;接下来使用output插件,把采集的数据输出到ES中。具体配置如下:logstash的配置文件input { jdbc .原创 2021-04-06 11:41:13 · 371 阅读 · 0 评论 -
ES生命周期管理 配置ilm策略
ES声明周期通常分为四个阶段,hot阶段:索引有大量的写入和读取;warm阶段:索引没有写入,有大量的读取;code阶段:索引没有写入,有少量读取;delete阶段:删除索引或者关闭索引。可以使用iml对索引进行生命周期管理,具体如下:删除所有索引delete *查看节点get _cat/nodes查看节点属性信息get _cat/nodeattrs# 设置 1秒刷新1次,生产环境10分种刷新一次PUT _cluster/settings{ "persistent":原创 2021-04-01 17:13:55 · 1826 阅读 · 0 评论 -
索引管理API
1 open/close index 打开和关闭索引,不用的索引关闭索引后可以减少资源占用;2 shrink index 缩小索引的主分片数;3 spilit index 扩大索引的主分片数;4 rollover index 为索引动态生成新的索引,像log4j的动态生成日志文件。# 删除索引DELETE test#查看索引是否存在HEAD test#创建索引PUT test/_doc/3{ "key":"value"}#关闭索引POST /test/_clo原创 2021-04-01 15:40:01 · 73 阅读 · 0 评论 -
Hot & Warm 架构与 Shard Filtering
# 标记一个 Hot 节点bin/elasticsearch -E node.name=hotnode -E cluster.name=geektime -E path.data=hot_data -E node.attr.my_node_type=hot# 标记一个 warm 节点bin/elasticsearch -E node.name=warmnode -E cluster.name=geektime -E path.data=warm_data -E node.attr.my_node..原创 2021-04-01 14:31:57 · 183 阅读 · 0 评论 -
ElasticSearch搜索倒排索引及聚合排序正排索引DocValues 和 Fielddata
ElasticSearch使用的是倒排索引,既然是倒排索引,对应的肯定有正向索引,我们先来把这两个概念弄清楚。1、索引概念1.1 正向索引正排索引表是以文档的ID为关键字,表中记录文档中每个字段的值信息,主要场景是通过查询id来把整条文档拿出来,一般mysql关系型数据库是这种方式来查询的正排表结构如下图所示这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护,当对ID查询的时候检索效率会很高。1.2 倒排索引倒排索引表以字或词为关键字进行索引,表中关键.转载 2021-04-01 09:52:48 · 736 阅读 · 0 评论 -
Elasticsearch 查询去重后的数量
去重后的数量,相当于distinct count,可以在聚合的时候使用cardinality关键字查询1 初始化数据DELETE /employeesPUT /employees/{ "mappings" : { "properties" : { "age" : { "type" : "integer" }, "gender" : { "type" : "keyword" }原创 2021-03-19 11:24:57 · 1086 阅读 · 0 评论 -
Elasticsearch 按词项term查询和match查询
按词项(term)查询,查询参数不会进行分词,且作为一个整体,由于文档索引时候进行了分词,有可能查询不到。如果使用词项查询keyword字段,keyword字段使用keyword分词器,分词前后内容一致,如果用索引时候内容查询key查询到。1 初始化数据DELETE testPUT test/_doc/1{ "content":"Hello World"}2 match查询 参数会分词 索引会分词 可以查询到POST test/_search{ "profile": "true原创 2021-03-19 10:59:14 · 272 阅读 · 0 评论 -
ES数据建模最佳实践
优先考虑普通对象,其次考虑Nested嵌套对象,再考虑关联对象。 避免过多的字段,字段过多不易维护,且影响集群性能。可以用Nested嵌套对象结合KEY/VAL方式把横向存储的数据转为纵向存储。 避免前缀正则匹配,严重影响性能。可以把TEXT转为对象的方式存储,便于多种方式检索。 避免NULL_VALUE,影响聚合结果,通常再MAPPING中给NULL值设置默认值1。 MAPPING设置需要谨慎,需要考虑功能以及性能,功能:检索、聚合排序;性能:存储消耗、内存消耗、检索性能。此外,MAPPING需要原创 2021-03-09 14:28:34 · 403 阅读 · 0 评论 -
ES字段数据建模
数据建模是建立数据模型的过程,数据模型是指对现实世界的抽象,其过程包括:概念模型->逻辑模型->数据模型。ES字段数据建模需要考虑以下几个角度:字段类型、是否索引、是否聚合和排序、是否额外存储等。在Mapping中进行设置,index设置是否索引,doc_values设置是否进行聚合和排序(如果字段只是进行聚合,可以用norms设置节约存储空间),enable设置是否设置字段同时不索引、不聚合和排序,store设置字段是否需要额外存储,对于当source较大时候,需要关闭source则在sour原创 2021-03-08 13:50:06 · 298 阅读 · 0 评论 -
pipeline 和 painless对文档数据进行预处理
在es中每个节点默认都是ingest节点,可以对即将索引的文档数据进行预处理,比如修改文档字段的默认值、添加新的字段、字符串转数组等,es可以通过pipeline或者painless方式对数据进行预处理。Pipeline:数据管道,对于进入管道的数据进行有序的加工,它由一系列的processer处理器组成,每个处理器都可以单独做预处理,在es中内置了一系列的处理器,也可以扩展,pipeline的使用需要先在ES订阅pipeline,在更新文档或者重建索引的时候指定pipeline;painless脚本,在数原创 2021-03-03 16:17:59 · 384 阅读 · 1 评论 -
Reindex API 详解
在开始讲解具体的API的时候,有一点必须知道,Reindex不会尝试设置目标索引。它不会复制源索引的设置。您应该在运行_reindex操作之前设置目标索引,包括设置映射,分片计数,副本等。当然,最常见的做法不会是手动的设置索引。而是使用索引模版。只要索引模版的匹配形式可以匹配上源索引和目标索引,则我们不需要去考虑索引配置的问题,模版会为我们解决对应的问题。另外,下文只针对5.x及以后版本。基本操作对于reindexAPI来说,最常见的,就是简单的把documents从一个index复制到另一个.转载 2021-02-24 17:29:18 · 544 阅读 · 0 评论 -
Elasticsearch聚合分析的精准性 shard_size设置
衡量分布式统计算法的指标有3个:数据量、实时性和精准性。任何算法只能满足其中2个指标,ES为了数据的实时性,降低了聚合分析的精准性。由于ES的数据是分布在各个分片上的,coordinating节点无法获取数据的概览,ES提供了一个参数返回遗漏的term分组上的文档数,这个值越小精准度越高,为0表示结果是精准的。为了让统计数据是精准的,有两种方式:1 当数据量较少时,只设置一个分片;2 增加shard_size参数,直到term分组遗漏文档数为0,表示聚合结果是精准的。初始化数据DELETE my_f原创 2021-02-07 15:35:23 · 3302 阅读 · 0 评论 -
Elasticsearch聚合分析 作用范围(聚合前筛选条件、聚合后筛选条件)及对聚合结果指定排序方式
初始化数据DELETE /employeesPUT /employees/{ "mappings" : { "properties" : { "age" : { "type" : "integer" }, "gender" : { "type" : "keyword" }, "job" : { "type" : "text", .原创 2021-02-02 11:33:51 · 877 阅读 · 0 评论 -
Elasticsearch聚合分析 Pipeline聚合分析
初始化数据DELETE employeesPUT /employees/_bulk{ "index" : { "_id" : "1" } }{ "name" : "Emma","age":32,"job":"Product Manager","gender":"female","salary":35000 }{ "index" : { "_id" : "2" } }{ "name" : "Underwood","age":41,"job":"Dev Manager","gender":"m.原创 2021-02-01 17:51:26 · 279 阅读 · 0 评论 -
Elasticsearch Bucket和Metric聚合分析与嵌套聚合
1. 初始化索引DELETE /employeesPUT /employees/{ "mappings" : { "properties" : { "age" : { "type" : "integer" }, "gender" : { "type" : "keyword" }, "job" : { "type" : "text", ...原创 2021-01-19 16:27:25 · 273 阅读 · 0 评论