Spring boot中使用Elasticsearch(一)

Spring boot中使用Elasticsearch(一),第1张

Spring boot中使用Elasticsearch(一) 引入依赖

        8
        8
        2.5.4



        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        



        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        

        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            7.15.2
        

        //elasticsearch-rest-high-level-client中elasticsearch-rest-client版本不对应,需要额外导入,否则会出现有些方法使用报错
        
        
            org.elasticsearch.client
            elasticsearch-rest-client
            7.15.2
        
        
            org.elasticsearch
            elasticsearch
            7.15.2
        

创建配置文件
spring:
  application:
    name: service-search

db:
  elasticsearch:
#    根据自己的ip和端口设置,一般端口为9200,有多个用英文逗号隔开
    hostnameList: localhost:9200
创建配置类
@Configuration
public class ElasticsearchConfig {

    @Value("${db.elasticsearch.hostnameList}")
    private String hostnameList;

    //    销毁时关闭 close为自带的
    @Bean(destroyMethod = "close")
    public RestHighLevelClient restHighLevelClient() {
        String[] strings = hostnameList.split(",");
        HttpHost[] httpHost = new HttpHost[strings.length];
        for (int i = 0; i < strings.length; i++) {
            String item = strings[i];
            httpHost[i] = new HttpHost(item.split(":")[0], Integer.parseInt(item.split(":")[1]), "http");
        }
        return new RestHighLevelClient(RestClient.builder(httpHost));
    }
}
创建启动类
@SpringBootApplication
public class SearchApplication {
    public static void main(String[] args) {
        SpringApplication.run(SearchApplication.class, args);
    }
}
编写测试类

查询数据

@SpringBootTest
public class EsDemo {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @Test
    public void getData() throws IOException {
        GetRequest getRequest = new GetRequest("book", "1");
//        条件查询的参数
        String[] includes = new String[]{"name", "description"};
        String[] excludes = Strings.EMPTY_ARRAY;
//        创建条件查询
        FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
//        添加条件查询参数
        getRequest.fetchSourceContext(fetchSourceContext);
        
//        执行

//        同步
        GetResponse response = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);

        System.out.println(response.getId());
        System.out.println(response.getVersion());
        System.out.println(response.getSourceAsString());

//        异步,不会阻塞线程
        ActionListener listener = new ActionListener() {
            @Override
            public void onResponse(GetResponse getResponse) {
                System.out.println(getResponse.getId());
                System.out.println(getResponse.getVersion());
                System.out.println(getResponse.getSourceAsString());
            }

            @Override
            public void onFailure(Exception e) {
                e.printStackTrace();
            }
        };

        restHighLevelClient.getAsync(getRequest, RequestOptions.DEFAULT, listener);
       	// 配置类中定义了close方法,因此启动延迟,方便观察数据
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

添加数据

@Test
    public void addData() throws IOException {
//        构建请求
        IndexRequest indexRequest = new IndexRequest("book", "_doc", "5");

//        方法1
//        String jsonString = "{n" +
//                "  "name": "java",n" +
//                "  "description": "后端",n" +
//                "  "timestamp": "2021-11-24 18:08:00",n" +
//                "  "price": 31n" +
//                "}";
//        indexRequest.source(jsonString, XContentType.JSON);

//        方法2
//        HashMap hashMap = new HashMap<>();
//        hashMap.put("name", "php");
//        hashMap.put("description", "后端");
//        hashMap.put("timestamp", "2021-11-24 18:08:00");
//        hashMap.put("price", "31");
//        indexRequest.source(hashMap);

//        方法3
//        XContentBuilder jsonBuilder = XContentFactory.jsonBuilder();
//        jsonBuilder.startObject();
//        {
//            jsonBuilder.field("name", "node.js");
//            jsonBuilder.field("description", "后端");
//            jsonBuilder.field("price", "31");
//            jsonBuilder.timeField("timestamp", "2021-11-24 18:08:00");
//        }
//        jsonBuilder.endObject();
//        indexRequest.source(jsonBuilder);

//        方法4
        indexRequest.source("name", "c#", "description", "后端", "price", "31", "timestamp", "2021-11-24 18:08:00");

//        可选参数 ....
//        indexRequest.timeout(Timevalue.timevalueMillis(1));

//        同步
        IndexResponse response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(response.getId());

//        异步
        ActionListener listener = new ActionListener() {
            @Override
            public void onResponse(IndexResponse response) {
                System.out.println(response.getId());
            }

            @Override
            public void onFailure(Exception e) {
                e.printStackTrace();
            }
        };

        restHighLevelClient.indexAsync(indexRequest, RequestOptions.DEFAULT, listener);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

更新数据

@Test
    public void upData() throws IOException {
        UpdateRequest request = new UpdateRequest("book", "4");

        HashMap hashMap = new HashMap<>();
        hashMap.put("name", "C++");
        request.doc(hashMap);

//        同步
        UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(response.getId());

//        异步
        ActionListener listener = new ActionListener() {
            @Override
            public void onResponse(UpdateResponse response) {
                System.out.println(response.getId());
            }

            @Override
            public void onFailure(Exception e) {
                e.printStackTrace();
            }
        };

        restHighLevelClient.updateAsync(request, RequestOptions.DEFAULT, listener);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

删除数据

@Test
    public void deleteData() throws IOException {
        DeleteRequest request = new DeleteRequest("book", "5");

//        同步
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());

//        异步
        ActionListener listener = new ActionListener() {
            @Override
            public void onResponse(DeleteResponse response) {
                System.out.println(response.getResult());
            }

            @Override
            public void onFailure(Exception e) {
                e.printStackTrace();
            }
        };
        restHighLevelClient.deleteAsync(request,RequestOptions.DEFAULT,listener);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

批量 *** 作

@Test
    public void bulkData() throws IOException {

        BulkRequest request = new BulkRequest();

        request.add(new IndexRequest("book").id("7").source(XContentType.JSON, "name", "c#", "description", "后端", "price", "31", "timestamp", "2021-11-24 18:08:00"));
        request.add(new UpdateRequest("book", "4").doc("name", "node"));

//        同步
        BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);

        for (BulkItemResponse bulkItemResponse : response) {
            DocWriteResponse responseResponse = bulkItemResponse.getResponse();
            switch (bulkItemResponse.getOpType()) {
                case INDEX:
                    System.out.println("CREATE or INDEX:" + responseResponse.getResult());
                    break;
                case CREATE:
                    System.out.println("CREATE:" + responseResponse.getResult());
                    break;
                case UPDATE:
                    System.out.println("UPDATE:" + responseResponse.getResult());
                    break;
                case DELETE:
                    System.out.println("DELETE:" + responseResponse.getResult());
                    break;
            }
        }

//        异步
        ActionListener listener = new ActionListener() {
            @Override
            public void onResponse(BulkResponse response) {
                for (BulkItemResponse bulkItemResponse : response) {
                    DocWriteResponse responseResponse = bulkItemResponse.getResponse();
                    switch (bulkItemResponse.getOpType()) {
                        case INDEX:
//                            代表创建或者全替换,个人根据测试推断
                            System.out.println("INDEX:" + responseResponse.getResult());
                            break;
                        case CREATE:
                            System.out.println("CREATE:" + responseResponse.getResult());
                            break;
                        case UPDATE:
                            System.out.println("UPDATE:" + responseResponse.getResult());
                            break;
                        case DELETE:
                            System.out.println("DELETE:" + responseResponse.getResult());
                            break;
                    }
                }
            }

            @Override
            public void onFailure(Exception e) {
                e.printStackTrace();
            }
        };

        restHighLevelClient.bulkAsync(request, RequestOptions.DEFAULT, listener);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

本人接触后端时间不长,欢迎各位大神指教

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5653676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存