Elasticsearch(1)

Elasticsearch是一个基于Lucene的搜索服务器,用于云计算中的实时搜索和分析。它支持分布式存储,提供多用户能力,并具有RESTful接口。Elasticsearch常用于日志分析、实时搜索、业务智能等领域,通过Logstash和Kibana进行数据收集、可视化。其倒排索引机制确保了高效模糊搜索。本文介绍了Elasticsearch的基本概念、安装及与MySQL的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Elasticsearch

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

关键字:实时、分布式存储、搜索、分析、引擎

一、简介

Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎。可以快速存储、搜索和分析海量数据。Logstash和Beats有助于收集,聚合和丰富您的数据并将其存储在Elasticsearch中。使用Kibana,您可以交互式地探索,可视化和共享对数据的见解,并管理和监视堆栈。Elasticsearch是发生索引,搜索和分析魔术的地方。

Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论您是结构化文本还是非结构化文本,数字数据或地理空间数据,Elasticsearch都能以支持快速搜索的方式有效地对其进行存储和索引。您不仅可以进行简单的数据检索,还可以聚合信息来发现数据中的趋势和模式。随着数据和查询量的增长,Elasticsearch的分布式特性使您的部署可以随之无缝地增长。

虽然并非每个问题都是搜索问题,但是Elasticsearch可以提供速度和灵活性来处理各种用例中的数据:

  • 将搜索框添加到应用或网站
  • 存储和分析日志,指标和安全事件数据
  • 使用机器学习来实时自动建模数据行为
  • 使用Elasticsearch作为存储引擎自动化业务工作流程
  • 使用Elasticsearch作为地理信息系统(GIS)管理,集成和分析空间信息
  • 使用Elasticsearch作为生物信息学研究工具来存储和处理遗传数据

人们使用搜索的新颖方式使我们不断感到惊讶。但是,无论您的用例与其中之一相似,还是您正在使用Elasticsearch解决新问题,在Elasticsearch中处理数据,文档和索引的方式都是相同的。

二、示例

  • 您经营一个在线网上商店,您可以在其中允许客户搜索您出售的产品。在这种情况下,您可以使用Elasticsearch存储整个产品目录和库存,并为它们提供搜索和自动完成建议。
  • 您想要收集日志或事务数据,并且想要分析和挖掘此数据以查找趋势,统计信息,摘要或异常。在这种情况下,您可以使用Logstash(Elasticsearch / Logstash / Kibana堆栈的一部分)来收集,聚合和解析数据,然后让Logstash将这些数据提供给Elasticsearch。将数据保存在Elasticsearch中后,您可以运行搜索和聚合以挖掘您感兴趣的任何信息。
  • 您运行一个价格警报平台,该平台允许精通价格的客户指定诸如“我有兴趣购买特定的电子小工具,并且如果小工具的价格在下个月内从任何供应商处降到$ X以下,我希望收到通知”。 。在这种情况下,您可以抓取供应商价格,将其推入Elasticsearch并使用其反向搜索(Percolator)功能将价格变动与客户查询进行匹配,并在找到匹配项后最终将警报发送给客户。
  • 您具有分析/业务智能需求,并且想要快速调查,分析,可视化并针对大量数据(即数百万或数十亿条记录)提出临时问题。在这种情况下,您可以使用Elasticsearch存储数据,然后使用Kibana(Elasticsearch / Logstash / Kibana堆栈的一部分)构建自定义仪表板,这些仪表板可以可视化对您重要的数据方面。此外,您可以使用Elasticsearch聚合功能对数据执行复杂的商业智能查询。

三、Mysql与ES的爱恨情仇

我们知道,ES最大的功能是用来模糊查询,但是mysql不也可以模糊查询么?为什么要多此一举不用mysql而转而使用ES呢?

先来看看一个简单的mysql模糊查询:

select * from user where name like '%summer%'

此时的确会把有关summer的名字都找出来,但是我们的mysql语句是对整个表进行索引,如果此时一个表中的记录包含上亿条,那么我们的查询速度会是秒级的,而我们知道mysql中也有索引,它使用特别的数据结构来达到高效的查询结果,但索引却不能被我们拿来自己diy。

再说,我们上面查找出来的数据量可能高达上百万,并且没有任何先惯性,胡子眉毛一把抓,这样的搜索结果很可能会导致用户体验下降。

最后,我们在使用google的时候,搜索Mysql时我们经常使用mysql来代替,但是浏览器也知道我们想找的就是Mysql。

而Elasticsearch是专门做搜索的,就是为了解决上面所讲的问题而生的,换句话说:

  • Elasticsearch对模糊搜索非常擅长(搜索速度很快)
  • 从Elasticsearch搜索到的数据可以根据评分过滤掉大部分的,只要返回评分高的给用户就好了(原生就支持排序)
  • 没有那么准确的关键字也能搜出相关的结果(能匹配有相关性的记录)

四、基本概念

1. index:索引

动词:相当于Mysql中的insert

名词:相当于Mysql中的Database

2. Type:类型

在index中,可以定义一个或多个类型。

类似于Mysql中的Table,每一种类型的数据放在一起。

这个在新的Elasticsearch版本已经废除(在以前的Elasticsearch版本,一个Index下支持多个Type–有点类似于消息队列一个topic下多个group的概念)

3. Document:文档

保存在某个索引下,某种类型的一个数据。文档时json格式的,Document就像是Mysql中的某个Table里面的内容。

4. Field

相当于数据库的Column的概念

5. Mapping

相当于数据库的Schema的概念

6. DSL

相当于数据库的SQL(给我们读取Elasticsearch数据的API)

img

五、其他概念

cluster:代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

recovery:代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

river:代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。

gateway:代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

discovery.zen:代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

Transport:代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

六、倒排索引

假设我们有这样5个数据:

  1. 红海行动
  2. 探索红海行动
  3. 红海特别行动
  4. 红海纪录篇
  5. 特工红海特别探索

首先,我们获取这个数据之后,先将这几个进行分词,红海行动可以变成红海行和行动,余下的五个也类似操作。之后我们就可以组成下面的这样一张表。

记录
红海1,2,3,4,5
行动1,2,3
探索2,5
特别3,5
纪录篇4
特工5

接下来,如果我们需要搜索:红海特工行动?就会先进行分词,变成:红海、特工、行动。当这个分好之后,再去表里面查找,查看是否有相同的。我们发现红海、行动和特动都存在,此时就会产生一个相关性得分:在红海特别行动里面有3个词,与我们输入的红海特工行动有两个相似的词,而5里面有4个词,也是与我们输入的有两个相同,因此,得分就是2/32/4。这种根据某个词(不完整的条件)再查找对应记录,叫做倒排索引

七、安装

docker安装elasticsearrch看下篇文章:传送门

kibana安装:

我们使用elasticsearch如果想可视化,可以下载kibana来进行数据的可视化操作

下拉镜像

docker pull kibana:7.10.1

注意:这里的kibana版本最好和elasticsearch一样,一味的选择lastest可能会产生不知名的后果

创建实例

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://自己的ip地址:9200 -p 5601:5601 -d kibana

完成以后,可以打开浏览器输入:IP地址:5601,如果出现以下图片说明成功:
在这里插入图片描述
如果出现:

Unable to connect to Elasticsearch at http://elasticsearch:9200和Unable to revive connection: http://elasticsearch:9200/

可以查看这篇文章:解决docker报Unable to connect to Elasticsearch at http://elasticsearch:9200和Unable to revive connection

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值