elasticsearch的术语原理概念及应用场景(一)

96 阅读8分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

Elasticsearch的介绍及安装

1.elasticsearch的介绍

1.1.elasticsearch简介

Elasticsearch是一个实时的分布式搜索引擎,它能让你以一个之前从未有过的速度和规模去搜索你的数据,它被用作全文检索、结构化搜索、分析以及这三个功能的组合

Elasticsearch是一个基于Apache Lucene的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为迄今为止最先进、性能最好的、功能最全的搜索引擎库,但是lucene只是一个库,想要用它,必须使用java来作为开发语言并将其直接集成到你的应用中,Lucene非常复杂,需要深入了解检索的相关知识来理解是如何工作的,Elasticsearch也使用java开发并使用lucene作为其核心来实现所有搜索和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单

简单来说就是:之前操作Lucene都是直接去Lucene进行操作,复杂性相当多,而有了Elasticsearch之后,Elasticsearch在Lucene的基础上又封装了一层,用户使用的时候也只是在封装好的那一层进行使用,由Elasticsearch去调用Lucene完成一些复杂性的过程,从而实现全文检索

elasticsearch简称es

1.2.elasticsearch的功能

  • 分布式的搜索引擎和数据分析引擎

    • 搜索就是类似于百度,查找各种网页
    • 数据分析就类似于博客统计累计访问量、电商平台的销量前十
  • 全文检索、结构化检索、数据分析

    • 全文检索类似于sql中的模糊查询,全文进行搜索
    • 结构化搜索就类似于指定查询,查找到对应的一行
  • 对海量数据进行近实时处理

    • 分布式:ES自定可以将海量数据分散到多台服务器上存储和检索
    • 海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了
    • 近实时:检索个数据要花费1小时,(这时就不要近实时,做好进行离线批量处理),在秒级别对数据进行搜索和分析

1.3.elasticsearch的应用场景

站点搜索、系统搜索、数据分析

  • 基维百科
  • The Guardian新闻网站
  • 论坛
  • GitHUb
  • 电商网站
  • 日志数据分析
  • 商品价格监控网站
  • BI系统

1.4.elasticsearch的特点

  • 可以作为一个大型分布式集群、处理PB级别的数据,服务大公司,也可以运行在单机上面,服务小公司
  • elasticsearch主要将全文检索、数据分析以及分布式技术结合在一起,形成了独一无二的es
  • 对用户而言是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下,就可以作为生产系统的环境来用了,数据量不打,操作不是太复杂
  • elasticsearch作为传统数据库的一个补充,提供了数据库所不能提供的很多功能

1.5.elasticsearch的数据格式

elasticsearch使用json作为文档的序列化格式,json序列化被大多数编程语言所支持,并且已经成为nosql领域的标准格式,简单、简洁、易于阅读

JSON(JavaScript Object Notation)

Linux有个命令叫jq,这个可以查看json文件是否有语法错误

yum install jq

cat json.file | jq

2.elasticsearch术语及概念

  • 索引词
    • 在elasticsearch中索引词是一个能够被索引的精确值,foo,FOO,Foo几个单词是不同的索引词,索引词是可以通过term查询进行准确的搜索
  • 文本
    • 文本是一段普通的非结构化文字,通常文本会被拆成一个个的索引词,存储在elasticsearch的索引库中,为了让文本能够进行搜索,文本字段需要事先进行分析,当对文本中的关键词进行查询的时候,搜索引擎应该根据搜索条件搜索出原文件
  • 分析
    • 分析是将文本转换成索引词的过程,分析的结果依赖于分词器,比如FOOBaR,Foo-Bar和foobar都可能会被分析成相同的索引词foo和bar,这些索引词存储在elasticsearch的索引库中
  • 集群
    • 集群是由一个或多个节点组成,对外提供服务,对外提供索引和搜索功能,在所有节点,一个集群有一个唯一的名称默认为elasticsearch,此名称很重要,因为每一个节点只能是集群的一部分,当该节点被设置为相同的集群名称中,就会自动加入集群,当需要有多个集群的时候,需要确保每个集群的名称不能重复发,否则节点可能加入错误的集群,一个节点只能添加一个集群
  • 节点
    • 一个节点是一个逻辑上独立的服务,它是集群的一个部分,可以存储数据,并参数与集群的索引和搜索功能,就像集群一样,节点也有唯一的名字,在启动的时候分配,如果你不想要默认名称,你可以定义任何你想要的节点名,这个名字在集群中很重要,在elasticsearch集群中通过节点名称进行管理和通信,一个节点可以被配置加入到一个特定的集群,默认情况下,每个节点会加入一个名称elasticsearch的集群中
  • 分片
    • 分片就是把一份数据分散的存储到不同的节点上
    • 分片是单个Lucene实例,这是elasticsearch管理的比较底层的功能,索引是指向主分片和副本分片的逻辑空间,对于使用,只需要指定分片的数量,其他不需要做过多的事情,在开发使用的过程中,我们对应的对象都是索引,elasticsearch会自动管理集群中的所有分片,当发生故障的时候elasticsearch会把分片移动到不同的节点或者添加新节点
    • 一个索引可以存储很大的数据,这些空间可以超过一个节点的物理存储限制,elasticsearch可以将索引分解成多个分片,当你创建一个索引,你可以简单地定义你想要的分片数量,每个分片本身都是一个全功能的、独立的单元
  • 副本分片
    • 每一个分片有零个或多个副本,副本主要是住分片的复制。有两个目的,一是增加高可用性,当主分片失败的是,可以从副本分片中选择一个作为主分片,二是提高性能,当查询的时候可以到住分片或者副本分片中查询
    • 分片允许水平分割扩展数据
    • 分片允许分配合并行操作,从而提高性能和吞吐量
  • 索引
    • 索引是具有相同结构的文档集合,类似于数据库中的库
  • 类型
    • 在索引中,可以定义一个或多个类型,类型是索引的逻辑分区,在一般情况下,一种类型被定义为具有一组公共字段的文档,例如运行一个博客,可以把所有的数据存储在一个索引中,在这个索引中,可以定义一类是用户数据,一类是博客数据,一类是评论数据,类似于数据库中的表
  • 文档
    • 文档是存储在elasticsearch中的一个json格式的字符串,它就像在关系数据库中表的一行,每个存储在索引中的一个文档都有一个类型和一个ID,每个文档搜狐一个json对象,类似于数据库中的行
  • 映射
    • 映射就像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型以及一个索引范围内的设置
  • 字段
    • 文档中包含零个或多个字段
  • 主键
    • ID是一个文件的唯一表示,如果在存库的时候没有提供ID,系统会自动生成一个ID
  • 复制
    • 复制是一个非常有用的功能,不然会有单点问题,当网络中的某个节点出现问题的时候,复制可以对故障进行转移,保证系统的高可用

是博客数据,一类是评论数据,类似于数据库中的表

  • 文档
    • 文档是存储在elasticsearch中的一个json格式的字符串,它就像在关系数据库中表的一行,每个存储在索引中的一个文档都有一个类型和一个ID,每个文档搜狐一个json对象,类似于数据库中的行
  • 映射
    • 映射就像关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型以及一个索引范围内的设置
  • 字段
    • 文档中包含零个或多个字段
  • 主键
    • ID是一个文件的唯一表示,如果在存库的时候没有提供ID,系统会自动生成一个ID
  • 复制
    • 复制是一个非常有用的功能,不然会有单点问题,当网络中的某个节点出现问题的时候,复制可以对故障进行转移,保证系统的高可用