zoukankan      html  css  js  c++  java
  • 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);
    
    
    }
  • 相关阅读:
    Android自定义属性,format详解
    设置EditText是否可编辑
    Android中Application设置全局变量以及传值
    android:ellipsize属性的含义
    Java集合框架List,Map,Set等全面介绍
    二十款漂亮的CSS字体样式,让你受用非浅
    IE浏览器不见了
    display属性值:
    用CSS设置多个背景、背景渐变、指定背景大小
    [转]IE6双倍边距——IE布局BUG集锦
  • 原文地址:https://www.cnblogs.com/clarehjh/p/13653071.html