【ElasticSearch教程】--- Elasticsearch JavaApi 文档增删改查操作(十八)

JavaApi 文档增删改查操作

索引创建成功之后就可以进行文档的操作了,下面一次对文档进行增删改查了。

新增文档

新增文档操作的步骤如下:

  1. 定义要链接主机的信息,这里使用org.apache.http.HttpHost对象。
  2. 构建RestClientBuilder,该对象由RestClient.builder(host);构建。
  3. 建立与ES服务器链接的客户端对象RestHighLevelClient, 直接创建即可。
  4. 构建创建文档的请求对象,需要注意的是虽然是创建文档,但是依然用的是IndexRequest对象org.elasticsearch.action.index.IndexRequest
  5. 填充相应的请求数据。
    • 设置将文档加到哪个index下,indexRequest.index("teacher");.
    • 如果要自定义稳定id,需要设置IndexRequest的id属性,indexRequest.id("7001");
    • 后续我们将要添加的文档弄成JSON格式。然后加入到indexRequest中,调用方法source(),这时候也需要设置文档提交使用的格式:.source(json, XContentType.JSON);.
  6. 提交请求,添加文档。client.index(indexRequest, RequestOptions.DEFAULT);.
  7. 最后要关闭client。 要不然进程会一致挂起。
    介绍完流程之后,看编写的代码如下:
package com.maomao.elastic.search.doc;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.maomao.elastic.search.entry.Teacher;
import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

/**
 * 文档创建
 */
public class DocCreate {

    public static void main(String[] args) throws Exception {
        HttpHost host = new HttpHost("127.0.0.1", 9200, "http");
        RestClientBuilder builder = RestClient.builder(host);
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 构建创建文档的请求对象
        IndexRequest indexRequest = new IndexRequest();
        indexRequest.index("teacher");
        indexRequest.id("7001");
        Teacher teacher = new Teacher();
        teacher.setAge(23);
        teacher.setName("高俅");
        teacher.setTitle("教授");
        teacher.setSex("男");
        ObjectMapper mapper = new ObjectMapper();
        indexRequest.source(mapper.writeValueAsString(teacher), XContentType.JSON);
        // 发送创建文档请求
        IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(response.getResult());
        client.close();
    }
    
}

执行之后返回response的类型为org.elasticsearch.action.index.IndexResponseresult值为CREATED。从结果上看是成功的,我们是用POSTMan。查看服务器,确认是否真实创建文档成功。
查询文档
从查询的结果可以确认文档确实已经添加成功。

文档修改

操作ESjava api 从步骤上类似, 文档的修改操作差异也体现在文档请求对象的不同,以及请求对象不同上。所以主要的差异在456 三个步骤上。

  1. 4步中创建的对象不一样,对象为org.elasticsearch.action.update.UpdateRequest
  2. 5步中填充的数据不一样,但是我们都要设置indexid
  3. UpdateRequest,对象是对局部修改的操作请求对象,他提供了一个doc()方法填充修改内容,第一个参数为执行提交数据类型,例如:XContentType.JSON。 后面就是要修改内容的键值对,所以doc方法就是奇数个. 1+2n的个数。例如本例子我们将7001的性别从改为 updateRequest.doc(XContentType.JSON, "sex", "女");
    带入如下:
package com.maomao.elastic.search.doc;

import org.apache.http.HttpHost;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

/**
 * 局部文档更新
 */
public class DocPartUpdate {

    public static void main(String[] args) throws Exception {
        HttpHost host = new HttpHost("127.0.0.1", 9200, "http");
        RestClientBuilder builder = RestClient.builder(host);
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 构建修改文档的请求对象

        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index("teacher").id("7001");
        updateRequest.doc(XContentType.JSON, "sex", "女");
        // 发送创建文档请求
        UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(response.getResult());
        client.close();
    }

}

运行代码得到结果UpdateResponse, 得到结果UPDATED
再使用Postman进行查询,验证是否有真正修改掉。
查询文档修改结果
从上的结果可以看出修改已经成功。

文档查询

查询指定按照定位来讲,只要有了indexid就能精确定位出文档了。步骤上也类似,仅456 三个步骤上存在差异。

  1. 4步构建的对象为,org.elasticsearch.action.get.GetRequest类的对象,
  2. 5步指定indexid即可。getRequest.index("teacher").id("7001");
  3. 发送查询文档请求,client.get(getRequest, RequestOptions.DEFAULT);。得到响应对象 GetResponse response.
  4. 得到的响应内容response的方法getSource()可以得到响应文档内容。
    代码如下:
package com.maomao.elastic.search.doc;

import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

/**
 * 文档查询
 */
public class DocGet {

    public static void main(String[] args) throws IOException {
        HttpHost host = new HttpHost("127.0.0.1", 9200, "http");
        RestClientBuilder builder = RestClient.builder(host);
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 构建请求文档的请求对象
        GetRequest getRequest = new GetRequest();
        getRequest.index("teacher").id("7001");

        // 发送查询文档请求
        GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(response.getSource());
        client.close();
    }

}

执行结果:
执行文档查询结果

文档删除

文档删除和查询类似,都需得定位到文档内容先,即必须指定indexid。步骤差异仅456 三个步骤上。

  1. 4步构建的对象是DeleteRequest
  2. 5步只需要指定indexID delete.index("teacher").id("7001");.
  3. 发送删除请求执行delete()方法. client.delete(delete, RequestOptions.DEFAULT);.
    代码:
package com.maomao.elastic.search.doc;

import org.apache.http.HttpHost;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

/**
 * 文档删除
 */
public class DocDelete {

    public static void main(String[] args) throws IOException {
        HttpHost host = new HttpHost("127.0.0.1", 9200, "http");
        RestClientBuilder builder = RestClient.builder(host);
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 构建删除文档的请求对象
        DeleteRequest delete = new DeleteRequest();
        delete.index("teacher").id("7001");

        // 发送删除文档请求
        DeleteResponse response = client.delete(delete, RequestOptions.DEFAULT);
        System.out.println(response.getResult());
        client.close();
    }

}

执行结果得到响应结果DeleteResponse response ,调用getResult()方法可以获取到执行结果的描述DELETED
通过PostMan查询文档结果。
查询删除后结果
从结果上看,已经不能找到响应的文档内容了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何使用 Java API 获取 Elasticsearch 中的总数。 您可以使用 Elasticsearch Java API 中的 `SearchRequest` 和 `SearchResponse` 来实现。具体实现步骤如下: 1. 创建一个 `SearchRequest` 对象,并设置需要查询的 index。 ```java SearchRequest searchRequest = new SearchRequest("your_index_name"); ``` 2. 创建一个 `SearchSourceBuilder` 对象,并设置需要查询的条件。这里我们只需要查询总数,所以只需要设置一个 `size` 为 0 的参数即可。 ```java SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.size(0); ``` 3. 将 `SearchSourceBuilder` 对象设置到 `SearchRequest` 中。 ```java searchRequest.source(searchSourceBuilder); ``` 4. 执行查询,并获取查询结果中的总数。 ```java SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); long totalHits = searchResponse.getHits().getTotalHits().value; ``` 注意:在执行查询之前,需要先创建一个 `RestHighLevelClient` 对象,并设置好连接 Elasticsearch 的参数。 完整的 Java 代码示例: ```java RestHighLevelClient restHighLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); SearchRequest searchRequest = new SearchRequest("your_index_name"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.size(0); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); long totalHits = searchResponse.getHits().getTotalHits().value; restHighLevelClient.close(); ``` 希望这个回答能够帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值