文章目录
前言
第二篇记录了Kibana的安装,这一篇就主要记录下在Kibana下对数据的基本操作,当然在讲之前,我得简单介绍一下ElasticSearch的基本概念以及它的数据结构,然后再讲基本操作。
(由于最近在忙着刷Leetcode,同时这一篇涉及的内容比较多,我得专门专门找本书去看,所以更新得比较慢)
一、ElasticSearch 基本概念
1.1 定义
官网对ElasticSearch的定义是:Elasticsearch is a highly scalable open-source full-text search and analytics engine。直译过来就是,高度可伸缩开源全文搜索分析引擎。这个项目是基于 Apache Lucene 做二次封装,降低了开发以及复杂度,并且性能很好,所以用的人多。
同时它是归类到NoSQL,这里要强调下它的几个概念,包括索引,映射类型(7.0以后只有_doc),文档,字段。如果大家有了解过都知道,跟关系型数据库的结构类比的话,如下:
索引 = 库
映射类型 = 表
文档 = 数据行
字段 = 表中的列(也就是字段,一样的)
1.2 索引和全文搜索
全文搜索,白话一点,就是我存了一大串文本,但我还是能通过文本中的一个个词,把这个文本给查出来。
怎么实现?用倒排索引,基本结构就像下面那样,怎么查一下应该能脑补出来。
关键字怎么来?首先 type=text 的字段,默认都会分词(可以调)。通过分词,这个东西跟分词器有关,可以在建索引的时候配置,除了这个东西,建索引还能定义很多东西,先不展开,后面详谈。
什么时候存?在文档添加的时候,不过不会马上建这个索引,ElasticSearch 默认每1s更新1批数据(index.refresh_interval调)。7.0之后还有个套路提高es性能,有个 search.idel.after配置,用来干啥?就是"after"这么多秒才刷新索引(就是如果不查这个数据,就延后刷新,查就更新索引—应该就是懒更新策略?)
原数据咋整?在文档的source字段里面,存完整的字段值。
(以上信息参考《Elastic Stack应用宝典》)
1.3 文档
文档基本上没啥好说的,就是我们平时的数据对象,只不过es用json文档的形式存起来而已。
1.4 映射类型
这个东西 6.0 有,在定义索引的时候用
{
"mapping":{
"typeA":{
},
"typeB":{
}
}
}
这样的格式定义,6.0以后就无的咯。想这么操作,只能再建几个索引。
1.5 字段
字段还是跟平时学的一个样,字段名 + 类型定义一个字段,当然还有很多关键字,先不展开,不过下面有些东西可以留意下。
刚说的字段类型等于text的,会分词来做索引。那么问题来了:
- 原始值在哪里?
_source字段 - 文档值是啥?
就是除text类型之外,默认都会开启文档值这个功能,因为非text类型的字段,都算是结构化数据,所以可以用它来进行数据的结构化存储(通过 “doc_values”:false 关闭),文档值的数据结构是存在硬盘中的 - 文档值数据有啥用?
这些结构化的文档值,可以做聚类,排序操作,而非文档值的没法整这东西 - fielddata又是啥?
针对 text 类型的参数,开启之后会在内存中构建数据结构(所以可能会有OOM),比较耗性能,没啥特殊需求不需要整这东西。 - 什么是元字段?
跟 “元” 相关的,英文都是 meta,不用问都是系统自带的字段,主要用来标识、索引、统计、存储字段值。 - 字段数据类型有多少?
字符串、述职、日期、布尔、二进制、范围、数组、对象,支持嵌套、关联、geo数据等,同时一个字段可以支持多个类型 - 字段怎么支持多类型?
用fields参数,定义多个子字段,然后每个子字段不同的数据类型
二、REST API 概述
REST 风格的 API,大致分为一下几类(按照请求头header里面的method区分)
PUT:新增资源(索引,文档)
POST:新增 or 更新资源
GET:查询资源
DELETE:删除资源
在 Kibana 下,只要开发工具->控制台就好了,如下图
2.1 索引的增删查
不比比,先讲索引名称限制
- 只能小写
- 不能以 ‘-’, ‘_’, ‘+’ 开头,但是中间可以包含这几个字符,其他特殊字符被禁止(7.0以后不能用冒号)
- 长度必须小于255B,那就是255个字节=255个字
2.1.1 最简单的索引操作
四个命令
PUT my_index(创建索引)
GET my_index(获取索引基本信息)
HEAD my_index(检验索引是否存在,存在200,否则404)
DELETE my_index(删除索引)
PUT my_index/_mapping(修改索引mapping属性)
PUT my_index(创建索引)
return
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "my_index"
}
GET my_index(获取索引基本信息)
return
{
"my_index" : {
"aliases" : {
},
"mappings" :