实时的分布式搜索和分析引擎——Elasticsearch

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 分布式的实时分析搜索引擎
  • 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

而且,所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。

Elasticsearch的主要应用场景有:

  • 它提供了强大的搜索功能,可以实现类似百度、谷歌等搜索。
  • 可以搜索日志或者交易数据,用来分析商业趋势、搜集日志、分析系统瓶颈或者运行发展等等。
  • 可以提供预警功能(持续的查询分析某个数据,如果超过一定的值,就进行警告)。
  • 分析商业信息,在百万级的大数据中轻松的定位关键信息。

我们再来看看Elasticsearch的真实使用案例:

  • 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean等搜索建议功能。
  • 英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。
  • StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。
  • GitHub使用Elasticsearch来检索超过1300亿行代码。
  • 每天,Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

但是Elasticsearch并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。

那Elasticsearch到底有哪些优点呢?

  1. Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
  2. Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
  3. 处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。
  4. Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
  5. 各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。

要了解Elasticsearch 首先就要弄清楚下面的几个概念,这样也不会对Elasticsearch 产生一些误解:

1 近实时

Elasticsearch 并不是一个标准的数据库,它不像MongoDB,它侧重于对存储的数据进行搜索。因此要注意到它 不是 实时读写 的,这也就意味着,刚刚存储的数据,并不能马上查询到。

当然这里还要区分查询的方式,Elasticsearch 也有数据的查询以及搜索,这里的近实时强调的是搜索....

2 集群

在Elasticsearch 中,对用户来说集群是很透明的。你只需要指定一个集群的名字(默认是elasticsearch),启动的时候,凡是集群是这个名字的,都会默认加入到一个集群中。

你不需要做任何操作,选举或者管理都是自动完成的。

对用户来说,仅仅是一个名字而已!

3 节点

跟集群的概念差不多,Elasticsearch 启动时会设置这个节点的名字,一个节点也就是一个Elasticsearch 得服务器。

默认会自动生成一个名字,这个名字在后续的集群管理中还是很有作用的,因此如果想要手动的管理或者查看一些集群的信息,最好是自定义一下节点的名字。

4 索引

索引是一类文档的集合,所有的操作比如索引(索引数据)、搜索、分析都是基于索引完成的。

在一个集群中,可以定义任意数量的索引。

5 类型

类型可以理解成一个索引的逻辑分区,用于标识不同的文档字段信息的集合。但是由于Elasticsearch 还是以索引为粗粒度的单位,因此一个索引下的所有的类型,都存放在一个索引下。这也就导致不同类型相同字段名字的字段会存在类型定义冲突的问题。

在2.0之前的版本,是可以插入但是不能搜索;在2.0之后的版本直接做了插入检查,禁止字段类型冲突。

6 文档

文档是存储数据信息的基本单元,使用json来表示。

7 分片与备份

在Elasticsearch 中,索引会备份成分片,每个分片是独立的lucene索引,可以完成搜索分析存储等工作。

现在是不是对Elasticsearch 的了解更深了一点?想不想实际使用一下?扫描下方二维码或者点击“阅读原文”马上去云市使用Elasticsearch !

时间: 2024-11-24 04:37:07

实时的分布式搜索和分析引擎——Elasticsearch的相关文章

Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,elasticsearch安装配置及中文分词

http://fuxiaopang.gitbooks.io/learnelasticsearch/content/  (中文) 在Elasticsearch中,文档术语一种类型(type),各种各样的类型存在于一个索引中.你也可以通过类比传统的关系数据库得到一些大致的相似之处: 关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) Elasticsearch ⇒ 索引 ⇒ 类型 ⇒ 文档 ⇒ 字段(Fields)一个Elasticsearch集群可以包含多个索引(数据库),也就是说其

用ElasticSearch搭建自己的搜索和分析引擎

导语:互联网产品中的检索功能随处可见.当你的项目规模是百度大搜|商搜或者微信公众号搜索这种体量的时候,自己开发一个搜索引擎,加入各种定制的需求和优化,是非常自然的事情.但如果只是普通的中小型项目甚至创业团队|创业项目,直接拿轮子则是更合理的选择.ElasticSearch就是这样一个搜索引擎的轮子.更重要的是,除去常规的全文检索功能之外,它还具有基础的统计分析功能(最常见的就是聚合),这也让他变得更加强大和实用.还在用数据库的like来实现产品的全文检索吗?抛弃她,用ElasticSearch吧

Elasticsearch分布式搜索

ElasticSearch之介绍 一 Elasticsearch产生背景 1.1 大规模数据如何检索 如:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:1)用什么数据库好?(mysql.oracle.mongodb.hbase…)2)如何解决单点故障:(lvs.F5.A10.Zookeep.MQ)3)如何保证数据安全性:(热备.冷备.异地多活)4)如何解决检索难题:(数据库代理中间件:mysql-proxy.Cobar.MaxScale等;)5)如何

elasticsearch分布式搜索配置文件详解

Elasticsearch是一个开源的分布式实时搜索与分析引擎,支持云服务.它是基于Apache Lucene搜索引擎的类库创建的,提供了全文搜索能力.多语言支持.专门的查询语言.支持地理位置服务.基于上下文的搜索建议.自动完成以及搜索片段(snippet)的能力.Elasticsearch支持RESTful的API,可以使用JSON通过HTTP调用它的各种功能,包括搜索.分析与监控.下面是讲述了elasticsearch分布式搜索配置文件各类参数的具体含义. elasticsearch的con

[Elasticsearch] 分布式搜索

分布式搜索 本文翻译自Elasticsearch官方指南的Distributed Search Execution一章. 在继续之前,我们将绕一段路来谈谈在分布式环境中,搜索是怎样运行的.和在分布式文档存储(Distributed Document Store)中讨论的基本CRUD操作相比,这个过程会更加复杂一些. 一个CRUD操作会处理一个文档,该文档有唯一的_index,_type和路由值(Routing Value,它默认情况下就是文档的_id)组合.这意味着我们可以知道该文档被保存在集群

从分布式分析引擎到分布式存储

事因偶然,开始了apache storm源码的阅读历程,即而了解到apache spark一时风头无两,又一头坠入到无比陌生的scala世界,开始了艰涩的spark源码阅读之路. 阅读不是目的,用这些工具来解决实际中的问题才是根本,恰好由于通信公司利润下降,行业景气度不如之前,人心思变,于是在没做太多思量的情况下,开始了真正的数据搬运工生涯. 分布式分析引擎 由于一开始只对spark和storm有所了解,所以用来做一些简单的批处理分析和实时数据分析,还是能够凑效的,但是一遇到规则复杂的业务系统,

使用Akka、Kafka和ElasticSearch等构建分析引擎 -- good

本文翻译自Building Analytics Engine Using Akka, Kafka & ElasticSearch,已获得原作者Satendra Kumar和网站授权. 在这篇文章里,我将和大家分享一下我用Scala.Akka.Play.Kafka和ElasticSearch等构建大型分布式.容错.可扩展的分析引擎的经验. 我的分析引擎主要是用于文本分析的.输入有结构化的.非结构化的和半结构化的数据,我们会用分析引擎对数据进行大量处理.如下图所示为第一代架构,分析引擎可以用REST

[转]分布式搜索elasticsearch几个概念解析

Document 在Elasticsearch世界(或者Lucene世界中),Document是主要的实体,文档这个单词有特殊的含义.它指的是在Elasticsearch中被存储到唯一ID下的由最高级或者根对象 (root object )序列化而来的JSON.Elasticsearch的documents最终被存储为Lucene documents. 文档元数据 一个文档不只包含了数据.它还包含了元数据(metadata) —— 关于文档的信息.有三个元数据元素是必须存在的,它们是: 名字 说

ElasticSearch(8)-分布式搜索

分布式搜索的执行方式 在继续之前,我们将绕道讲一下搜索是如何在分布式环境中执行的. 它比我们之前讲的基础的增删改查(create-read-update-delete ,CRUD)请求要复杂一些. 注意: 本章的信息只是出于兴趣阅读,使用Elasticsearch并不需要理解和记住这里的所有细节. 阅读这一章只是增加对系统如何工作的了解,并让你知道这些信息以备以后参考,所以别淹没在细节里. 一个CRUD操作只处理一个单独的文档.文档的唯一性由_index, _type和routing-value