Java操作ElasticSearch

1.JAVA连接ES

 配置如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>com.qf</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>
    <!-- 1.elastic的jar包
 2.es高级api
 3.junit
 4.lombok-->
    <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>7.2.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.2.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.22</version>
    </dependency>
</dependencies>



</project>

  

package com.qf.utils;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

public class ESClient {

    public static RestHighLevelClient getClient(){

        HttpHost httpHost=new HttpHost("192.128.64.128",9200);
        RestClientBuilder clientBuilder= RestClient.builder(httpHost);
        RestHighLevelClient client=new RestHighLevelClient(clientBuilder);
        return client;

    }


}

创建Demo1来测试连接

package com.qf.test;

import com.qf.utils.ESClient;

import org.elasticsearch.client.RestHighLevelClient;

import org.junit.Test;



public class Demo1 {
    @Test
    public void testConnect() {
        try {
            RestHighLevelClient client = ESClient.getClient();
            System.out.println("ok!");
        } catch (Exception e) {
            System.out.println(e);


        }
    }
}

  

2.Java创建索引

注意:由于之前使用的Liunx版本问题,在运行版本的时候提示java.net.ConnectException: Timeout connecting to xxxx.9200在网上找了很多办法无法解决,最后实在没办法就下载了Windows版本就可以了。

package com.qf.test;

import com.qf.utils.ESClient;

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;

import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.RequestOptions;


import org.elasticsearch.client.RestHighLevelClient;


//import org.elasticsearch.client.indices.CreateIndexRequest;
//import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.junit.Test;

import java.io.IOException;

public class Demo2 {
    String index="person";
    String type="man";

@Test
    public void createIndex() throws IOException {


        //1.索引的settings
        Settings.Builder settings = Settings.builder()
                .put("number_of_shards", 3)
                .put("number_of_replicas", 1);

        //2.索引的mappings
        XContentBuilder mappings = JsonXContent.contentBuilder();
               mappings .startObject()
                .startObject("properties")
                .startObject("name")
                    .field("type", "text")
                .endObject()
                .startObject("age")
                    .field("type", "integer")
                .endObject()
                .startObject("birthday")
                    .field("type", "date")
                    .field("format", "yyyy-MM-dd")
                .endObject()
        .endObject()
    .endObject();

        //将settings和Mappings 封装到一个Request对象
        CreateIndexRequest request = new CreateIndexRequest(index)
                .settings(settings)
                .mapping(type, mappings);
        //通过Client对象连接ES并执行创建索引

        RestHighLevelClient client = ESClient.getClient();

        CreateIndexResponse createIndexResponse =client.indices().create(request,RequestOptions.DEFAULT);

        System.out.println("resp:" + createIndexResponse.toString());



    }
}

2.1Java查询删除索引

@Test
            public  void delete() throws IOException {
        //1.准备request对象
        DeleteIndexRequest request=new DeleteIndexRequest();
        request.indices(index);
        //2.通过Cilent操作
        RestHighLevelClient client = ESClient.getClient();
        AcknowledgedResponse  delete=client.indices().delete(request,RequestOptions.DEFAULT);
        /* 3.输出 */
        System.out.println(delete);
    }



    @Test
    public   void exists() throws IOException {
        //1.准备request对象
        GetIndexRequest request=new GetIndexRequest();
        request.indices(index);
        //2.通过Cilent操作
        RestHighLevelClient client = ESClient.getClient();
       boolean exists= client.indices().exists(request,RequestOptions.DEFAULT);
        //3.输出
        System.out.println(exists);
    }

  

2.2Java操作文档

2.2.1添加文档

1.创建Person类

package com.qf.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import  java.util.Date;

public class Person {


    @JsonIgnore
    private  Integer id;
    private String name;
    private  Integer age;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private  Date  birthday;

    public Person(Integer id, String name, Integer age, Date birthday) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public Integer getId() {
        return id;
    }
}

  

2.创建测试类Demo3

注:添加json依赖包

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>

package com.qf.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.entity.Person;
import com.qf.utils.ESClient;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.Test;

import java.io.IOException;
import java.util.Date;

public class Demo3 {
    String index="person";
    String type="man";
    RestHighLevelClient client = ESClient.getClient();
    ObjectMapper mapper=new ObjectMapper();

@Test
    public void createDoc() throws IOException {
    //1.准备一个json数据
    Person person=new Person(1,"张三",20,new Date());
   String json= mapper.writeValueAsString(person);
    //2.准备一个request对象(手动指定id)
    IndexRequest request=new IndexRequest(index,type,person.getId().toString());
    request.source(json, XContentType.JSON);
    //3.通过client对象执行添加
    IndexResponse resp =client.index(request, RequestOptions.DEFAULT);

    //4.输出返回结果
    System.out.println(resp.getResult().toString());
}

}

2.2.2修改文档

@Test
    public void update() throws IOException {
    //创建Map修改指定内容
    Map<String,Object>doc= new HashMap<String, Object>();
    doc.put("name","张大三");
    String docID="1";

    UpdateRequest request=new UpdateRequest(index,type,docID);
    request.doc(doc);
    UpdateResponse update=client.update(request,RequestOptions.DEFAULT);
    System.out.println(update.getResult().toString());
}

 

2.2.3删除文档

@Test
    public void delete() throws IOException {
    DeleteRequest request=new DeleteRequest(index,type,"1");
    DeleteResponse resp=client.delete(request,RequestOptions.DEFAULT);
    System.out.println(resp.getResult().toString());
}

2.2.4批量添加文档

@Test
    public void BulkDoc() throws IOException {
    Person p1= new Person(1,"HJH",20,new Date());
    Person p2= new Person(2,"YQG",30,new Date());
    Person p3= new Person(3,"LWD",22,new Date());

   String json1= mapper.writeValueAsString(p1);
   String json2= mapper.writeValueAsString(p2);
   String json3= mapper.writeValueAsString(p3);

   //创建Request,将准备好的数据封装进去
    BulkRequest  request=new BulkRequest();
    request.add(new IndexRequest(index,type,p1.getId().toString()).source(json1,XContentType.JSON));
    request.add(new IndexRequest(index,type,p2.getId().toString()).source(json1,XContentType.JSON));
    request.add(new IndexRequest(index,type,p3.getId().toString()).source(json1,XContentType.JSON));

    BulkResponse resp=client.bulk(request,RequestOptions.DEFAULT);

    System.out.println(resp.toString());





}

2.2.4批量删除文档

@Test
    public void bulkDeleteDoc() throws IOException {
    BulkRequest  request=new BulkRequest();
    request.add(new DeleteRequest(index,type,"1"));
    request.add(new DeleteRequest(index,type,"2"));
    request.add(new DeleteRequest(index,type,"3"));
    BulkResponse resp=client.bulk(request,RequestOptions.DEFAULT);

    System.out.println(resp);


}
原文地址:https://www.cnblogs.com/clarehjh/p/13653071.html