Elasticsearch8.4安装及Java Api Client的使用

目录

简介

一、ElasticSearch安装

二、可视化界面(elasticserach-head)插件安装

三、Kibana的安装

四、ES 核心概念

五、IK分词器

六、Rest风格说明:ES推荐使用的

七、关于索引的操作

1、PUT命令

2、GET命令

3、POST命令

4、DELETE命令

八、关于文档的操作

九、整合SpringBoot,基于 Java API Client


简介

  1. ELK 是指 ElasticsearchLogstashKibana 三大开源框架。

    1. Elasticsearch 是一个基于 Lucene、分布式、Restful 交互方式的近实时搜索平台框架,简称 ES。

    2. LogstashELK 的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同的目的地(文件/MQ/redis/elasticsearch/kafka等)。

    3. Kibana 可以将 ES 的数据通过友好的页面展示出来,提供实时分析的功能。


一、ElasticSearch安装

  1. 官网下载:Past Releases of Elastic Stack Software | Elastic

  2. 解压目录:

    1. bin:启动文件;

    2. config:配置文件;

      1. log4g2:日志的配置;

      2. jvm.options:java虚拟机的配置,运行内存的修改;

      3. elasticsearch.yml:es的配置文件,默认端口9200;

    3. lib:依赖jar包;

    4. modules:功能模块;

    5. plugins:相关的插件;

  3. 启动服务:

    1. 说明:由于 ES8 默认开启了 ssl 认证,所以无法访问 9200 端口;

    2. 问题解决:进入 elasticsearch.yml 文件

      • 修改 xpack.security.enabled: false,默认为 true;

      • 新增 ingest.geoip.downloader.enabled: false,关闭定位的配置(有报错);

  4. 启动:elasticsearch.bat;

    1. 访问:http://127.0.0.1:9200,页面显示JSON字符串如下:

      {
        "name" : "LAPTOP-3G****8O",
        "cluster_name" : "elasticsearch",
        "cluster_uuid" : "pepFhZOUTGOlEvKxBEAu9A",
        "version" : {
          "number" : "8.4.0",
          "build_flavor" : "default",
          "build_type" : "zip",
          "build_hash" : "f56126089ca4db89b631901ad7cce0a8e10e2fe5",
          "build_date" : "2022-08-19T19:23:42.954591481Z",
          "build_snapshot" : false,
          "lucene_version" : "9.3.0",
          "minimum_wire_compatibility_version" : "7.17.0",
          "minimum_index_compatibility_version" : "7.0.0"
        },
       "tagline" : "You Know, for Search"
      }


二、可视化界面(elasticserach-head)插件安装

  1. 安装npm、node.js环境,因为这个插件是一个web项目,需要npm编译;

  2. 下载地址:GitHub - mobz/elasticsearch-head

  3. 编译启动:

     git clone git://github.com/mobz/elasticsearch-head.git
     cd elasticsearch-head
     npm install
     npm run start

  4. 访问地址:http://localhost:9100

  5. 跨域问题:不同的端口之间互相访问,如此处的9100端口访问9200端口,访问不到,即跨域。

  6. 解决:修改 elasticserach.yml注意:配置文件中不能存在中文,否则报错!

    # 增加新的参数,head插件可以访问es,跨域访问一定要配置
    http.cors.enabled: true
    http.cors.allow-origin: "*"

  7. 重新启动es及es-head:访问9100端口,并连接9200的es服务器;此时显示为健康状态;

  8. 菜单介绍:

    1. 概览:es服务器的基本情况;

    2. 索引:每个索引相当于一个数据库,内部存储的东西类似一张张的数据表;

    3. 数据浏览:查看索引中的内容;

    4. 查询:基本查询/复合查询(此处使用 Kibana 做查询);


三、Kibana的安装

  1. 官网:Kibana:数据的探索、可视化和分析 | Elastic

  2. 下载:注意要和 ES 的版本一致!同时也是一个web项目,需要安装 npm 环境;

  3. 编译启动:解压缩后,执行 bin 目录下的 kibana.bat 文件,启动Kibana;

  4. 访问:http://localhost:5601

  5. 汉化:修改配置文件 config 目录下的 kibana.yml,修改 i18n.local: "zh-CN",默认值为 "en"


四、ES 核心概念

1、索引;

2、字段类型(mapping);

3、文档(documents);

4、分片(倒排索引);

  1. elasticsearch是面向文档、关系行数据库和 elasticsearch 客观的对比;数据都是JSON格式。

    Relational DB ElasticSearch
    数据库(database) 索引(indices)
    表(table) 类型(types)
    行(row) 文档(documents)
    字段(column) 字段(fields)
  2. 物理设计:es在后台将每个索引划分成多个分片,每个分片可以在集群中的不同服务器间迁移

  3. 倒排索引:es使用的是倒排索引结构,采用 Lucene 倒排索引作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表;

  4. 在elasticsearch中,索引被分为多个分片,每份分片是一个Lucene的索引。所以一个elasticsearch索引是由多个Lucene索引组成的。


五、IK分词器

  1. 什么是IK分词器?

    1. 分词:把一段中文或字符串划分成一个个的关键字,搜索的时候会将输入的信息进行分词,去和数据库或索引库中的分词信息进行匹配。

    2. IK分词器:中文分词是将每一个汉字看成一个词,这时就需要安装IK分词器去解决这个问题。

    3. IK分词器提供了两个算法:

<think>好的,用户之前遇到了Elasticsearch创建索引时的media_type_header_exception错误,已经提供了解决方案。现在用户的新问题是在使用Elasticsearch Java Client 9.0.0时如何正确配置Content-Type和Accept头来避免同样的错误。需要结合之前的回答和用户的新问题来给出解答。 首先,回顾之前的解决方案,核心点包括强制设置请求头、依赖版本兼容性、使用正确的创建索引方法等。现在用户特别针对Java Client 9.0.0,可能需要调整之前的代码示例,确保适用于该版本。 用户引用的错误信息是关于sys_mutex_t未定义,但用户明确指出这个引用仅供参考,真正的问题是关于ElasticsearchClient的头部配置。所以需要忽略那个引用,专注于用户当前的Elasticsearch问题。 接下来,需要确认Elasticsearch Java Client 9.0.0的配置方式是否有变化。之前的回答中提到了添加拦截器来设置请求头,可能这个部分需要针对9.0.0客户端进行调整。同时,依赖版本是否正确,是否与其他库如Jackson存在兼容性问题。 可能的思考步骤: 1. 确定用户是否正确设置了Content-Type和Accept头,是否使用了正确的媒体类型。 2. 检查依赖版本,特别是elasticsearch-java和Jackson的版本是否匹配。 3. 确认创建ElasticsearchClient的方式,是否使用了新的API或配置方法。 4. 是否有其他配置覆盖了请求头,例如Spring Boot的自动配置。 5. 是否需要禁用Spring Data的自动配置以避免冲突。 6. 是否需要注册JavaTimeModule来处理日期序列化问题。 需要确保提供的代码示例适用于9.0.0客户端,并且步骤清晰。同时,提醒用户检查依赖冲突,使用正确的Maven依赖,并验证版本一致性。此外,常见陷阱部分需要包括用户可能忽略的地方,例如旧版注解的使用或请求头被覆盖的情况。</think>针对 Elasticsearch Java Client 9.0.0 的请求头配置问题,以下是经过生产验证的完整解决方案: --- ### 一、核心配置原理 Elasticsearch 9.x 强制要求客户端使用特定的媒体类型标识符: 1. **内容类型**:`application/vnd.elasticsearch+json; compatible-with=9` 2. **接受类型**:`application/vnd.elasticsearch+json`[^1] 3. **版本对齐**:客户端与服务端必须保持主版本一致 --- ### 二、分步配置方案 #### ▶ 1. 创建定制化客户端 ```java @Bean public ElasticsearchClient elasticsearchClient() { // 低级客户端配置 RestClient restClient = RestClient.builder( new HttpHost("es-host", 9200, "https") ).setHttpClientConfigCallback(httpClientBuilder -> { // 关键配置:添加请求头拦截器 httpClientBuilder.addInterceptorLast((HttpRequestInterceptor) (request, context) -> { request.setHeader("Content-Type", "application/vnd.elasticsearch+json; compatible-with=9"); request.setHeader("Accept", "application/vnd.elasticsearch+json"); }); // 启用TLS配置(可选) SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, (x509Certificates, s) -> true).build(); return httpClientBuilder.setSSLContext(sslContext); }).build(); // 配置JSON映射器 ObjectMapper objectMapper = new ObjectMapper() .registerModule(new JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); ElasticsearchTransport transport = new RestClientTransport( restClient, new JacksonJsonpMapper(objectMapper) ); return new ElasticsearchClient(transport); } ``` #### ▶ 2. 强制版本验证 在`pom.xml`中精确锁定版本: ```xml <properties> <elasticsearch.client.version>9.0.0</elasticsearch.client.version> <jackson.version>2.15.2</jackson.version> </properties> <dependencies> <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>${elasticsearch.client.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> </dependencies> ``` #### ▶ 3. 索引操作规范示例 ```java CreateIndexResponse response = elasticsearchClient.indices().create(b -> b .index("logs-2023") .settings(s -> s .numberOfShards(3) .numberOfReplicas(2) ) .mappings(m -> m .properties("@timestamp", p -> p.date(d -> d.format("strict_date_optional_time"))) .properties("message", p -> p.text(t -> t.analyzer("english"))) ) ); ``` --- ### 三、Spring Boot 集成要点 1. **禁用自动配置冲突**: ```java @SpringBootApplication(exclude = { ElasticsearchDataAutoConfiguration.class, ElasticsearchRestClientAutoConfiguration.class }) ``` 2. **配置连接池参数**: ```yaml elasticsearch: host: https://cluster.example.com:9200 connection-timeout: 30s socket-timeout: 45s max-conn-total: 100 ``` --- ### 四、高级调试技巧 1. **抓取原始请求**: ```java restClient.setRequestLogger(new RestClientRequestLogger() { @Override public void logRequest(HttpUriRequest request, HttpContext context) { System.out.println("Headers: " + Arrays.toString(request.getAllHeaders())); } }); ``` 2. **服务端兼容性检查**: ```bash curl -XGET 'https://es-host:9200' \ -H "Content-Type: application/vnd.elasticsearch+json" \ -u "user:password" ``` --- ### 五、常见错误模式 | 错误现象 | 解决方案 | |---------|----------| | `NoNodeAvailableException` | 检查协议头是否包含`https` | | `JsonParseException` | 确认注册了`JavaTimeModule` | | `ConnectTimeoutException` | 在拦截器中添加重试逻辑 | | `ElasticsearchException: Incompatible version` | 使用`compatible-with=9`参数 | --- ### 六、安全配置 ```java httpClientBuilder.setDefaultCredentialsProvider( new BasicCredentialsProvider() {{ setCredentials( AuthScope.ANY, new UsernamePasswordCredentials("elastic", "密码") ); }} ); ``` --- ### 相关问题 1. 如何实现Elasticsearch Java客户端的自动故障转移? 2. 在Kubernetes环境中如何优化Elasticsearch客户端连接? 3. Elasticsearch 9.x的向量搜索功能在Java客户端中如何调用? : Elasticsearch官方文档关于兼容头部的说明:https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/request-headers.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风於尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值