本章内容概述
1、Kibana可视化界面介绍
2、Kibana的安装和配置
3、Kibana增删改查文档
1、Kibana可视化界面介绍
Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。
你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。
你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。
Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询
的变化。
2、Kibana的安装和配置
1、通过ElasticSearch官网网站下载最新版本的Kibana
网址: https://www.elastic.co/cn/downloads/
目前最新版是2019年4月11日发布的7.0.0,选择Linux版本下载【Kibana版本最好和ElasticSearch一致】
2、上传Kibana到Linux的usr/local目录下
3、解压Kibana到usr/local目录
tar -zxvf kibana-7.0.0-linux-x86_64.tar.gz
4、打开安装目录下的config文件夹,修改kibana.yml
vim kibana.yml
5、去除Kibana的某些注释
# 将默认配置改成如下:
server.port: 5601
server.host: "192.168.34.64"
elasticsearch.hosts: ["http:// 192.168.34.64:9200"]
以上三条代码的作用分别为:
Kibana端口号
Kibana主机地址
Kibana访问ElasticSearch的地址
6、启动Kibana
进入安装目录的bin目录,然后./kibana
后台启动 nohup kibana &
访问http://192.168.34.64:5601/app/kibana
3、Kibana增删改查文档
3.1 让我们建立一个员工目录
假设我们刚好在newcapec工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用
于实时协同工作,所以它有以下不同的需求:
1.数据能够包含多个值的标签、数字和纯文本。
2.检索任何员工的所有信息。
3.支持结构化搜索,例如查找30岁以上的员工。
4.支持简单的全文搜索和更复杂的短语(phrase)搜索
5.高亮搜索结果中的关键字
6.能够利用图表管理分析这些数据
3.2 索引员工文档
我们首先要做的是存储员工数据,每个文档代表一个员工。在Elasticsearch中存储数据的行为就叫做索引(indexing),不过在
索引之前,我们需要明确数据应该存储在哪里。
在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统
关系型数据库:
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多
个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
关于索引的异议: 参考3.3
所以为了创建员工目录,我们将进行如下操作:
1. 为每个员工的文档(document)建立索引,每个文档包含了相应员工的所有信息。
2. 每个文档的类型为employee。
3. employee类型归属于索引newcapec。
4. newcapec索引存储在Elasticsearch集群中。
数据库步骤和Elasticsearch对比:
mysql --> newcapec数据库 --> employee表 --> 数据行 -->id/name等字段
Elasticsearch --> 索引(Index) --> 类型(type) --> 文档(Docments) -->name等字段
我们可以根据上面的对比一步步实现:
1. 创建索引
PUT /newcapec 这种方式创建出来的采用了默认配置的分片和备份。
分片及备份见:1_ElasticSearch基础知识.md 1.4小节
获取索引默认配置:
GET /索引名/_settings
如果想要自己设置分片和备份数,在创建索引的时候直接指定:
PUT /索引名
{
"settings":{
"index":{
"number_of_shards": "数值",
"number_of_replicas": "数值"
}
}
}
2. 查询索引
获取单个索引:
GET /索引名
获取全部索引:
GET
3. 删除索引 DELETE /newcapec
4. 添加文档 PUT /索引名称/类型/id
注:id可以认为相当于主键
PUT /newcapec/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
我们看到path:/newcapec/employee/1包含三部分信息:
如果不想指定ID,可以让ElasticSearch自动生成,但是不能用PUT,而是需要使用POST
POST /newcapec/employee/
{
"first_name" : "Jek",
"last_name" : "Kba",
"age" : 21,
"about" : "I love to go rock climbing",
"interests": [ "music" ]
}
5. 查询文档
GET /newcapec/employee/id
以上查询显示的是所有字段,如果想要显示指定字段,可以通过_source来做条件:
GET /newcapec/employee/id?_source=字段1,字段2...
注:字段名不要添加任何引号
6. 修改文档
和添加操作类似,只是改完之后再执行,相当于把之前的覆盖
另外一种方式:
POST /索引名/类型/id/_update
{
"doc":{
"age":30
}
}
7. 删除文档 DELETE /newcapec/employee/id
接下来,让我们在目录中加入更多员工信息:
PUT /newcapec/employee/2
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
PUT /newcapec/employee/3
{
"first_name" : "Douglas",
"last_name" : "Fir",
"age" : 35,
"about": "I like to build cabinets",
"interests": [ "forestry" ]
}
8. 批量获取文档
GET /_mget
{
"docs":[
{
"_index":"newcapec",
"_type":"employee",
"_id":1
},
{
"_index":"newcapec",
"_type":"employee",
"_id":3
}
]
}
还可以指定每个要具体获取的字段:
GET /_mget
{
"docs":[
{
"_index":"newcapec",
"_type":"employee",
"_id":1,
"_source":["last_name","age"]
},
{
"_index":"newcapec",
"_type":"employee",
"_id":3,
"_source":["last_name","about","interests"]
}
]
}
同一索引下的相同类型可以简写:
GET /newcapec/employee/_mget
{
"ids":["1","2"]
}
9. 使用Bulk API 实现批量操作
引入批量操作bulk,提高工作效率,你想啊,一批一批添加与一条一条添加,谁快?
bulk API可以帮助我们同时执行多个请求
bulk的格式:
action:index/create/update/delete
metadata:_index,_type,_id
request body:_source (删除操作不需要加request body)
{ action: { metadata }}
{ request body }
批量添加案例:
POST /libary/books/_bulk
{"index":{"_id":1}}
{"title":"java基础语法","price":35}
{"index":{"_id":2}}
{"title":"HTLM5从入门到精通","price":85}
{"index":{"_id":3}}
{"title":"PHP从入门到放弃","price":55}
{"index":{"_id":4}}
{"title":"Spingboot","price":100}
批量删除案例:
POST /libary/books/_bulk
{"delete":{"_id":1}}
{"delete":{"_id":3}}
批量更新案例:
POST /libary/books/_bulk
{"update":{"_id":2}}
{"doc":{"price":99}}
{"update":{"_id":4}}
{"doc":{"price":66,"title":"Spingboot综合案例"}}
注:以上操作可以混搭使用
create 和index的区别:如果数据存在,使用create操作失败,会提示文档已经存在,使用index则可以成功执行。
bulk一次最大处理多少数据量?
bulk会把将要处理的数据载入内存中,所以数据量是有限制的,最佳的数据量不是一个确定的数值,它取决于你的硬件,
你的文档大小以及复杂性,你的索引以及搜索的负载。
一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5-15MB,默认不能超过100M,可以
在es的配置文件(即$ES_HOME下的config下的elasticsearch.yml)中。
3.3 「索引」含义的区分
你可能已经注意到索引(index)这个词在Elasticsearch中有着不同的含义,所以有必要在此做一下区分:
1. 索引(名词) 如上文所述,一个索引(index)就像是传统关系数据库中的数据库,它是相关文档存储的地方,index的复数
是indices 或indexes。
2. 索引(动词) 「索引一个文档」表示把一个文档存储到索引(名词)里,以便它可以被检索或者查询。这很像SQL中的
INSERT关键字,差别是,如果文档已经存在,新的文档将覆盖旧的文档。
3. 倒排索引 传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索
引(inverted index)的数据结构来达到相同目的。
默认情况下,文档中的所有字段都会被索引(拥有一个倒排索引),只有这样他们才是可被搜索的。
个索引(index)就像是传统关系数据库中的数据库,它是相关文档存储的地方,index的复数
是indices 或indexes。
2. 索引(动词) 「索引一个文档」表示把一个文档存储到索引(名词)里,以便它可以被检索或者查询。这很像SQL中的
INSERT关键字,差别是,如果文档已经存在,新的文档将覆盖旧的文档。
3. 倒排索引 传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索
引(inverted index)的数据结构来达到相同目的。
默认情况下,文档中的所有字段都会被索引(拥有一个倒排索引),只有这样他们才是可被搜索的。
我们将会在倒排索引章节中更详细的讨论。