ElasticSearch源代码解析之Client端

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 看看EalsticSearch的Client端,作为入口,它代表了Client和Server交互的方式。

如前面在架构思路中的反向思考一样,先通过Client端来看ElasticSearch的设计。
再啰嗦一句:我认为从Client或者说从API用户角度出发来看一个系统最合适的入手点,API的设计是一个非常困难的东西,要平衡易用性,一致性(非数据意义上的一致性),完整性。

简单的代码结构理一下,直接在_client_rest-high-level项目里找到org.elasticsearch.client.RestHighLevelClient这个类,它也是ElasticSearch以后主推的Client,其它的Client,如org.elasticsearch.client.transport.TransportClient会在后续版本7中不建议使用,并在版本8中移除。

org.elasticsearch.client.IndicesClient基于RestHighLevelClient提供了更简单的功能封装,主要包括delete,createIndex等操作,细分析这些方法,发现关键在于Request这个参数,用来清楚地定义Client期望Server所完成的工作,其中有意思的是一些Request继承自org.elasticsearch.action.support.master.MasterNodeRequest,这也说明请求至少可以分为两大类,一类是明确需要MasterNode来完成的,比如delete和create这种操作,还有一类应该是不需要MasterNode来完成的。

这也验证了我前面的分析,就是由MasterNode来负责主要完成数据一致性问题的管理,而由DataNode进行查询等请求。
Request/Response应该是ElasticSearch中不算复杂,但内容特别庞杂的东西,它需要覆盖基本上所有的业务以及管理功能。
顺便吐槽一下,ElasticSearch中的Action,Request,Response太多了,而且很多名字类似,看得极其郁闷。

从client端的定义来看,基本就是通过一个Action来定义行为,Request和Response分别作为Client对Server的输入和输出。这种其实是非常典型的Command设计,即Server端核心轻量化,通过插件化的方式支持扩展,Command对应的扩展会注册很多Handler,然后每个Handler会负责处理相应的Command。非常简单有效的设计,唯一值得吐槽的就是ElasticSearch把Server项目搞得太大,找起来太复杂。

下面带着这个思路再去看Server端代码。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
存储 搜索推荐 数据挖掘
ElasticSearch架构介绍及原理解析
ElasticSearch架构介绍及原理解析
98 0
|
2月前
|
JavaScript 前端开发
Vue 应用 main.js 里的源代码解析
Vue 应用 main.js 里的源代码解析
26 0
|
6月前
|
存储 关系型数据库 数据库
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
ElasticSearch深度解析入门篇:高效搜索解决方案的介绍与实战案例讲解,带你避坑
|
25天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
74 0
|
4月前
|
SQL 数据采集 Java
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
Java【代码分享 02】商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+获取及解析源代码)包含csv和sql格式数据下载可用
41 0
|
9月前
|
存储 算法 API
Elasticsearch评分相关度算法解析
Elasticsearch评分相关度算法解析
105 0
|
7月前
|
Java API 数据安全/隐私保护
Elasticsearch Java API Client 开发
本场景主要介绍如何使用 Elasticsearch Java API Client 进行开发,实现常用的 CRUD 操作。
146 0
|
10月前
|
存储 算法 Java
Go源代码解析-slice.go文件
Go源代码解析-slice.go文件
62 0
|
10月前
|
存储 安全 算法
Go源代码解析-sema.go文件
Go源代码解析-sema.go文件
52 0
|
15天前
|
数据可视化 索引
elasticsearch head、kibana 安装和使用
elasticsearch head、kibana 安装和使用

推荐镜像

更多