zoukankan      html  css  js  c++  java
  • ES-什么是elasticsearch

    前言

    观今宜鉴古,无古不成今。
    在学习elasticsearch之前,我们要知道,elasticsearch是什么?为什么要学习elasticsearch?以及用它能干什么?

    关于elasticsearch

    现在,你还离得开搜索吗?无论是Google还是百度提供的搜索入口,还是项目自己的搜索,比如QQ提供的搜索入口等等,都大大的方便了我们的工作、生活。但是你有没有想过——搭建属于自己的搜索服务,应用于你的博客项目、公司项目……
    无论你想不想,都要学习!因为随着公司业务的增长,数据也爆炸性增长。对于数据的处理、日志分析,如果还采用传统的方法,这恐怕是灾难性的。所以,我们是时候学习一个先进的搜索引擎了。
    Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
    但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
    Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
    你以为这些就完了?elasticsearch除了Lucene和全文搜索,我们还可以描述它:

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

    并且,这些功能都被集成到一个服务里面,elasticsearch也提供的与其它语言的接口,其中包括:

    • Java
    • JavaScript
    • Groovy
    • .NET
    • PHP
    • Perl
    • Python
    • Ruby
    • 以及社区贡献的更多接口

    使用我们喜欢的语言通过RESTful API接口,访问9200端口,就可以与elasticsearch玩耍了。
    上手elasticsearch非常容易,它提供了许多合理的缺省值,并对初学者隐藏了复杂的搜索引擎理论。它开箱即用(安装即可使用),只需很少的学习既可在生产环境中使用。
    随着越学越深入,还可以利用Elasticsearch更多高级的功能,整个引擎可以很灵活地进行配置。可以根据自身需求来定制属于自己的Elasticsearch。

    elasticsearch的前世今生

    多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
    直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。

    后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
    第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。
    Shay的妻子依旧等待着她的食谱搜索……

    elasticsearch:面向文档

    我们知道,关系型数据库以记录和行的形式存储数据,但是在elasticsearch中,是以文档的形式存储数据。
    但区别在于,文档要比数据表的行更加灵活。因为文档可以是多层次的,它(文档)鼓励你将属于一个逻辑实体的数据保存在同一个文档中,而不是散落在各个表的不同行中。这样查询效率很高,因为我们无需连接其他的表,我们学习关系型数据库时,一定知道连表查询(尤其是连接多张表)是多么的费时吧!
    我们将在后续文章做更多的讲解。

    没有成熟的案例?

    之前有人说,elasticsearch的缺点之一是没有成熟的案例加持,那我们就来看看elasticsearch都有哪些成熟的案例:

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

    但是Elasticsearch并不只是面向大型企业的,它还帮助了很多类似DataDog以及Klout的创业公司进行了功能的扩展。
    所以,elasticsearch可以灵活的应用于我们的项目中。

    如何学好elasticsearch

    除了万能的百度和Google 之外,我们还有一些其他的学习途径:

    • elasticsearch官方文档:这个比较好点,可以多多参考
    • elasticsearch博客:这个吧,看看就行
    • elasticsearch社区:社区还是很好的
    • elasticsearch视频:包括入门视频什么的
    • elasticsearch实战:该书籍的质量还是不错的。
    • elasticsearch权威指南:同样的,这个也不错。

    最后,你一定很好奇,elasticsearch索引能处理多大的数据

    一个很好地问题,不幸的是,单一索引的极限取决于存储索引的硬件、索引的设计、如何处理数据以及你为索引备份了多少副本。

    通常来说,一个Lucene索引(也就是一个elasticsearch分片)不能处理多于21亿篇文档,或者多于2740亿的唯一词条。但达到这个极限之前,我们可能就没有足够的磁盘空间了!
    当然,一个分片如何很大的话,读写性能将会变得非常差。

    扯了半天的淡,让我们开始一个灵活的学习之旅吧

  • 相关阅读:
    matplotlib formatters
    matplotlib locators
    mysql> 12 simple but staple commands
    mysql--> find your databases' local position
    ubuntu16.04安装caffe常见问题及其解决方案
    gitlab使用说明
    vim配置摘要
    shell 提示符个性化设置
    python拼接参数不确定的SQL时防注入问题--条件语句最后拼入
    python_opencv ——图片预处里(二)
  • 原文地址:https://www.cnblogs.com/rixian/p/10746403.html
Copyright © 2011-2022 走看看