V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
goodrain2016
V2EX  ›  问与答

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

  •  
  •   goodrain2016 · 2016-10-18 15:15:39 +08:00 · 1530 次点击
    这是一个创建于 2760 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 到底有哪些优点呢?
    

    Elasticsearch 是分布式的。不需要其他组件,分发是实时的,被叫做” Push replication ”。

    Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。

    处理多租户( multitenancy )不需要特殊配置,而 Solr 则需要更多的高级设置。

    Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。

    各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。

    要了解 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 !
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5863 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 06:35 · PVG 14:35 · LAX 23:35 · JFK 02:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.