elasticsearch介绍

什么是elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
------来自百度百科
elasticsearch目前的使用还是非常广泛的,携程、滴滴、今日头条、饿了么、360安全、小米、vivo等等公司都在使用elasticsearch。

elasticsearch的由来-程序员的浪漫

在这里插入图片描述

许多年前,一个名叫Shay Banon的开发者,带着新婚妻子去伦敦生活,在得知妻子想从事厨师工作后,准备利用自己所学为妻子开发一个食谱搜索引擎,他开始使用Lucene的一个早期版本。但是尝试之后,他发现直接使用Lucene给没有任何开发经验的妻子而言是非常困难的,因此Shay 开始对Lucene进行封装。不久他发布了他的第一个基于Lucene的用java编写的开源项目 Compass。后来Shay找到了一份跟高性能和分布式有关的工作,然后发现这份工作对实时、分布式搜索引擎的需求尤为突出,于是他决定重写Compass,把它变为一个独立的服务并取名Elasticsearch,再到后来Elasticsearch发布了第一个公开版本,从此以后,Elasticsearch已经成为了 Github 上最活跃的开源项目之一。据说,Shay的妻子还在等着她的食谱搜索引擎,而他已经在大公司忙的“一发不可收拾”…

开源的全文检索引擎-Lucene

开源的信息检索程序库目前很多很多,而Lucene应该是目前使用最多的一个,目前使用较多的Elasticsearch和Solr,两者都是基于Lucene进行开发的,Lucene是一个很值得深入学习的开源组件,各位感兴趣的童鞋可以自己好好看一看他的实现原理。

这里讲一下其中的核心,倒排索引。
在这里插入图片描述

1、设有两篇文档a和b

文档a:我是中国人,我爱中国。
文档b:张三是中国人。

补充概念:
分词:我们需要讲一个文档划分成一个一个单词,我爱中国->我,爱,中国,张三是中国人->张三,是,中国,人。划分规则有分词算法和词库来控制,分词算法控制分词力度,而最终划分的单词都应该在词库中存在。

2、经过分词后的文档a和b

文章a:[我],[是],[爱],[中国],[人]
文章b:[张三],[是],[中国],[人]

3、建立倒排索引

有了关键词后,我们就可以建立倒排索引了。平时我们接触到存储与倒排索引不太一致,正常的逻辑通过文档名查找文档内容。而倒排索引则是通过文档内容寻找文档名.

关键词 文章号
我 a
爱 a
中国 a,b
张三 b
是 a,b
人 b

4、优化倒排索引

通常仅知道关键词在哪些文章中出现还不够,我们还需要知道关键词在文档中出现次数和出现的位置,通常有两种位置:
a)字符位置,即记录该词是文档中第几个字符(优点是关键词亮显时定位快)
b)关键词位置,即记录该词是文档中第几个关键词(优点是节约索引空间、词组(phase)查询快)
lucene 中记录的就是这种位置。

关键词 文章号[出现频率] 出现位置
我 a[2] 1,5
爱 a[1] 6
中国 a[2],b[1] 3,7,3
张三 b[1] 1
是 a[1],b[1] 2,2
人 a[1],b[1] 4,4

这里解释一下,以中国为例,中国在文档a中出现2次,出现位置为a中的第三个关键词和第7个关键词,在文档b中出现1次,位置为b中的第三个关键词。

以上就是lucene索引结构中最核心的部分。我们注意到关键字是按字符顺序排列的(lucene没有使用B树结构),因此lucene可以用二元搜索算法快速定位关键词。

ES核心概念

1、Cluster:集群。

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2、Node:节点。

形成集群的每个服务器称为节点。

3、Shard:分片。

当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4、Replia:副本。

为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

5、全文检索。

全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。

ES与mysql对应关系

Index:索引,这里说的索引是名词,相当于mysql中的数据库。
Type:规定的一种存储类型,即归属于这个type中的文档都要满足这个type约定的字段,可以理解成关系数据库中Table。
Document:文档对象,即关系数据库中的一行数据。
在这里插入图片描述
elasticsearch使用dsl进行查询,对于基本的增删改查,分组聚合都是满足的。后面会续更一篇dsl和es api的教程。人生有梦,各自精彩。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值