目录
笔记记录 B站狂神说Java的ElasticSearch课程:https://www.bilibili.com/video/BV17a4y1x7zq.
一、ElasticSearch是什么?
Elaticsearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。
Elaticsearch也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
1.1Lucene和ElasticSearch的关系?
Lucene是一个apache软件基金会旗下的全文检索引擎的架构,提供了完整的查询引擎和检索引擎。
ElasticSearch是基于Lucene 做了一下封装和增强。
1.2Elasticsearch和Solr的区别?
Elasticsearch | Solr | |
---|---|---|
安装方式 | 开箱即用 | 复杂 |
底层管理 | 自身带有分布式协调管理功能 | Zookeeper进行分布式管理 |
支持格式 | json | JSON、XML、 CSV |
支持功能 | 重于核心功能,提供插件 | 提供的功能更多 |
查询效率 | 建立索引快(即实时性查询快) | 查询快,但更新索引时慢(即插入删除慢) |
学习成本 | 开发维护者较少,更新快,学习使用成本高。 | 有更大、更成熟的用户、开发和贡献者社区 |
(1)当单纯的对已有数据进行搜索时,Solr更快;
(2)当实时建立索引时,Solr会产生io阻塞,查询性能较差,ElasticSearch具有明显的优势
二、ElasticSearch核心概念
ElasticSearch是面向文档,关系型数据库和ElasticSearch客观对比
DB | ElasticSearch |
---|---|
数据库(database) | 索引(indices) |
表(tables) | types <慢慢会被弃用!> |
行(rows) | documents |
字段(columns) | fields |
ElasticSearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)
2.1物理设计:
elasticsearch在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移
一个人就是一个集群! ,即启动的ElasticSearch服务,默认就是一个集群,且默认集群名为elasticsearch
2.2物理设计:节点和分片 如何工作
1、创建新索引
一个集群至少有一个节点,而一个节点就是一个elasticsearch进程,节点可以有多个索引默认的,如果你创建索引,那么索引就会有5个分片,每一个主分片会有一个副本。
上图是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失;
一个分片是一个Lucene索引(一个ElasticSearch索引包含多个Lucene索引),一个包含倒排索引的文件目录,倒排索引的结构使得elasticsearch在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。
2.3倒排索引(Lucene索引底层)
按(文章关键字)形式建立索引,根据关键字就可直接查询对应的文档(含关键字),无需查询每一个文档
例如:现在有两个文档个,包含内容如下:
Study every day,good good up to forever #文档1包含的内容
To forever ,study every day ,good good up #文档2包含的内容
term | doc_1 | doc_2 |
---|---|---|
Study | √ | × |
every | × | × |
day | √ | √ |
good | × | √ |
to | √ | √ |
up | √ | × |
forever | √ | √ |
如果你搜索day up,根据上表发现doc_1的权重高 |
ElasticSearch入门学习笔记(二)软件安装篇
ElasticSearch入门学习笔记(三)SpringBoot整合篇
SpringBoot集成BBOSS-ElasticSearch实现ElasticSearch客户端
阿里云Docker安装ES\ES_Head\安装部署logstash导mysql数据入ElasticSearch