Awesome Elasticsearch


原文链接: Awesome Elasticsearch

ELK安装笔记

书籍

ELKstack 中文指南

Logstash 最佳实践
Elasticsearch 权威指南(中文版)
Elasticsearch权威指南翻译目录
Elasticsearch Reference 5.3

Databases -> Tables -> Rows -> Columns
Indices -> Types -> Documents -> Fields

beats

Beats插件

blog

邢halo cnblogs合集
dm_vincent
Elastic专栏
ElasticSearch从0到1

Elasticsearch使用备忘
elasticsearch cheatsheet
nginx elasticsearch secure

Elasticsearch 性能优化

tool

ES可视化工具 VUE
The Missing Web UI for Elasticsearch
http://elastic:changeme@139.129.234.31:9200

install by docker

docker run -d --restart=always --name=elasticsearch -p 9200:9200 -v /docker/elastic/search_data:/usr/share/elasticsearch/data elasticsearch -E'network.host=0.0.0.0'

Mapping 相当于定义表结构 show create table
keyword 用于 聚合索引
text 用于文本搜索
string 弃用,用keyword 或 text 代替

terms 聚合(aggregations) 等价 GROUP BY
""aggs": { "all_interests": { "terms": { "field": "interests" } } }

elasticsearch Ingest 节点的处理器,相当于 Logstash 的 filter 插件。事实上其主要处理器就是直接移植了 Logstash 的 filter 代码成 Java 版本

[Elasticsearch] 聚合中的重要概念 - Buckets(桶)及Metrics(指标) 说的通俗点,metric很像SQL中的avg、max、min等方法,而bucket就有点类似group by了

但match和term的含义是不一样的:是否对查询字符串进行分词
match:匹配的时候,会将查询的关键字进行分词,然后根据分词后的结果进行查询。
match_phrase: 为按短语搜索,会分词,但搜索内容紧邻且顺序一致
multi_match: 对多个字段fields进行查询
term:直接使用关键字进行查询,不对关键字进行分词。查询的内容还是分词的

在大部分的使用场景下,应该使用match的用法,因为用户的输入往往是比较模糊、顺序不确定、带有多个条件的查询。

相关概念:

(1)Cluster和Node——Elasticsearch中的Cluster是对外提供搜索服务的集群,组成这个集群的各个节点叫Node.集群Cluster是一组有着相同cluster.name的节点,他们协同工作,互相分享数据,提供了故障转移和扩展的功能。Node又分为IndexNode、DataNode等。节点之间是对等关系的(去中心化),而弱化的Master节点只不过多了维护集群状态的功能。

(2)Shards——Elasticsearch将一个完整的索引分成若干个部分,每个部分就是一个Shards,每个Shard实际上就是一个基于Lucene的索引。Shards的数量一般在索引创建前制定,且索引创建后不能更改。

(3)Replicas——Replics是索引的冗余备份,可用于防止数据丢失或用来做负载均衡。一般地,Elasticsearch会自动对索引请求进行负载均衡。

(4)Recover——在有节点加入或退出集群Cluster或故障节点重新启动时,Elasticsearch会根据机器的负载情况,对索引分片Shards进行重新分配。

(5)River——River是一个运行在Elasticsearch集群内部的插件,主要用来从外部获取以后数据,然后在Elasticsearch里创建索引。常见的有MongoDB、JDBC river Plugin等。

(6)Gateway——是Elasticsearch索引数据快照的存储方式,当Elasticsearch集群关闭再重新启动时,就会从Gateway中读取索引数据快照。Elasticsearch支持多种类型的Gateway,本地文件系统、分布式文件系统、Hadoop的HDFS

(7)Discover.zen——Discover.zen代表Elasticsearch的自动发现节点机制。Zen用来实现节点自动发现和Master节点选举,Master节点负责节点的加入和退出以及分片shard的重新分配。

(8)Transport——Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互的,同时支持HTTP协议(JSON格式)、Thrift、Servlet等传输协议。

(9)Index、Type、Document、Field——Index是数据存储的地方,可以快速高效的堆索引中的数据进行全文索引,类似于RDBMS数据库中的Database;在Index下一般会有多个存储数据的Type,Type类似于Database的table,用来存放具体数据;Document类似于关系数据库的一行数据,在一个Type里的每一个Document都有一个唯一的ID作为区分。

(10)Mapping——Mapping定义索引下的Type的字段处理规则,如索引如何建立、索引数据类型、是否保存原始索引JSON文档,是否需要进行分词处理、如何进行分词处理等。一般地,一个索引文件下能存储不同映像(Mapping)的类型文件(Types).

从图中可以看出,Elasticsearch可以接受来自本机、共享以及云平台上的数据;在Lucene提供的基本功能上,通过构建分布式索引,完成对大数据的索引、搜索等处理。其中,River作为Elasticsearch内部运行的插件,获取其他存储方式的数据到Elasticsearch.Zen用来作为节点自动发现和Master节点选举;EC2(Elastic Copute Cloud)借由Web服务的方式让使用者可以弹性的运行自己的Amazon机器映像,提供可调整的云计算能力。通过提供的Thrift、Memcached、HTTP等方式使用Elasticsearch的API。在顶层,用户可以基于RESTful和客户端的方式通过Elasticsearch API完成数据操作、管理等操作。
RESTful接口URL的格式是?

curl -X ':///?' -d ''

VERB HTTP方法:GET(获取), POST(更新), PUT(创建), HEAD, DELETE(删除)
PROTOCOL: http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
HOST: Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
PORT: Elasticsearch HTTP服务所在的端口,默认为9200
QUERY_STRING: 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
BODY: 一个JSON格式的请求主体(如果请求需要的话)
`