特若网络 数据分析 初学Elasticsearch(分析+对比)

初学Elasticsearch(分析+对比)

首先来看百度百科的定义 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户…

首先来看百度百科的定义

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

整理思路,查询关键字

我们来看看Lucene是什么

Lucene是一个用Java写的全文检索引擎工具包,实现构造了索引和搜索两大核心功能,并且两者相互独立,这使得开发人员可以方便扩展,Lucene提供了丰富的API , 可以与存储在索引中的信息方便的交互。需要说明的是它并不是一个完整的全文检索应用, 而是为应用程序提供索引和搜索功能。即若想让Lucene 真正起作用, 还需在其基础上做一些必要的二次开发。

那么它跟关系数据库有啥区别呢,为啥要用他呢

比较项Lucene检索关系数据库检索
数据检索从Lucene的索引文件中检出由数据库索引检索记录
索引结构Document(文档)Record(记录)
查询结果Hit:满足关系的文档组成查询结果集:包含关键字的记录组成
全文检索支持不支持
模糊查询支持不支持
结果排序设置权重,进行相关性排序不能排序

概念还是不够清晰,那么我们来查找一下Elasticsearch的使用场景,来加深对它的理解

  • 将Elasticsearch作为网站的主要后端系统——正如我们所讨论,你可能拥有一个网站,允许人们书写博客帖,但是你希望有搜索帖子的功能。可以使用Elasticsearch存储所有和帖子相关的数据,并处理查询请求。
  • 将Elasticsearch添加到现有系统——你阅读此书可能是因为已经有一套处理数据的系统,而你想加入搜索功能。我们将浏览几个整体设计,看看这一点是如何实现的。
  • 将Elasticsearch作为现有解决方案中的后端部分——因为Elasticsearch是开源的系统,并且提供了直接的HTTP接口,现有一个大型的生态系统在支持它。例如,Elasticsearch在日志集中处理中应用广泛。考虑到现有工具可以写入和读取Elasticsearch,你可以不需要进行任何开发,而是配置这些工具让其按照你所想的去运作。

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

我们分析问题的思路大概分为三步:

  • 是什么?
  • 为什么?
  • 怎么做?

是什么?上面的百度百科定义已经为我们解释了Elasticsearch是什么。

为什么?通过对比mysql这样的关系数据库以及应用场景,我们大体可以知道为为什么会出现Elasticsearch

怎么做?接下来我们来讨论Elasticsearch是怎么来实现数据的检索的

既然Elasticsearch是基于Lucene的,我们可以看一下Lucene的架构

全文检索技术由来已久,绝大多数都基于倒排索引来做,曾经也有过一些其他方案如文件指纹。倒排索引,顾名思义,它相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表。

本文原创,禁止转载。https://www.gjxblog.com/2021/06/21/1570/

作者: GJX

联系我们

联系我们

邮箱: gjx.xin@qq.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部