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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实时的分布式搜索和分析引擎——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 !

技术分享


以上是关于实时的分布式搜索和分析引擎——Elasticsearch的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 搜索引擎

es基础用法

Elasticsearch-基础介绍及索引原理分析

ElasticSearch

分布式全文检索引擎之ElasticSearch

干货 | 分布式全文检索引擎之ElasticSearch