Elasticsearch 源码学习(1)源码编译调试

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch 源码学习(1)源码编译调试

image.pngimage.png

版本要求

我们编译的是 Elasticsearch 7.14.1 版本,在源码根目录下的 CONTRIBUTING.md 文件中说明了 IntelliJ 和 JDK 的版本要求,Gradle 我们可以不必自行安装,在编译的时候会自动使用源码根目录下 gradlew 脚本进行安装。

  • IntelliJ 2020.1 以上
  • JDK 16
  • Gradle 7.1

配置 JDK 环境

这里推荐使用 sdkman 来管理不同的 JDK 版本,sdkman 是一个用于管理多个软件开发工具包并行版本的工具,它提供了一个方便的命令行界面 (CLI) 和 API,用于列出、安装、切换、删除软件版本。

sdkman 对 Java 开发人员特别有用,支持 JVM 的 SDK,例如 Java,Groovy,Scala,Kotlin,Gradle,Maven,Spring Boot 和许多其他工具。sdkman 支持所有主要的 Unix 操作系统,可以安装在 macOS,Linux,WSL,Cygwin,Solaris,FreeBSD 等系统上,并且支持 bash 和 zsh。

你也可以按照常规的方式安装 Java,只要保证 JDK 是 16 版本即可。

安装 sdkman

执行以下命令安装 sdkman:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

查看 sdk 版本:

❯ sdk version
==== BROADCAST =================================================================
* 2021-09-16: leiningen 2.9.7 available on SDKMAN!
* 2021-09-11: grails 5.0.0-RC3 available on SDKMAN!
* 2021-09-07: mvnd 0.6.0 available on SDKMAN! https://git.io/Jucy6
================================================================================
SDKMAN 5.12.4

安装 JDK

查看支持的 Java 版本:

Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Corretto      |     | 17.0.0.35.2  | amzn    |            | 17.0.0.35.2-amzn
               |     | 17.0.0.35.1  | amzn    |            | 17.0.0.35.1-amzn
               |     | 16.0.2.7.1   | amzn    |            | 16.0.2.7.1-amzn
               |     | 11.0.12.7.2  | amzn    |            | 11.0.12.7.2-amzn
               |     | 8.302.08.1   | amzn    |            | 8.302.08.1-amzn
 GraalVM       |     | 21.2.0.r16   | grl     |            | 21.2.0.r16-grl
               |     | 21.2.0.r11   | grl     |            | 21.2.0.r11-grl
               |     | 20.3.3.r11   | grl     |            | 20.3.3.r11-grl
               |     | 19.3.6.r11   | grl     |            | 19.3.6.r11-grl
 Java.net      |     | 18.ea.15     | open    |            | 18.ea.15-open
               |     | 18.ea.2.lm   | open    |            | 18.ea.2.lm-open
               |     | 17           | open    |            | 17-open
               |     | 17.ea.3.pma  | open    |            | 17.ea.3.pma-open
               |     | 16.0.2       | open    |            | 16.0.2-open
               |     | 11.0.2       | open    |            | 11.0.2-open
 Liberica      |     | 17.0.0.fx    | librca  |            | 17.0.0.fx-librca
               |     | 17.0.0       | librca  |            | 17.0.0-librca
               |     | 16.0.2.fx    | librca  |            | 16.0.2.fx-librca
               |     | 16.0.2       | librca  |            | 16.0.2-librca
               |     | 11.0.12.fx   | librca  |            | 11.0.12.fx-librca
               |     | 11.0.12      | librca  |            | 11.0.12-librca
               |     | 8.0.302.fx   | librca  |            | 8.0.302.fx-librca
               |     | 8.0.302      | librca  |            | 8.0.302-librca
 Liberica NIK  |     | 21.2         | nik     |            | 21.2-nik
 Microsoft     |     | 16.0.2.7.1   | ms      |            | 16.0.2.7.1-ms
               |     | 11.0.12.7.1  | ms      |            | 11.0.12.7.1-ms
 SapMachine    |     | 17           | sapmchn |            | 17-sapmchn
               |     | 16.0.2       | sapmchn |            | 16.0.2-sapmchn
               |     | 11.0.12      | sapmchn |            | 11.0.12-sapmchn
 Semeru        |     | 16.0.2       | sem     |            | 16.0.2-sem
               |     | 11.0.12      | sem     |            | 11.0.12-sem
               |     | 8.0.302      | sem     |            | 8.0.302-sem
 Temurin       |     | 16.0.2       | tem     |            | 16.0.2-tem
               |     | 11.0.12      | tem     |            | 11.0.12-tem
               |     | 8.0.302      | tem     |            | 8.0.302-tem
 Trava         |     | 11.0.9       | trava   |            | 11.0.9-trava
               |     | 8.0.232      | trava   |            | 8.0.232-trava
 Zulu          |     | 17.0.0       | zulu    |            | 17.0.0-zulu
               |     | 17.0.0.fx    | zulu    |            | 17.0.0.fx-zulu
               |     | 16.0.2       | zulu    |            | 16.0.2-zulu
               |     | 16.0.2.fx    | zulu    |            | 16.0.2.fx-zulu
               |     | 11.0.12      | zulu    |            | 11.0.12-zulu
               |     | 11.0.12.fx   | zulu    |            | 11.0.12.fx-zulu
               |     | 8.0.302      | zulu    |            | 8.0.302-zulu
               |     | 8.0.302.fx   | zulu    |            | 8.0.302.fx-zulu
               |     | 7.0.312      | zulu    |            | 7.0.312-zulu
================================================================================
Use the Identifier for installation:
    $ sdk install java 11.0.3.hs-adpt

安装 OpenJDK 16 版本:

sdk install java 16.0.2-open

查看当前 Java 版本:

#查看 sdkman 管理的版本
❯ sdk current
Using:
java: 16.0.2-open
#查看当前 java 版本
❯ java -version
openjdk version "16.0.2" 2021-07-20
OpenJDK Runtime Environment (build 16.0.2+7-67)
OpenJDK 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)

关于 sdkman 的管理命令可以参考 sdkman usage。

源码导入 IntelliJ Idea

打开 IntelliJ Idea,点击 Open or Import。image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

mkdir -p  /Users/chengzhiwei/data/elasticsearch/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.1-darwin-x86_64.tar.gz
tar -xzvf elasticsearch-7.14.1-darwin-x86_64.tar.gz -C /Users/chengzhiwei/data/elasticsearch
#创建数据存放目录
mkdir /Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1/data

点击右上角 Edit Configurations,创建一个 Application 启动配置。image.pngimage.png

#上面 Elasticsearch 发行版的路径
-Des.path.home=/Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1
-Des.path.conf=/Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1/config
#安全策略
-Djava.security.policy=/Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1/config/elasticsearch.policy
-Dlog4j2.disable.jmx=true
-Xmx2g
-Xms2g
  • Use classpath of module:选择启动类所在 module。
  • JRE:选择安装的 JDK 16。image.pngimage.pngimage.png
grant {
 permission javax.management.MBeanTruxtPermission "register";
 permission javax.management.MBeanServerPermission "createMBeanServer";
 permission java.lang.RuntimePermission "createClassLoader";
 permission java.lang.RuntimePermission "getClassLoader";
 permission java.lang.RuntimePermission "setContextClassLoader";
    permission org.elasticsearch.ThreadPermission "modifyArbitraryThreadGroup";
};

点击启动。image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

  • [idea运行es7.13.2报Unknown codebases异常] (https://elasticsearch.cn/question/11513)
  • [ElasticSearch-7.8.0 源码编译调试 (详细)] (https://zhuanlan.zhihu.com/p/188725714)
  • [讲得最明白的Elasticsearch源码调试环境搭建教程] (https://cloud.tencent.com/developer/article/1683325)
  • [IntelliJ IDEA远程调试Elasticsearch6.1.2] (https://blog.csdn.net/boling_cavalry/article/details/89417650)


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
自然语言处理 Java 网络架构
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
这篇文章是关于如何自定义Elasticsearch的ik分词器配置以满足特定的中文分词需求。
159 0
elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
|
2月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
150 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
2月前
|
自然语言处理 搜索推荐 关系型数据库
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
这篇文章是关于Elasticsearch全文搜索引擎的学习指南,涵盖了基本概念、命令风格、索引操作、分词器使用,以及数据的增加、修改、删除和查询等操作。
37 0
elasticsearch学习六:学习 全文搜索引擎 elasticsearch的语法,使用kibana进行模拟测试(持续更新学习)
|
2月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
231 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
2月前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
134 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
2月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
232 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
7月前
|
JSON 监控 Java
Elasticsearch 8.X reindex 源码剖析及提速指南
Elasticsearch 8.X reindex 源码剖析及提速指南
108 0
|
4月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码【完结篇】
74 0
|
7月前
|
存储 缓存 自然语言处理
Elasticsearch框架学习的难点和重点有哪些
Elasticsearch是基于Lucene的开源搜索引擎,广泛应用于全文检索和日志分析。学习重点包括理解节点、集群、索引、分片和副本等基本概念,掌握数据索引、查询DSL、聚合和性能优化。倒排索引和分词器是全文搜索的核心,集群管理和监控对于稳定性至关重要。实践中需根据数据量和查询模式优化分片策略,利用缓存提升搜索性能。学习Elasticsearch要结合实际项目,关注官方文档和社区资源。【5月更文挑战第6天】
|
7月前
|
Kubernetes Java 索引
Elasticsearch 源码探究 001——故障探测和恢复机制
Elasticsearch 源码探究 001——故障探测和恢复机制
105 0