elasticsearch 概述

从2012年开始接触elasticsearch到2013年工作中大规模应用可以说跟它有一段渊源。从14年开始断断续续的把它的源码看过一遍,总体感觉是,初看是云深不知处,渐渐的拨云见日,终于柳暗花明。看完不禁为作者的技术所折服,一个人完成如此系统,能写出如此优雅的代码真的是很不容易。这个系列是我阅读源码的比较,希望能为想要或者正在阅读es源码的各位带来一些帮助。这里首先说一下elasticsearch的概念和理论。接下来是对源码的分析。

elasticsearch 作为第一个基于lucene的分布式全文检索系统(solor分布式在它之后)从2010年发布到现在在全球得到了广泛的应用,也得到了广泛的认可,是当前最成功的开源系统之一。受到数据量爆发的驱动,lucene(solor)虽然性能在不断提升但是还是难以满足需求。将lucene优秀的全文检索功能和分布式相结合,将lucene索引纵向切分扩展,同时实现索引的分布式管理,于是诞生了如此优秀的分布式全文检索系统。

lucene作为一个优秀的开源全文检索系统被全球很多公司广泛应用,它严格按照全文检索理论实现。它的索引中存储有词到doc的倒排信息,同时也存储了文档到词的正向信息。它的实现也相当精妙,因此它有如此优秀的性能和如此良好的搜索效果。想了解它的详细信息请参考官方文档或者相关博客1

elasticsearch的一些概念:

shard:索引的切片,每个shard在功能上是一个完整的索引,能够进行独立的查询和索引工作

index:索引(逻辑上的),由多个shard组成。对索引的搜索和索引最终都是分散到shard上完成。

mapping:索引字段的配置,这里定义每个字段的类型名称,分词方式等。如果没有mapping,索引会自动生成每个字段的相关配置(可能不是你所需要的)使用默认分词。

type:对索引的划分,可以对比与关系数据库。index相当于数据库,type则相当于数据库里的表。type的实现实际上是由一个字段区分。

datanode:能够接收shard的节点,节点上可以存储多个索引的多个shard。

master:管理集群的节点。该节点只负责集群状态索引状态等元数据的维护。它可以是单独的节点也可以和一个数据节点共享一个JVM。

cluster:datanode和master就组成了集群。

以上的这些元素组成了一个完整的分布式全文检索系统。这里之所以要提到这些概念是因为它的代码上也是按照这些功能来实现的,便于以后的代码分析。想要了解elasticsearch的其它信息请参考官网2

1:lucene原理与代码分析

2:elasticsearch

 

posted @ 2017-03-02 22:56  zziawan  阅读(1273)  评论(0编辑  收藏  举报