一、概况:

Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎。无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene 只是一个库。想要使用它,你必须使用 Java 来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene 非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Elastic Search 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTFul API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。Elastic Search 不仅仅是 Lucene 和全文搜索,它还具有以下特性:

①    分布式的实时文件存储,每个字段都被索引并可被搜索

②    分布式的实时分析搜索引擎

③    可以扩展到上百台服务器,处理 PB 级结构化和非结构化数据

由于 Elastic Search 具有能够实时搜索、开源、稳定、快速、支持分布式等众多优点,所以许多国外著名的公司都在使用 Elastic Search。维基百科(Wikipedia)、StackOverflow、Github 等公司的全文检索、关键词高亮、实时键入搜索、自动纠错、相关内容推荐等功能都是基于 ElasticSearch 实现的。除此之外,ElasticSearch 也备受创业公司的青睐,它对机器的性能没有较严苛的要求,即使在普通 PC 机组成的集群中也可以正常运行。

二、原理简介:

        Elastic Search 结构示意图

在一个分布式Elastic Search集群中,有一个主节点(master),但是Elastic Search 是去中心化的,也就是说主节点是动态选举出来的,不存在单点故障的问题。节点与节点之间的通讯及节点之间的数据分配和平衡全部由Elastic Search 自动管理。Elastic Search 就是一个整体,主要有以下几个概念需要介绍一下。

Cluster:代表一个集群,集群中有多个节点。

节点(node):每一个运行实例都称为一个节点。所谓运行实例,也即是一个服务器进程。

Shards:索引分片,当面对海量数据时,其索引也会很大,因此我们需要把索引拆分成多个分片并将其分布在不同的节点上。这时我们在搜索海量数据时就可以实现分布式快速搜索了。

Replicas:索引副本,其作用是一方面提高系统的容错性,如果某个node 或者 Shards 不能工作了,Replicas 就可以快速恢复数据。另一方面,索引副本的存在还可以提高系统查询速度,因为 Elastic Search 具有负载均衡的功能,而索引副本可以代替索引分片进行搜索。

Recovery:代表数据恢复或者叫做数据重新分布,Elastic Search 可以重新分配索引分片以保证负载均衡。同时 Recovery 还可以自动恢复节点数据。

Gateway:代表着 Elastic Search索引快照存储方式,Elastic Search 默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway 对索引快照进行存储,当这个 Elastic Search 集群关闭再重新启动时就会从 gateway 中读取索引备份数据。

Transport:代表内部节点或集群与客户端交互的方式。

如上文所述,Elastic Search 内容检索集群还有如下几点优势:便捷的分布式安装部署,快速而强大的实时全文检索,能很好地融合 Hadoop 开发平台的存储集群。因此,这一分布式开源全文检索引擎框架成为许多大公司构建搜索引擎的首选。

最新文章

  1. 【学】jQuery的源码思路5——增加class的操作
  2. Nginx 笔记与总结(9)rewrite 重写规则
  3. 使用QtScript库解析Json数组例子
  4. SQL With(递归 CTE 查询)
  5. poj1201 Intervals【差分约束+SPFA】
  6. 【工具】JAVA 在单元读取文件并比较
  7. mac下virtualbox配置全网通
  8. ConcurrentLinkedQueue简介
  9. [TCP/IP] 网络层-抓包分析IP数据包首部
  10. js在前端json字符串和对象互相转化
  11. scrapy 基础
  12. 使用Word批量删除换行和空白行
  13. 一道面试题 包含了new的细节 和运算符的优先级 还有属性访问机制
  14. Zoomit的用法总结
  15. Python str list to list
  16. css的基础用法之标签选择
  17. CH3602 Counting Swaps
  18. Eclipse (JavaEE版)中修改web项目的访问路径
  19. MVC三者关系
  20. Java 锁机制总结

热门文章

  1. flask获取参数
  2. python面试题之docstring是什么?
  3. [轉]Linux Data Structures
  4. js中构造函数的原型添加成员的两种方式
  5. sync - 清空文件系统缓冲区
  6. spring 转换器和格式化
  7. JMeter4.0 IF Controller
  8. Service4
  9. (8)centos7 登录与关机
  10. SQL比较时间查询语句