企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Elasticsearch学习笔记(一)简介 ## 什么是Elasticsearch? 以前我们学过标准信息搜索工具Lucene,但它不能够在一个合理的时间内存储和检索海量数据,不具备良好的可扩展性,一般也不适合分布式大数据搜索、挖掘和云计算环境。 为了满足大数据平台下的信息检索,并且高可靠性的性能要求,Elasticsearch就应运而生。 - 分布式实时文件存储 - 实时分析的分布式搜索引擎 - 可以扩展到上百台服务器 作为开源分布式搜索和数据处理平台,Elasticsearch不仅仅是一个数据库,同时它还是一个基于Lucene构建的开源、分布式、RESTful信息检索框架,能够实时搜索,并且稳定可靠,EIK架构为编程人员提供了一个分布式的可扩展的信息检索和基于Lucene的全文搜索,基于Logstash的日志处理机制、基于Kibana的挖掘结果可视化的的机制。 Elasticsearch的支持插件机制,如与mongoDB、couchDB同步的River插件、中文分词插件、Hadoop插件、脚本插件等。 ## 与Lucene的区别? Elasticsearch执行搜索的速度更快,可以简单的通过HTTP方式,使用JSON来操作数据,并支持对分布式集群的搜索。 Elasticsearch对分布式支持,其索引功能分拆为多个分片,每个分片可有0个或多个副本,集群中的每个数据节点都可承载一个或多个分片,并且能协调和处理各种操作;负载再平衡(Rebalancing)和路由(Routing)在大多数情况下都是自动完成的。 ## 相关概念: (1)Cluster和Node——Elasticsearch中的Cluster是对外提供搜索服务的集群,组成这个集群的各个节点叫Node.集群Cluster是一组有着相同cluster.name的节点,他们协同工作,互相分享数据,提供了故障转移和扩展的功能。Node又分为IndexNode、DataNode等。节点之间是对等关系的(去中心化),而弱化的Master节点只不过多了维护集群状态的功能。 (2)Shards——Elasticsearch将一个完整的索引分成若干个部分,每个部分就是一个Shards,每个Shard实际上就是一个基于Lucene的索引。Shards的数量一般在索引创建前制定,且索引创建后不能更改。 (3)Replicas——Replics是索引的冗余备份,可用于防止数据丢失或用来做负载均衡。一般地,Elasticsearch会自动对索引请求进行负载均衡。 (4)Recover——在有节点加入或退出集群Cluster或故障节点重新启动时,Elasticsearch会根据机器的负载情况,对索引分片Shards进行重新分配。 (5)River——River是一个运行在Elasticsearch集群内部的插件,主要用来从外部获取以后数据,然后在Elasticsearch里创建索引。常见的有MongoDB、JDBC river Plugin等。 (6)Gateway——是Elasticsearch索引数据快照的存储方式,当Elasticsearch集群关闭再重新启动时,就会从Gateway中读取索引数据快照。Elasticsearch支持多种类型的Gateway,本地文件系统、分布式文件系统、Hadoop的HDFS (7)Discover.zen——Discover.zen代表Elasticsearch的自动发现节点机制。Zen用来实现节点自动发现和Master节点选举,Master节点负责节点的加入和退出以及分片shard的重新分配。 (8)Transport——Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互的,同时支持HTTP协议(JSON格式)、Thrift、Servlet等传输协议。 (9)Index、Type、Document、Field——Index是数据存储的地方,可以快速高效的堆索引中的数据进行全文索引,类似于RDBMS数据库中的Database;在Index下一般会有多个存储数据的Type,Type类似于Database的table,用来存放具体数据;Document类似于关系数据库的一行数据,在一个Type里的每一个Document都有一个唯一的ID作为区分。 (10)Mapping——Mapping定义索引下的Type的字段处理规则,如索引如何建立、索引数据类型、是否保存原始索引JSON文档,是否需要进行分词处理、如何进行分词处理等。一般地,一个索引文件下能存储不同映像(Mapping)的类型文件(Types). 从图中可以看出,Elasticsearch可以接受来自本机、共享以及云平台上的数据;在Lucene提供的基本功能上,通过构建分布式索引,完成对大数据的索引、搜索等处理。其中,River作为Elasticsearch内部运行的插件,获取其他存储方式的数据到Elasticsearch.Zen用来作为节点自动发现和Master节点选举;EC2(Elastic Copute Cloud)借由Web服务的方式让使用者可以弹性的运行自己的Amazon机器映像,提供可调整的云计算能力。通过提供的Thrift、Memcached、HTTP等方式使用Elasticsearch的API。在顶层,用户可以基于RESTful和客户端的方式通过Elasticsearch API完成数据操作、管理等操作。 ## RESTful接口URL的格式是? curl -X<VERB> '<PROTOCOL>://<HOST>/<PATH>?<QUERY_STRING>' -d '<BODY>' - VERB HTTP方法:GET(获取), POST(更新), PUT(创建), HEAD, DELETE(删除) - PROTOCOL: http或者https协议(只有在Elasticsearch前面有https代理的时候可用) - HOST: Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost - PORT: Elasticsearch HTTP服务所在的端口,默认为9200 - QUERY_STRING: 一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据 - BODY: 一个JSON格式的请求主体(如果请求需要的话)![](https://box.kancloud.cn/2016-03-10_56e11d2413506.jpg) 这个是Elasticsearch的head插件,从这里可以看出主节点是Banshee,共用四个节点,71个主分片,至于Elasticsearch的插件机制、API操作等将在以后逐步的介绍。