Elasticsearch的基本概念

什么是搜索引擎

搜索引擎,即指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统.小到一个网站的内部搜索功能,如博客文章的搜索,电商平台商品的搜索,大到提供全网搜索的网站,如谷歌、百度等

倒排索引

索引就类似于目录,平时我们使用的都是索引,都是通过主键定位到某条数据,那么倒排索引呢,刚好相反,数据对应到主键.这里以一个博客文章的内容为例:

索引

文章ID 文章标题 文章内容
1 浅析JAVA设计模式 JAVA设计模式是每一个JAVA程序员都应该掌握的进阶知识
2 JAVA多线程设计模式 JAVA多线程与设计模式结合

我们可以通过文章ID直接定位到具体的某篇文章

倒排索引

我们有一个站内搜索的功能,通过某个关键词来搜索相关的文章,那么这个关键词可能出现在标题中,也可能出现在文章内容中,那我们将会在创建或修改文章的时候,建立一个关键词与文章的对应关系表,这种,我们可以称之为倒排索引,因此倒排索引,也可称之为反向索引

关键词 文章ID
JAVA 1
设计模式 1,2
多线程 2

倒排索引的数据结构

  1. 包含这个关键词的document list

  2. 关键词在每个document list中出现的次数 TF term frequency

  3. 关键词在整个索引中出现的次数 IDF inverse doc frequency(出现次数越多,相关度越低)

  4. 关键词在当前document list中出现的次数

  5. 每个document list的长度,越长相关度越低

  6. 包含这个关键词的所有doc的平均长度

    IDF inverse doc frequency(出现次数越多,相关度越低)指的是 如果整个document list中每条数据都有这个词,那么都相关,这样相关度就低

ElasticSearch介绍

ElasticSearch的主要功能

ElasticSearch的主要功能,可以大致分为以下几个部分:

  • 存储:海量数据存储(替代传统数据库或NoSQL数据库,存储不是目的,是为检索或分析服务的)
  • 检索:根据一定条件对存储的数据进行检索
  • 分析:通过存储的数据,通过一些分析手段,对数据进行聚合或分析,形成一些分析数据

Elasticsearch的优点

  1. 面向开发者友好,屏蔽了Lucene的复杂特性,集群自动发现(cluster discovery)
  2. 自动维护数据在多个节点上的建立
  3. 会帮我做搜索请求的负载均衡
  4. 自动维护冗余副本,保证了部分节点宕机的情况下仍然不会有任何数据丢失
  5. ES基于Lucene提供了很多高级功能:复合查询、聚合分析、基于地理位置等。
  6. 对于大公司,可以构建几百台服务器的大型分布式集群,处理PB级别数据;对于小公司,开箱即用,门槛低上手简单。
  7. 相遇传统数据库,提供了全文检索,同义词处理(美丽的cls>漂亮的cls),相关度排名。聚合分析以及海量数据的近实时(NTR)处理,这些传统数据库完全做不到。

ElasticSearch使用场景

  • 在线商城商品检索
  • 百度(全文检索、高亮、搜索推荐)
  • 日志或交易数据收集,并进行数据分析和数据挖掘
  • 数据变更监听、告警和通知
  • 海量商业数据可视化查询、分析,为智能商业系统提供依据

ElasticSearch核心概念

  • cluster : 即集群,具有相同集群名称的节点的集合,每个集群至少包含两个节点.

  • node : 即节点,运行ES的实例,一个节点不代表一台服务器

  • field:一个数据字段,与index和type一起,可以定位一个doc

  • document:ES最小的数据单元 Json

    {
        "id": "1",
        "name": "小米",
        "price": {
            "标准版": 3999,
            "尊享版": 4999,
            "吴磊签名定制版": 19999
        }
    }
    
    
  • Type:逻辑上的数据分类,es 7.x中删除了type的概念

  • Index:一类相同或者类似的doc,比如一个员工索引,商品索引。

  • Shard分片

  1. 一个index包含多个Shard,默认5个primary shard,默认每个primary shard分配一个replica shard,replica shard的数量在创建索引的时候设置,如果想修改,需要重建索引。

  2. 每个Shard都是一个Lucene实例,有完整的创建索引的处理请求能力。

  3. ES会自动在nodes上为我们做shard 均衡

  4. 一个doc是不可能同时存在于多个节点分片(primary Shard)中的,但是可以存在于多个replica shard中。

  5. primary shard和对应的replica shard不能同时存在于同一个节点,所以最低的可用配置是两个节点,互为主备。

primary shard:主分片

replica shard:副本分片

image-20210526093251767

ElasticSearch中的相关概念与关系型数据库之间的对应

这个相关概念对应知识便于理解,不是一一对应关系

ElasticSearch中的相关概念 关系型数据库如MySQL中的相关概念 备注
index database/table 数据库名称或表名称
type table 表名称(不再建议使用)
document row 一行记录
mapping schema 数据库表结构
field column 某个字段

ElasticSearch其他说明

  • ElasticSearch与关系数据库不同,它在进行数据操作前,不用先定义数据结构(即定义mapping),ElasticSearch会自动创建mapping,如果有特殊的字段定义,则需要定义mapping
  • 操作ElasticSearch都是通过Restful接口来实现的
    • POST : 新增或修改数据
    • PUT : 修改数据
    • GET : 获取(查询)数据
    • DELETE : 删除数据

操作ElasticSearch的方式

  • 通过客户端API
  • 通过Kibana
  • 通过curl命令操作

关于curl命令补充说明:

  1. curl http://www.baidu.com
  • GET请求:直接加上url即可
  • POST请求:通过-d指定表单参数或使用-X POST来指定请求方式
  • PUT请求:通过-X PUT来指定PUT请求
  • DELETE:通过-X DELETE来指定DELETE请求

ElasticSearch相关的生态

ElasticSearch只是Elastic栈的一个组成部分

  • ElasticSearch : 数据存储、检索和分析引擎
  • Kibana : 数据可视化平台
  • Beats : 数据采集平台
    • Filebeat : 文件(日志)数据采集
    • Metricbeat : 指标数据采集
    • Packetbeat : 网络数据采集
    • Winlogbeat : Windows事件日志采集
    • Auditbeat : 审计数据采集
    • Heartbeat : 运行时间监控数据采集
    • Functionbeat : 无需服务器的数据采集
  • Logstash : 数据集中、转换和存储
  • ECE(ELASTIC CLOUD ENTERPRISE) : 集中编排一系列 Elasticsearch 集群
  • APM : 应用程序性能管理
posted @ 2021-06-08 15:39  知白守黑,和光同尘  阅读(157)  评论(0编辑  收藏  举报