Elasticsearch连续剧之实战篇Java操作es

这篇具有很好参考价值的文章主要介绍了Elasticsearch连续剧之实战篇Java操作es。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:狮子也疯狂
专栏:《es》
坚持做好每一步,幸运之神自然会驾凌在你的身上

一、🐇前言

大家好!我是狮子,在上几篇文章中,详细介绍了在kibana中操作es,现在我们来看看真实开发中,如何使用Java操作es。

二、🐇原生JAVA操作ES_搭建项目

Elasticsearch连续剧之实战篇Java操作es
咱们先来了解一下,原生Java操作ES api接口,但是原生Java操作es的索引和文档太繁琐,我们只需要稍作了解。

Ⅰ、创建项目

我们先来创建一个普通Maven项目,并且引入以下依赖。

<dependencies>
    <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>7.17.0</version>
    </dependency>
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-resthigh-level-client</artifactId>
      <version>7.17.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
</dependencies>

Ⅱ、索引操作

在原生Java操作es索引的时候,连接es的对象为RestHighLevelClient,其实就五步操作:
1.创建客户端对象,连接ES
2.创建请求对象
3.发送请求
4.操作响应结果
5.关闭客户端

2.1 创建空索引

// 创建空索引
@Test
public void createIndex() throws IOException{
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    CreateIndexRequest request = new CreateIndexRequest("student");
    // 3.发送请求
        CreateIndexResponse response = client.indices()
        	.create(request,RequestOptions.DEFAULT);
    // 4.操作响应结果
  	 System.out.println(response.index());
  // 5.关闭客户端
 	 client.close();
}

tips:如果项目初次访问es失败,需要添加外部访问配置
打开Elasticsearch安装路径下config目录下的elasticsearch.yml文件,加入如下配置:

discovery.seed_hosts: ["host1"]
network.host: 0.0.0.0
重新启动ES即可。

2.2 给索引添加结构

@Test
public void mappingIndex() throws IOException {
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    PutMappingRequest request = new PutMappingRequest("student");
   			 request.source("{\n" +
                   " \"properties\":{\n" +
                   " \"id\":{\n" +
                   " \"type\":\"integer\"\n" +
                   "   },\n" +
                   " \"name\":{\n" +
                   " \"type\":\"text\"\n" +
                   "   },\n" +
                   " \"age\":{\n" +
                   " \"type\":\"integer\"\n" +
                   "   }\n" +
                   " }\n" +
                   "}", XContentType.JSON);
    // 3.发送请求
      AcknowledgedResponse response = client.indices()
      		.putMapping(request,RequestOptions.DEFAULT);
    // 4.操作响应结果
  		System.out.println(response.isAcknowledged());
    // 5.关闭客户端
    client.close();
}

2.3 删除索引

// 删除索引
@Test
public void deleteIndex() throws IOException{
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    	.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    DeleteIndexRequest request = new DeleteIndexRequest("student");
    // 3.发送请求
     AcknowledgedResponse response = client.indices()
     	.delete(request,RequestOptions.DEFAULT);
    // 4.操作响应结果  
	System.out.println(response.isAcknowledged(
));
    // 5.关闭客户端
    client.close();
}

Ⅲ、文档操作

在进行文档操作时,还是老套路,先创建客户端对象,连接es(和前面一样),但是请求对象创建不同,如果是新增或者修改文档,则请求IndexRequest对象,如果是根据id查询,则请求GetRequest,如果是删除,则创建DeleteRequest对象。

3.1 新增&修改文档

@Test
public void addDocument() throws IOException{
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    IndexRequest request = new IndexRequest("student").id("1");
  	request.source(XContentFactory.jsonBuilder()
                   .startObject()
                   .field("id", 1)
                   .field("name", "i love conding")
                   .field("age", 20)
                   .endObject());
    // 3.发送请求
    IndexResponse response = client.index(request,RequestOptions.DEFAULT);
    // 4.操作响应结果
    System.out.println(response.status());
    // 5.关闭客户端
    client.close();
}

3.2 根据id查询文档

// 根据id查询文档
@Test
public void findByIdDocument() throws IOException {
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    GetRequest request = new GetRequest("student", "1");
    // 3.发送请求
    GetResponse response = client.get(request, RequestOptions.DEFAULT);
    // 4.操作响应结果
	System.out.println(response.getSourceAsString());
    // 5.关闭客户端
    client.close();
}

3.3 删除文档

// 删除文档
@Test
public void DeleteDocument() throws IOException {
    // 1.创建客户端对象,连接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.0.187", 9200, "http")));
    // 2.创建请求对象
    DeleteRequest request = new DeleteRequest("student", "1");
    // 3.发送请求
    DeleteResponse response = client.delete(request,RequestOptions.DEFAULT);
    // 4.操作响应结果
    System.out.println(response.status());
    // 5.关闭客户端
    client.close();
}

Ⅳ、搜索操作

搜索操作是es的最主要的操作,刚开始的两步和前面一样,但是创建请求对象时,创建的是SearchRequest。使用不同的方法来操作索引。

4.1 搜索所有文档

@Test
public void queryAllDocument() throws IOException {
    // 创建客户端对象,链接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.1.58",9200,"http")));
    // 创建搜索条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  	searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    // 创建请求对象
    SearchRequest request = new SearchRequest("student").source(searchSourceBuilder);
    // 发送请求
     SearchResponse response = client.search(request,RequestOptions.DEFAULT);
    // 输出返回结果
    for (SearchHit hit:response.getHits()) {
      System.out.println(hit.getSourceAsString());
   }
    // 关闭客户端
    client.close();
}

4.2 根据关键词搜索文档

@Test
public void queryTermDocument() throws IOException {
    // 创建客户端对象,链接ES
    RestHighLevelClient client = new RestHighLevelClient(RestClient
    		.builder(new HttpHost("192.168.1.58",9200,"http")));
    // 创建请求条件
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.termQuery("info","boy"));
    // 创建请求对象
    SearchRequest request = new SearchRequest("student")
    		.source(searchSourceBuilder);
    // 发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);
    // 输出返回结果
    for (SearchHit hit:response.getHits()) {
      System.out.println(hit.getSourceAsString());
   }
    // 关闭客户端
    client.close();
}

三、🐇总结

这个部分不难理解,就是搞清楚几个对象之前的作用,准确调用方法就好,咱们只需要了解以下用法,需要使用的时候,再查资料就行。但是真实开发中,一般都是使用框架封装好的对象(为咱么省略了好多繁琐步骤。)文章来源地址https://www.toymoban.com/news/detail-414064.html

到了这里,关于Elasticsearch连续剧之实战篇Java操作es的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 实战之三:ES 基本操作

    目录 0. 数据格式说明 1. ES的基本操作 1.1 索引操作 1.1.1 建立索引 1.1.2  删除索引 1.1.3  查询索引 1.2 映射操作 1.2.1 建立映射 1.2.2 查询映射 1.3 基本操作-CRUD 1.3.1 新增和替换文档 1.3.2 查询文档 在实战开始之前,为了便于书写和沟通,本文先来约定一下如何在文章中表达请求

    2024年02月11日
    浏览(46)
  • SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)

    上一节讲述了 SpringBoot 实现 elasticsearch 索引操作,这一章节讲述 SpringBoot 实现 elasticsearch 查询操作。 案例用到的索引库结构

    2024年02月11日
    浏览(46)
  • elasticsearch|大数据|elasticsearch的api部分实战操作以及用户和密码的管理

    本文主要内容是通过elasticsearch的api来进行一些集群的管理和信息查询工作,以及elasticsearch用户的增删改查和密码的重设以及重置如何操作 接上文: elasticsearch|大数据|elasticsearch低版本集群的部署安装和安全增强---密码设置问题-CSDN博客 上文主要介绍了elasticsearch低版本集群的

    2024年02月04日
    浏览(42)
  • Elasticsearch8.8.0 SpringBoot实战操作各种案例(索引操作、聚合、复杂查询、嵌套等)

    Elasticsearch8.8.0 全网最新版教程 从入门到精通 通俗易懂 引入依赖 添加配置文件 application.yaml 导入ca证书到项目中 从任意一个es容器中,拷贝证书到resources目录下 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXytUrDp-1691330960034)(media/16912196423122/16

    2024年02月13日
    浏览(60)
  • 【云原生】Elasticsearch + kibana on k8s 讲解与实战操作

    Elasticsearch是一个基于Lucene的搜索引擎。它提供了具有HTTP Web界面和无架构JSON文档的分布式,多租户能力的全文搜索引擎。Elasticsearch是用Java开发的,根据Apache许可条款作为开源发布。 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/master/getting-started.html GitHub: https://gith

    2023年04月08日
    浏览(37)
  • java操作ElasticSearch之批量操作

    出现: 版本冲突、文档类型不对、JAR包与使用的API不一致或其他问题。都可参考以下连接。 ElasticSearch超级实用API描述 以上代码需要变动一下,将一些参数替换掉。

    2024年02月16日
    浏览(46)
  • Java实战场景下的ElasticSearch

    ES官方提供了各种不同语言的客户端 ,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES,其中的Java Rest Client又包括两种: Java Low Level Rest Client Java High Level Rest Client 本文介绍的是Java HighLevel Rest Client客户端API; 在elasticsearch提供的API中,与elasticsearch一切交

    2024年02月11日
    浏览(37)
  • Java 操作ElasticSearch

            Java REST提供了两种风格的客户端连接工具,Java High Level REST Client、Java Low Level REST Client,这里我就不去细说Java Low Level REST Client了,因为这我确实没用到过,也不是很了解,我说一下Java High Level REST Client。         首先如果你喜欢看官方文档的话,我把地址粘贴

    2024年02月06日
    浏览(38)
  • Java实战:SpringBoot+ElasticSearch 实现模糊查询

    本文将详细介绍如何使用SpringBoot整合ElasticSearch,实现模糊查询、批量CRUD、排序、分页和高亮功能。我们将深入探讨ElasticSearch的相关概念和技术细节,以及如何使用SpringData Elasticsearch库简化开发过程。 ElasticSearch是一个基于Lucene构建的开源搜索引擎,它提供了一个分布式、多

    2024年04月25日
    浏览(36)
  • Elasticsearch实战(十七)---ES搜索如何使用In操作查询及如何Distinct去除重复数据

    Elasticsearch实战-ES搜索如何使用In操作查询filter过滤及如何Distinct去除重复数据 场景: ES搜索, 获取手机号是 19000001111 或者 19000003333 后者 19000004444 的人, 并且 性别是男, 且 年龄是[20-30]的人,这种查询用mysql 如何实现 ? 在mysql中会用in查询, 但是在ES中 我们实现就是 term

    2023年04月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包