Elasticsearch的Java客户端--文档操作--索引文档

官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-supported-apis.html

索引文档

步骤

public static void main(String[] args) throws IOException {
    
    
        // 1.创建客户端,需要提供 ES 的连接地址
        RestClientBuilder clientBuilder = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"));
        RestHighLevelClient client = new RestHighLevelClient(clientBuilder);

        // 2.创建文档
        String jsonString = "{'user': 'kimchy','postDate': '2013-01-30','message': 'trying out Elasticsearch'}";

        // 3.创建索引请求,设置文档的索引和id
        IndexRequest request = new IndexRequest("posts").id("1");
        request.source(jsonString);

        // 4.客户端发送请求,返回响应结果
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);

        String index = response.getIndex();//索引
        String id = response.getId();//文档id
        int status = response.status().getStatus();//状态码

        // 请求结束之后关闭连接,释放资源
        client.close();
    }

上面那种方式发送的请求是同步的,也可以异步发送请求

public static void main(String[] args) throws IOException {
    
    
        // 1.创建客户端,需要提供 ES 的连接地址
        RestClientBuilder clientBuilder = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"));
        RestHighLevelClient client = new RestHighLevelClient(clientBuilder);

        // 2.创建文档
        String jsonString = "{'user': 'kimchy','postDate': '2013-01-30','message': 'trying out Elasticsearch'}";

        // 3.创建索引请求,设置文档的索引和id
        IndexRequest request = new IndexRequest("posts").id("1");
        request.source(jsonString);

        // 4.客户端发送请求,返回响应结果
        // 异步
        Cancellable responseAsync = client.indexAsync(request, RequestOptions.DEFAULT, new ActionListener<IndexResponse>() {
    
    
            @Override
            public void onResponse(IndexResponse response) {
    
    
                // 请求执行成功
                System.out.println("请求执行成功!");

                String index = response.getIndex();//索引
                String id = response.getId();//文档id
                int status = response.status().getStatus();//状态码
            }

            @Override
            public void onFailure(Exception e) {
    
    
                // 请求执行失败
                System.out.println("请求执行失败!");
            }
        });

        // 异步请求可以取消
        responseAsync.cancel();

        // 请求结束之后关闭连接,释放资源
        client.close();
    }

异步请求相比同步请求多了一个 ActionListener 参数,异步的请求不会阻塞且不会立即返回,当请求完成后回调 ActionListener 接口中的对应方法

可选参数

在执行请求之前我们可以自定义设置一些可选的请求参数,如下列出部分参数

request.routing("routing");//设置请求的路由
request.timeout(TimeValue.timeValueSeconds(1));//设置请求超时时间
request.timeout("1s");
// 设置ES的刷新策略,wait_for 策略表示请求向ES提交了数据,等待数据完成刷新,然后再结束请求
request.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
request.setRefreshPolicy("wait_for");
request.version(2);//请求操作文档的版本
request.opType(DocWriteRequest.OpType.CREATE);//设置请求操作的类型为create
request.opType("create");
//索引文档之前要执行的pipeline的名称,pipeline用于在数据存储到ES之前预处理数据
request.setPipeline("pipeline");

猜你喜欢

转载自blog.csdn.net/imonkeyi/article/details/120568967