ElasticSearch --- 概述

1. 数据分类

  1. 结构化数据
  2. 非结构化数据
  3. 半结构化数据

2. ESSolr的对比

  1. 单纯的对已有数据进行搜索时,Solr更快
  2. 当实时建立索引时,Solr会产生IO阻塞,查询性能较差,ES具有更明显的优势
  3. 随着数据量的增加,Solr的搜索效率会变得更低,而ES不会有明显变化
  4. ES开箱即用(解压就可以用),非常简单,而Solr会复杂一些
  5. Solr利用Zookeeper进行分布式管理,而ES自带分布式协调管理功能
  6. Solr支持多格式数据:json,xml,csv,而ES仅支持json文件格式
  7. Solr官方提供的功能更多,而ES更注重本身的核心功能,高级功能会有很多第三方插件提供,例如图形化界面需要Kibana,IK分词器
  8. Solr查询快,但是更新索引时慢(插入删除),用于电商等查询多的应用,ES建立索引快(即查询慢),但实时性查询快
  9. Solr比较成熟,ES更新太快,学习成本高

3. 基本架构

3.1 ES结构

Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档

ES 里的Index 可以看做是一个库,而Types相当于表,Documents则相当于表的行
这里Types的概念已经被逐渐弱化,ES6.x中,一个index下已经只能包含一个type,Es7.x中,Type的概念已经被删除了

# ES是面向文档的,关系型数据库和ES的对比:
库             索引
表			types(#8.0已被弃用)
行			documents(最小单位)
字段			fields

3.2 物理设计

ES在后台把每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移

3.3 底层分析

1. 节点和分片

一个集群至少有一个节点,而一个节点就是一个ES进程,节点可以有多个ES索引,如果创建ES索引,ES索引将有5个分片(Lucene索引)构成,主分片有一个副本,对于多节点的集群创建ES索引时,主分片和对应的复制分片不会在同一个节点内,这样当某一节点挂了,数据不会丢失实际上一个分片就是一个Lucene索引,一个包含倒排索引的文件目录

2. 倒排索引

通过关键字锁定主键索引,从而到处该数据

ES使用的是倒排索引结构,采用lucene倒排索引为底层,这种结构适用于快速的全文搜索,不扫描全部文档就可以搜索到对应内容,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表,如文档1中的内容是1,2,3 文档2的内容是2,3,5,为了创建索引,会将每个文档拆分成独立的词(词条),然后创建一个包含所有不重复的词条的排序列表,然后列出每个词条出现在哪个文档,如1在文档1中出现,文档2没有,2两个文档都有,3也是两个文档都有,5在文档1中没有,文档2中有,假如搜索1和2的时候,只需要查看每个词条的文档,如1在文档1中有,文档2中没有,2在文档1和文档2中都有,那么说明文档1的score更高,匹配程度更高,如果没有别的条件,这两个包含关键字的文档都将返回

也就是对文档的内容进行分词拆分,列出包含分词的文档ID,当查询的时候,直接查包含分词的文档ID就可以了,根本不会产生无用搜索

3. 正排(正向)索引

musql中通过主键,锁定对应数据

4. 应用场景

海量日志分析

商品价格监控网站

如果价格低于50会自动通知到用户

数据分析

posted @ 2024-03-01 13:50  河图s  阅读(17)  评论(0)    收藏  举报