
第2章 Elasticsearch原理与实现
Elastic官方对Elasticsearch的定义是这样的:Elasticsearch is a highly scalable open-source full-text search and analytics engine。可见在官方定义中,Elasticsearch被视为一种高度可伸缩的全文检索(Full-text Search)和分析引擎,这体现了Elasticsearch具有强大的文档检索和分析能力。Elasticsearch底层基于Apache Lucene,而Lucene本身是一种早就闻名于世的全文检索引擎和工具包。Elasticsearch在此基础之上进行了封装,不仅继承了Lucene所有优点,还大大降低了使用和开发的复杂度。所以从这个角度来说,Elasticsearch是一种全文检索和分析引擎。
但事实上,Elasticsearch也包含了强大的数据存储能力,它所检索的数据不依赖于外部数据源,而由Elasticsearch统一管理。不仅如此,Elasticsearch还具备创建数据分片(Shard)和数据副本(Replica)的能力,可以满足大数据量下的高可用性和高性能要求。所以在许多文献中,Elasticsearch也被归类为一种基于文档的NoSQL数据库,类似于MongoDB。事实上,正是这种优秀的存储能力,才使Elasticsearch具备了强大的检索和分析能力。
对于初学者来说,上述内容中或许有不少术语不容易理解,比如全文检索、分片、副本等。不仅如此,Elasticsearch中还有许多独特概念,比如索引、映射、类型、文档、字段等。如果不能正确理解这些概念的含义,学习后面的内容就会很吃力。本章会首先将这些概念及其背后的原理与实现介绍清楚,为后续实际应用Elasticsearch做好准备。