Elasticsearch基础知识

什么是Elasticsearch

Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ES的作用

分布式的搜索引擎
分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索

全文检索
提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能

数据分析引擎(分组聚合)
电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?新闻网站,最近1个月访问量排名top3的新闻板块是哪些

对海量数据进行近实时的处理
海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理
近实时:Elasticsearch可以实现秒级别的数据搜索和分析

ES的使用场景

  1. 搜索类场景
    比如说电商网站、招聘网站、新闻资讯类网站、各种app内的搜索。
  2. 日志分析类场景
    经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,日志存储,日志分析查询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统使用了该方案。
  3. 数据预警平台及数据分析场景
    例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消
    息,通知用户购买。
    数据分析常见的比如分析电商平台销售量top 10的品牌,分析博客系统、头条网站top 10关注度、评论数、访问量的内容等等。
  4. 商业BI(Business Intelligence)系统
    比如大型零售超市,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信
    息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。
    Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。

核心概念

索引(index)

类似的数据放在一个索引,非类似的数据放不同索引, 一个索引也可以理解成一个关系型数据库。

类型(type)

代表document属于index中的哪个类别(type)也有一种说法一种type就像是数据库的表, 比如dept表,user表。
注意ES每个大版本之间区别很大:
ES 5.x中一个index可以有多种type。
ES 6.x中一个index只能有一种type。
ES 7.x以后 要逐渐移除type这个概念,只剩doc这么一个类型。

映射(mapping)

mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。
常用数据类型:text、keyword、number、array、range、boolean、date、geo_point、ip、 nested、object
示例:

PUT /worker_index/_mapping/
{
  "properties": {
    "name": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "job": {
      "type": "text",
      "analyzer": "ik_max_word"
    }
  }
}
  1. type比如:
    String类型:
     text:可分词,不可参与聚合
     keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
    Numerical:数值类型
     基本数据类型:long、interger、short、byte、double、float、half_float
     浮点数的高精度类型:scaled_float:需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
    Date:日期类型
     elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
    Array:数组类型
     进行匹配时,任意一个元素满足,都认为满足
     排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序
    Object:对象
{
    name:"Jack",
    age:21,
    girl:{
        name: "Rose", age:21
    }
}

如果存储到索引库的是对象类型,例如上面的girl,会把girl变成两个字段:girl.name和girl.age

  1. index
     index影响字段的索引情况。
     true:字段会被索引,则可以用来进行搜索。默认值就是true false:字段不会被索引,不能用来搜索
     index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。 但是有些字段是我们不希望被索引的,比如企业的logo图片地址,就需要手动设置index为false。
  2. store
     是否将数据进行独立存储。
     原始的文本会存储在 _source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存 储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置, 默认为false。
  3. analyzer:指定分词器
     一般我们处理中文会选择ik分词器 ik_max_word ik_smart
文档(Document)

相当于关系型数据库中的一行数据
在kibana中查看文档:
在这里插入图片描述
元数据解读

元数据含义
_indexdocument所属index
_typedocument所属type,Elasticsearch7.x默认type为_doc
_id代表document的唯一标识,与index和type一起,可以唯一标识和定位一个 document
_versiondocument的版本号,Elasticsearch利用_version (版本号)的方式来确保应用 中相互冲突的变更不会导致数据丢失。需要修改数据时,需要指定想要修改文 档的version号,如果该版本不是当前版本号,请求将会失败
_seq_no严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc seq_no Doc seq_no
_primary_term任何类型的写操作,包括index、create、update和Delete,都会生成一个 _seq_n。
foundtrue/false,是否查找到文档
_source存储原始文档
对应关系
关系型数据库es
databaseindex
tableindex类型(原来的type)
rowdocument
columnfield
约束(schema)mapping
集群的节点角色

在es的配置文件elasticsearch.yml中有几个配置

#表示这个节点是否能成为主节点
node.master: true
#表示这个节点是否会储存数据
node.data: true 

如果这两个设置都为false,那么这个节点会成为客户端节点

每次连接到es集群的时候是连接到es集群中的一个节点,再通过这个节点转发到目标节点去执行操作

假如我们的es集群有3个节点
如果我们访问这个cluster的时候访问的是node2
在这里插入图片描述

需要操作的数据在node1上,那么node2会转发到node1上去

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值