1.Elasticsearc 是什么

    Elasticsearch是一个基于Lucene构建的开源、实时、分布式、RESTful接口的全文搜索引擎和分析引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,Elasticsearch能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。它是一个提供了分布式多用户能力的全文搜索引擎,通常作为具有复杂搜索场景情况下的核心发动机,可以用于全文检索、结构化检索和分析,并能将这三者结合起来,是现在使用最广的开源搜索引擎。

 

2.Lucene和elasticsearch的前世今生

    lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构)

    (1)分布式的文档存储引擎。

    (2)分布式的搜索引擎如分析引擎。

    (3)分布式,支持PB级数据。

    开箱即用,优秀的默认参数,不需要 任何额外设置,完全开源。

    关于elasticsearch的一个传说,有一个程序员失业了,陪着自己老婆去英国伦敦学习厨师课程。程序员在失业期间想给老婆写一个菜谱搜索引擎,觉得lucene实在太复杂了,就开发了一个封装了lucene的开源项目,compass。后来程序员找到了工作,是做分布式的高性能项目的,觉得compass不够,就写了elasticsearch,让lucene变成分布式的系统。

 

3.Elasticsearch 与 Lucene 比较

    Lucene架构虽然是目前最先进最基础的全文搜索引擎技术,但是缺乏分布式相关的管理,Lucene只是一个框架,要充分利用它的功能,需要使用JAVA,并且在程序中集成Lucene。需要很多的学习了解,才能明白它是如何运行的,Lucene确实非常复杂。并且逐渐不适应目前越来越大的数据量,和越来越复杂的应用需求。

    Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。

 

4.Elasticsearch 与 sole 比较

    分布式管理:Elasticsearch自身带有分布式协调管理功能,而Solr需要利用第三方组件Zookeeper进行分布式管理,维护成本高。

    高性能:Elasticsearch 实现分布式文件存储、分布式信息检索,且并发处理能力强。在高并发处理大数据量的时候,Sorl处理能力差,不稳定,经常会出现OOM,而ES相对稳定,效率高于Sorl。

    更新及时性:公安业务需要掌握最新数据,Elasticsearch具有瞬实时性,可以实现近实时的索引建立与信息检索,实时搜索效率高。而Solr在更新数据、建立索引时,会产生大量的IO阻塞,搜索效率下降,实时搜索效率不高。

 

5.Elasticsearch的优点

    • Elasticsearch是基于Java开发的,这使得它在几乎每个平台上都兼容。

    • Elasticsearch是实时的,换句话说,一秒钟后,添加的文档可以在这个引擎中搜索得到。

    • Elasticsearch是分布式的,这使得它易于在任何大型组织中扩展和集成。

    • 通过使用Elasticsearch中的网关概念,创建完整备份很容易。

    • 与Apache Solr相比,在Elasticsearch中处理多租户非常容易。

    • Elasticsearch使用JSON对象作为响应,这使得可以使用不同的编程语言调用Elasticsearch服务器。

    • Elasticsearch支持几乎大部分文档类型,但不支持文本呈现的文档类型。

 

6.Elasticsearch的缺点

    • Elasticsearch在处理请求和响应数据方面没有多语言和数据格式支持(仅在JSON中可用),与Apache Solr不同,Elasticsearch不可以使用CSV,XML等格式。

    • Elasticsearch也有一些伤脑的问题发生,虽然在极少数情况下才会发生。

 

7.Elasticsearch 主要概念

    • 集群(Cluster)一组拥有共同的 cluster name 的节点。

    • 节点(Node) 集群中的一个 Elasticearch 实例。

    • 索引(Index) 相当于关系数据库中的database概念,一个集群中可以包含多个索引。这个是个逻辑概念。

    • 主分片(Primary shard) 索引的子集,索引可以切分成多个分片,分布到不同的集群节点上。分片对应的是 Lucene 中的索引。

    • 副本分片(Replica shard)每个主分片可以有一个或者多个副本。

    • 类型(Type)相当于数据库中的table概念,mapping是针对 Type 的。同一个索引里可以包含多个 Type。

    • Mapping 相当于数据库中的schema,用来约束字段的类型,不过 Elasticsearch 的 mapping 可以自动根据数据创建。

    • 文档(Document) 相当于数据库中的row。

    • 字段(Field)相当于数据库中的column。

    • 分配(Allocation) 将分片分配给某个节点的过程,包括分配主分片或者副本。如果是副本,还包含从主分片复制数据的过程。

 

8.ElasticSearch的应用场景

    • 维基百科

    • The Guardian(国外新闻网站)

    • Stack Overflow(国外的程序异常讨论论坛)

    • GitHub(开源代码管理)

    • 电商网站

    • 日志数据分析

    • 商品价格监控网站

    • BI系统

    • 站内搜索

 

9.Elasticsearch和RDBMS之间的比较

(1)Elasticsearch中的概念与关系型数据库对比。

Relational DB  ⇒ Databases ⇒ Tables ⇒ Rows         ⇒ Columns

关系型数据库       数据库           表             行                    列  

Elasticsearch  ⇒ Indices       ⇒ Types  ⇒ Documents ⇒ Fields

Els                        索引               类型        文档                 域(字段)

(2)在Elasticsearch中,所有的字段缺省都建了索引,也就是说每一个字段都有一个倒排索引,用于快速查询。

         而在关系型数据库为特定列增加一个索引,例如B-Tree索引来加速检索。

(3)Elasticsearch 支持http协议(json格式)(9200端口)、thrift、servlet、memcached、zeroMQ等的传输协议。传统关系型数据库不支持。

(4)Elasticsearch 支持分片和复制,从而方便水平分割和扩展,复制保证了Elasticsearch的高可用与高吞吐。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐