博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springCloud整合Elasticsearch 之 Elasticsearch简介
阅读量:2169 次
发布时间:2019-05-01

本文共 5788 字,大约阅读时间需要 19 分钟。

一、什么是Elasticsearch?

Elasticsearch是一个NoSql数据库,其搜索引擎基于Lucene构建。Elasticsearch提供了一个分布式的,基于JSON的实时,多租户的全文搜索解决方案。ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统,是一个高度可扩展的开源全文搜索和分析引擎。它可以让你快速和近乎实时地存储、搜索和分析海量的数据。它通常被用作底层引擎/技术,为具有复杂搜索功能和需求的应用程序提供动力。Elasticsearch在Lucene StandardAnalyzer之上提供了一个分布式系统,用于索引和自动类型猜测,并利用基于JSON的REST API来引用Lucene的功能。

1 . Lucene

简而言之,Lucene是一个用Java编写的库,jar包, Lucene是一个搜索库。这意味着,有一些用Java编写的函数和方法已针对不同的搜索策略进行了优化。Lucene是有史以来最受欢迎的搜索库。大多数开源/商业搜索实现都以Lucene为骨干。 因此,在阅读了上面对Lucene的定义之后,出现了一系列问题,例如,如果Elasticsearch将Lucene用于搜索部分,为什么我们不能将裸露Lucene用于我们的目的呢?为什么选择Elasticsearch?或者,Elasticsearch和Lucene有什么区别? 这些问题的答案是,Lucene是一个编写得非常出色的库,这也使得在根据最终客户需求进行定制时很难处理。因此,Elasticsearch所做的就是在Lucene之上构建一个API层,这将使Lucene方法和功能的使用变得非常简单

2.分布式系统

分布式意味着Elasticsearch可以同时在不同的系统/节点上运行,并尝试利用网络中的系统资源来解决单个问题。Lucene不支持此功能,它是许多实现的主要障碍。

3.近于实时搜索

插入Elasticsearch的文档几乎可以立即用于搜索。此功能开箱即用,无需外部/附加配置。

4.基于JSON

Elasticsearch使用基于JSON的通信。这意味着它将JSON格式用于API和其他通信。由于当今大多数Web应用程序和服务都以JSON进行通信,因此这在使用和互操作性方面提供了极大的灵活性。

5.多租户能力

多租户是指一种应用程序的架构,其中服务器/云上的应用程序实例可以由具有不同级别可访问性选项的多个租户(用户组)访问。

 

ElasticSearch作为一个NOSQL数据库,因为它具有以下特点。

  • 开箱即用

  • 拥有庞大的用户社区

  • 与JSON的兼容性

  • 超级多的案例可参考

二、Elasticsearch-用涂

ElasticSearch的应用场景

  1. 维基百科
  2. The Guardian(国外新闻网站)
  3. Stack Overflow(国外的程序异常讨论论坛)
  4. GitHub(开源代码管理)
  5. 电商网站
  6. 日志数据分析
  7. 商品价格监控网站
  8. BI系统
  9. 站内搜索

概括起来主要应用于一下几方面:

1.搜索

 

如果用数据库做搜索,以上会存在几个问题:

1. 如果表记录上千万上亿了这个性能问题,另外一个如果有一个本文字段要在里面模糊配置,这个就会出现严重的性能问题
2. 还不能将搜索词拆分开来,比如用张三进行查询只能搜索名字是“张三”开头的员工,如果想搜出“张小三”那是搜索不出来的。
总体来说,用数据库来实现搜索,是不太靠谱的,通常性能也会很差
3、什么是全文检索、倒排索引和Lucene
举个简单的例子:比如最近上映的热剧(碟中谍6:全面瓦解),我们想搜索一下全面瓦解这个电视剧,可是在输入的过程,不小心输入了”全瓦解”,我们看看百度这个返回了什么,百度返回的结果确实是我想要找到的内容

全文检索就比较好理解的,就是当我们输入“全瓦解”,会被拆分成”全”,“瓦解”2个此,用2个词去倒排索引里面去检索数据,检索到的数据返回。整个过程就叫做全文检索

倒排索引:

倒排索引操作步骤:

  1. 先将文档中包含的关键字全部提取出来
  2. 然后再将关键字与文档的对应关系保存起来
  3. 最后对关键字本身做索引排序。

这样在用户检索关键字时, 可以先查找关键字索引,在通过关键字与文档的对应关系查找到所在的文档。

ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES还提供了数据聚合分析功能,但在数据分析方面,es的时效性不是很理想,在企业应用中一般还是用于搜索。ES自2016年起已经超过Solr等,称为排名第一的搜索引擎应用。

ES、Lucene、solr对比:

Luence是Apache基于Java编写的信息搜索工具包(jar包),它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此Lucene的使用需要我们进一步开发搜索引擎系统, 如果数据获取、解析、分词等

Solr 是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,系统封装了很多lucene细节,Solr可以直接利用HTTP GET/POST 请求去查询,维护修改索引。Solr利用zookeeper进行分布式管理,它的实现更加全面,官方提供的功能更多。
Elasticsearch 是一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,采用的策略师分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。es的实时搜索性比solr更好。
 

2.日志收集/解析和分析

Elasticsearch与堆栈的其他成员(例如Logstash)和Beats平台使从各种来源收集数据变得非常容易和顺畅。Logstash和Beats使来自各种来源的数据转发变得容易,并且由于它们与Elasticsearch的本机集成,在Elasticsearch中设置和开始收集数据非常容易。 Elasticsearch在这里解决的问题是需要来自不同来源的不同数据处理程序。也就是说,如果您要从不同来源收集日志并需要对日志进行标准化,则可以使用Elasticsearch的Logstash轻松处理此过程的数据转发和数据解析解析应用。因此,使用这种方法可以解决许多中间步骤,以及由此花费的时间和精力来制作标准格式。 使用Elasticsearch的可视化工具Kibana可以轻松可视化已解析和保存的数据。Elasticsearch的功能内置了许多类型的分析功能,例如不同类型的聚合和许多统计计算,它们可以应用于日志,然后使用Kibana进行交互式可视化,以获取有关日志数据的有用见解。

3.内容连接器

就像上一节中提到的日志一样,Elasticsearch的下一个最大用例是来自众多来源的数据收集 如Twitter,Sharepoint,JIVE等。有强大的社区连接器插件可提取数据,并具有来自各种来源的所需自定义并将其添加到Elasticsearch中。反过来,这不仅可以为特定目的提供强大的数据收集,还可以使其变得可搜索。例如:可以将来自特定主题标签的数据流式传输到Elasticsearch,然后,如果我们能够对该数据进行快速的搜索,请想象简化用户所需内容的简便性。卫报新闻社正在使用类似的实现方式,在那里将其新闻的最新评论流式传输到Elasticsearch。然后,对这些数据进行分析并使其可搜索,以便他们可以尽快找到文章的趋势。

4.即时可视化

快速数据可视化功能可在Elasticsearch中建立数据索引后的几分钟内创建具有洞察力的仪表板,这也是Elasticsearch堆栈的主要用例之一。Elasticsearch提供的可视化工具是Kibana,它可以依次加载来自Elasticsearch的数据并可以对它们进行大量分析,然后将其呈现为各种图表,可以按照任何顺序排列以创建报告/仪表板。应用程序监视区域可以使用Kibana -Elasticsearch组合找到大量用例,因为可以实时检测和应对异常或威胁。

三、为什么选择Elasticsearch?

最后进入百万美元的问题,为什么要优先使用Elasticsearch?让我们看看最完美地回答这个问题的最重要因素:

1.可扩展性

使用Elasticsearch的主要优势之一是其可伸缩性。在大多数情况下,只需花费相当长的搜索时间,您就可以将数据索引到Elasticsearch中。是的,没错,在处理Elasticsearch的分布式特性时不会遇到麻烦或痛苦。Elasticsearch自行处理缩放。例如,如果将一个新节点添加到集群中,则无需设置路由,也无需进行重大的关键设置更改即可使其可发现并正常运行,Elasticsearch的主节点只需很少的干预即可解决此问题。 。

2.模式少

通过设计,Elasticsearch被设计为无模式的应用程序。这意味着我们无需事先提供用于将文档放入Elasticsearch的架构。当涉及多个数据源时,这确实是一个巨大的缓解。在类似MongoDb的类似NoSQL数据库中,我们需要预先指定架构。在Elasticsearch中,我们可以对此部分感到叹为观止,然后就可以开始为数据建立索引了。如果没有模式,Elasticsearch会自动为文档字段分配一个模式。

3.定制

这个问题的另一个响亮答案,为什么是Elasticsearch?是它在其提供的解决方案中提供的自定义选项。例如,如前一节所述,它为开发人员提供的搜索选项的自定义可以使搜索的几乎所有用例都包含在内。此外,Elasticsearch的数据通信部分也可以通过多种方式完成,包括默认的插件,插件或用户开发的解决方案,可以与之完美集成。

4.社区

最后但并非最不重要的一点是,由Shay Banon和其他同样才华横溢的开发人员领导的令人惊叹的社区使其成为强大的开源社区之一。社区的努力创建了许多插件,插件和库,从简单的分析器插件到数据河实现。快速的响应式论坛和活跃的在线状态也将节省大量开发时间。

优势

  • ElasticSearch是分布式的。不需要单独的项目。复制也是近实时的,也就是所谓的 “推送复制”。

  • ElasticSearch完全支持Apache Lucene的近实时搜索。

  • 处理multitenancy不是一个特殊的配置,在Solr中需要更高级的设置。

  • ElasticSearch引入了网关的概念,这使得完全备份变得更加容易。

劣势

  • 只有一个主开发者

  • 没有自动升温功能

五,丰富的堆栈组件

1.数据存储,搜索和可视化服务

1.1 Elasticsearch

与Elasticsearch有关的另一个重要领域是可用于它的插件。这些插件主要用于增强特定功能或在某些情况下简化Elasticsearch的使用。

 

1.2 Kibana

Kibana是用于Elasticsearch中存储数据的现成可视化工具。它立即连接到Elasticsearch数据库,并列出数据库名称(Elasticsearch世界中的索引),以便我们开始对索引中的数据进行可视化。Kibana为大多数Elasticsearch操作提供支持,并为我们提供了大量可视化选项,以我们所需的方式可视化数据。这些可视化可用于创建仪表板。以下是Kibana仪表板的示例:

 

2.数据传送,解析和日志处理

2.1 Logstash

我们经常必须从各种来源收集数据,并且必须对其进行解析以使其成为统一格式,然后再进行弹性搜索。Logstash就是这样一种数据管道,它从各种各样的源中接收数据并将其转换为所需的格式,然后将修改后的数据传递给Elasticsearch。Logstash不仅可以将数据推送到Elasticsearch,而且还可以推送到各种接收器。

除了Logstash支持的多种输入和输出源之外,Logstash的主要功能是它提供的数据解析选项。通过提供Groke规则工具来处理传入的日志,它提供了丰富的环境。

 

2.2 Beats平台

Elasticsearch的Beats平台是一组数据托运人,可以将其安装在源中,并将日志/文件发送到Elasticsearch。如果数据在进入Elasticsearch之前需要进行预处理,则可以将它们运送到Logstash。

Beats平台目前有5位成员,他们是

2.2.1 Filebeat-从安装的系统中发送日志

2.2.2 Metricbeat-运送已安装系统的度量数据集

2.2.3 Winlog Beat —从Windows系统发送日志

2.2.4心跳 —正常运行时间监视参数是从已安装的系统发送的

2.2.5 Packetbeat — 运送网络数据

 

3.监控和安全服务

3.1 X-Pack

 

X-Pack是Elasticsearch的付费扩展软件包。它提供了安全性,监视,警报和报告功能的综合解决方案。X-Pack仅可从Elasticsearch 5.x版本获得。对于较旧的版本,这些解决方案是使用不同的软件包分别实现的。

 

3.2 APM-应用程序监视

Elastic APM是堆栈的新手,,APM用于通过使用Elasticsearch和Kibana存储和分析其日志来监视特定应用程序。

4.托管/企业解决方案和服务

4.1弹性云

弹性云将弹性堆栈作为服务提供,从而使扩展和升级到最新版本变得更加容易。

 

4.2弹性企业

与弹性云类似,但该云具有更高的可扩展性和热点支持,适用于企业范围的解决方案

 

ElasticSearch的特点

可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司

Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起
对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES
Elasticsearch作为传统数据库的一个补充,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;
 

转载地址:http://whxzb.baihongyu.com/

你可能感兴趣的文章
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>
什么是ActiveRecord
查看>>
有道词典for mac在Mac OS X 10.9不能取词
查看>>
关于“团队建设”的反思
查看>>
利用jekyll在github中搭建博客
查看>>
Windows7中IIS简单安装与配置(详细图解)
查看>>
linux基本命令
查看>>
BlockQueue 生产消费 不需要判断阻塞唤醒条件
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>