ES
节点客户端(Node client)
节点客户端作为一个非数据节点加入到本地集群中。换句话说,它本身不保存任何数据,但是它知道数据在集群中的哪个节点中,并且可以把请求转发到正确的节点。
传输客户端(Transport client)
轻量级的传输客户端可以将请求发送到远程集群。它本身不加入集群,但是它可以将请求转发到集群中的一个节点上。
ElasticSearch:
功能:搜索引擎;
底层:基于lucence;
特点:分布式、实时性;
语言:java
提供:Restful API;
使用方式:JSON;
名词解释:
索引(index):一个index相当于一个数据库
类型: 每个index中存放的许多类型相当于表
每个类型中存放的每个“文档”相当于表中的每个记录
cluster health:
ES集群监控信息中,status返回内容包括:red(有主分片没能正常运行),yellow(所有的主分片都正常运行,有的负分片没正常运行),green(所有的主分片和副分片都正常运行)
简单地执行 一个 HTTP GET 请求并指定文档的地址——索引库、类型和ID。 使用这三个信息可以返回原始的 JSON 文档:
- 安装elasticsearch与kibana:
- 下载es:https://www.elastic.co/cn/downloads/past-releases#elasticsearch (有很多历史版本,可以下载,本人使用的7.1)
- 解压: tar -cxvf 【你的es.tar文件】
- 修改配置:cd elasticsearch文件夹中的config文件夹:
vim elasticsearch.yml
集群的名称 各个节点一样
cluster.name: 你的集群名字
节点名称,各个节点不一样
node.name: 当前节点的名字
path.data: 你的ES文件夹/data
path.logs: 你的ES文件夹/logs
network.host: 0.0.0.0
设置http跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
在主节点挂了之后,是否竞争主节点
node.master: true
是否为数据节点
node.data: true
集群主要的设置,三个节点的ip地址,要保证各个节点能ping通
discovery.seed_hosts: [“192.168.240.52”, “192.168.240.53”, “192.168.240.54”]
主节点设置
cluster.initial_master_nodes: [“node1”]
bootstrap.system_call_filter: false
xpack.ml.enabled: false
-
启动:
./bin/elasticsearch
访问 http://localhost:9200 出现以下内容为启动成功
-
安装kibana
下载地址:https://www.elastic.co/cn/downloads/past-releases#kibana
启动:./bin/kibana
http://localhost:5601/app/kibana# -
Basic concept of elasticsearch
官方文档:https://www.elastic.co/guide/index.html -
Cluster:集群,多个nodes(servers)的集合,集群是通过唯一的集群名来标识的。
-
Node:
-
Index:索引(数据库),是文档(表)的集合
-
Type(6.0.0版本以上弃用):允许往一个索引中创建不同类型的document
-
Document:Document的格式是JSON(JavaScript Object Notation)
-
Shards&Replicas:一个索引能存储大量的数据可能会超过单节点机器的hardware limits,而且会降低搜索的速度,因此es提供了分片机制。
-
The REST API
Elasticsearch提供了丰富的REST API,可以与集群交互,包括:
- 查看和管理集群的状态,节点,index health,统计分析;
- 对索引的CURD(create, update, read, delete)和search操作。
- 执行高级搜索操作,包括分页,排序,过滤,scripting, 聚合等;
3.1 create an Index
创建一个名字叫"duck"的索引:
PUT /duck?pretty
GET /_cat/indices?v //列出所有索引
3.2 Index and Query a Document
现在我们把一些东西放进刚才创建的"duck"索引中。
//1.在索引duck中创建一个id=1的document
PUT /duck/doc/1?pretty
{
“name”: “John Doe”
}
//2. 在索引duck中再创建一个id=2的document
PUT /duck/doc/2?pretty
{
“name”: “azhuang”
}
//当然id不是必须的,如果不写,elasticsearch会生成一个随机id给你创建的document,但是当不写id的时候,需要用post方法
POST /duck/doc?pretty
{
“name”: “吴彦祖”
}
GET /duck/doc/1?pretty
//查询文档的返回如下所示,其中found表示查询结果,_source为full JSON document
3.3 Delete an index
DELETE /duck?pretty
3.4 Modify Your Data
//修改了刚才id=1的document,执行直接就修改成功啦
PUT /duck/doc/1?pretty
{
“name”: “Jane Doe”
}
3.5 Update Documents
POST /duck/doc/1/_update?pretty
{
“doc”:{
“name”: “Jane Doe”,
“age”: 20
}
}
//也可以用简单的scripts执行
POST /duck/doc/1/_update?pretty
{
“script”: “ctx._source.age += 5”
}
3.6 Batch Processing
//As a quick example, the following call indexes two documents (ID 1 - John Doe and ID 2 - Jane Doe) in one bulk operation:
POST /duck/doc/_bulk?pretty
{“index”:{“_id”:“1”}}
{“name”: “John Doe” }
{“index”:{“_id”:“2”}}
{“name”: “Jane Doe” }
//This example updates the first document (ID of 1) and then deletes the second document (ID of 2) in one bulk operation:
POST /duck/doc/_bulk?pretty
{“update”:{“_id”:“1”}}
{“doc”: { “name”: “John Doe becomes Jane Doe” } }
{“delete”:{“_id”:“2”}}
3.7 The search API
GET /duck/_search?q=*&sort=account_number:asc&pretty
搜索语法:
检索语句:
检索所有字段:GET /索引名/类型/_search,返回结果放在数组hits中,一次搜索默认返回10条结果
附加查询条件:
使用查询表达式:
查询在 name 字段中包含 john 并且在 tweet 字段中包含 mary 的文档
- 前缀表示必须与查询条件匹配。类似地, - 前缀表示一定不与查询条件匹配。
更复杂的查询:
下面的查询针对tweents类型,并使用以下的条件:
name 字段中包含 mary 或者 john
date 值大于 2014-09-10
_all 字段包含 aggregations 或者 geo
以上为轻量级搜索,下面为使用json进行搜索,搜索姓氏为 Smith 的员工,但这次我们只需要年龄大于 30 的。查询需要稍作调整,使用过滤器 filter ,它支持高效地执行一个结构化查询。
这部分是一个 range 过滤器 , 它能找到年龄大于 30 的文档,其中 gt 表示_大于_(great than)。
全文搜索:
搜索下所有喜欢攀岩(rock climbing)的员工:
Elasticsearch 默认按照相关性得分排序,即每个文档跟查询的匹配程度。第一个最高得分的结果很明显:John Smith 的 about 属性清楚地写着 “rock climbing” 。
短语搜索
高亮搜索
聚合(aggregations):
比sql中的group by更强大。
eg: 挖掘出员工最受欢迎的爱好:
可以看到,两位员工对音乐感兴趣,一位对林业感兴趣,一位对运动感兴趣。这些聚合的结果数据并非预先统计,而是根据匹配当前查询的文档即时生成的。如果想知道叫 Smith 的员工中最受欢迎的兴趣爱好,可以直接构造一个组合查询:
查询特定兴趣爱好员工的平均年龄:
创建一个名为blogs的索引:
创建了3个主分片(shard),每一个主分片有一个副本(replica)
figure 1. 拥有一个索引的单节点集群
添加故障转移:
当集群中只有一个节点在运行时,意味着会有一个单点故障问题——没有冗余。 幸运的是,我们只需再启动一个节点即可防止数据丢失。
-
springboot集成elasticsearch:
-
ELK
Logstash:
集中、转换和存储你的数据,是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储。