目录
Elasticsearch,分布式、高性能、高可用、可伸缩的搜索和分析系统
一、什么是全文检索和Lucene?
1、全文检索:倒排索引
2、Lucene:
就是一个jar包,里面包含了封装好的各种建立倒排索引以及进行搜索的代码,包括各种算法。我们就用Java开发的时候,引入Lucene jar,然后基于Lucene的api 进行开发即可。用Lucene,我们就可以将已有的数据建立索引,Lucene会在本地磁盘上给我们组织索引的数据结构。另外的话,我们也可以用Lucene提供的一些功能和api 来针对磁盘上的索引数据进行搜索。
二、Elasticsearch
1、ES功能
(1)分布式的搜索引擎和数据分析引擎
搜索:百度、网站的站内搜索、IT系统的检索
数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是那些
(2)全文检索,结构化检索,数据分析,(部分匹配,自动完成,搜索纠错,搜索推荐)
全文检索:搜索商品名称包含牙膏的商品,select * from products where product_name like ‘%牙膏%’
结构化检索:搜索商品分类为日化用品的商品都有那些,select * from products where category_id = '日化用品'
数据分析:分析每个商品分类下有多少个商品,select category_id,count(*) from products group by category_id
(3)对海量数据进行近实时的处理
分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索
海量数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了
近实时:检索个数据要花费1个小时(这就不叫近实时,叫离线批处理,batch-processing),在秒级别对数据进行搜索和分析
跟分布式/海量数据相反的:Lucene,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量
2、ES特点
(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司,也可以运行在单机上,服务小公司
(2)ES不是新技术,主要是将全文检索、数据分析以及分布式技术,合并在一起,才形成了独一无二的ES;
(3)对用户而言,开箱即用,简单,作为中小型应用,直接3分钟部署一下ES,就可作为生产环境的系统来使用了,数据量不大,操作不太复杂
(4)数据库的功能面对很多领域是不够用的,特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;ES作为传统数据库的一个补充,提供了数据库所不能提供的很多功能
三、ES核心概念
1、Near Realtime(NRT)近实时
两个意思,从写入数据到数据可以被搜索到有一个小延迟(大概1s),基于es执行搜索和分析可以达到秒级
2、Cluster 集群
包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常
3、Node 节点
集群中的一个节点,节点也有一个名称(默认随机分配),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么他们会组成一个elasticsearch集群,当然一个节点也可组成一个elasticsearch集群
4、Document 文档 & field
es中的最小数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中,都可以存储多个document。一个document里面有多个field,每个field就是一个数据字段
product document
{
“product_id”:“1”,
“product_name”:"高露洁牙膏”,
“category_id”:“2”,
“category_name”:“日化用品”,
}
5、index 索引
包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引。索引有一个名称,一个index包含很多document,一个index就代表了一类类似的或者相同的document,比如建立一个product index,商品索引,里面可能就存放了所有的商品数据,所有的商品document。
6、type 类型
每个索引里可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field。比如博客系统,有一个index,可以定义用户数据type,博客数据type,评论数据type。
7、shard
单台机器无法存储大量数据,es可将一个索引中的数据切分为多个shard,分布在多台服务服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和操作分布到多台服务器上去执行,提升吞吐量和性能,每个shard都是一个Lucene index
8、replica
任何一个服务器随时可能故障或宕机,此时shard可能会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障是提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引是一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个)。默认每个index10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器
9、es核心概念 & 数据库核心概念
document ------ 行
type ------ 表
index ------ 库