栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Springboot整合ElasticSearch

Springboot整合ElasticSearch

一.项目目录结构

1.pom文件相关的maven依赖

要注意到
elasticsearch版本要和自己下载的版本一致;
springboot使用版本为2.5.4



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.4
         
    
    com.porridge
    porridge-es-api
    0.0.1-SNAPSHOT
    porridge-es-api
    Demo project for Spring Boot
    
        1.8

        
        7.13.2
    
    
        
        
            com.alibaba
            fastjson
            1.2.62
        
        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


2.config

config包下的ElasticsearchClientConfig

@Configuration
public class ElasticsearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
        return client;
    }
}
3.User

实体类

@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
}
4.PorridgeEsApiApplication
@SpringBootApplication
public class PorridgeEsApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(PorridgeEsApiApplication.class, args);
    }

}
二.相关API测试

在这里要先启动ElasticSearch
在测试类中进行依赖注入

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;
1.索引

索引的创建

    @Test
    void testCreateIndex() throws IOException {
        //1.创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("book");
        //2.执行创建请求 IndicesClient  请求后获得响应
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }

访问localhost:9100

获得索引

判断是否存在

    @Test
    void testExistIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("book");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        //存在返回true
        System.out.println(exists);
    }

删除索引

    @Test
    void testdelIndex() throws IOException {
        DeleteIndexRequest Request = new DeleteIndexRequest("book");
        AcknowledgedResponse delete = client.indices().delete(Request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

添加文档

    @Test
    void testAdddocument() throws IOException {
        User user = new User("porridge", 3);
        //创建请求
        IndexRequest request = new IndexRequest("book");
        //规则  put /book/_doc/1
        request.id("1");
        request.timeout(Timevalue.timevalueSeconds(1));
        request.timeout("1s");
        //将对象转换成json
        IndexRequest source = request.source(JSON.toJSONString(user), XContentType.JSON);
        //客户端发送请求,获取响应结果
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status());
    }

判断文档是否存在

    @Test
    void testIsExists() throws IOException {
        GetRequest getRequest = new GetRequest("book", "1");
        //不获取返回的_source 的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);

    }

获取文档信息

    @Test
    void getdocument() throws IOException {
        GetRequest getRequest = new GetRequest("book", "1");
        GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
        String sourceAsString = documentFields.getSourceAsString();
        //文档内容
        System.out.println(sourceAsString);
        //获取全部信息
        System.out.println(documentFields);
    }

更新文档

    @Test
    void UpdateRequest() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("book","1");
        //超过的时间
        updateRequest.timeout("1s");
        User user = new User("李大哥2222", 18);
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());
    }

删除文档信息

    @Test
    void delRequest() throws IOException {
        DeleteRequest request = new DeleteRequest("book", "1");
        request.timeout("1s");
        DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.status());
    }

批量添加数据

    @Test
    void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        ArrayList arrayList = new ArrayList<>();
        
        arrayList.add(new User("porridge",1));
        arrayList.add(new User("porridge2",2));
        arrayList.add(new User("porridge3",7));
        arrayList.add(new User("porridge4",6));
        arrayList.add(new User("porridge5",2));
        arrayList.add(new User("he",3));
        arrayList.add(new User("he3",3));

        for (int i = 0; i < arrayList.size(); i++) {
            //批量处理请求
            //批量更新、批量删除就在这里修改对应的请求
            bulkRequest.add(
                    new IndexRequest("book")
                    .id(""+(i+1))
                    .source(JSON.toJSONString(arrayList.get(i)),XContentType.JSON));
            BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
            //是否失败  返回false代表成功
            System.out.println(bulk.hasFailures());
        }
    }
 

多条件查询

    //search  查询
    //SearchSourceBuilder 条件构造查询
    //HighlightBuilder   高亮查询
    //TermQueryBuilder  精确查询
    //MatchAllQueryBuilder  查询全部
    //xxxQueryBuilder  对应我们刚才看见的searchSourceBuilder命令
    @Test
    void search() throws IOException {
        //创建查询请求
        SearchRequest searchRequest = new SearchRequest("book");
        //构建搜索条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //searchSourceBuilder.from();

        HighlightBuilder highlighter = searchSourceBuilder.highlighter();
        RangeQueryBuilder age = QueryBuilders.rangeQuery("age").gte("1").lte("3");

        //条件查询  ,可以使用QueryBuilder  工具类来实现
        //QueryBuilders.termQuery();  精确查询
        //QueryBuilders.matchAllQuery();  匹配所有类型的
        //MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

        //TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", "3");
        searchSourceBuilder.query(age);
        //设置延时
        searchSourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
        //设置搜索资源
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(search.getHits()));
        System.out.println("==================");

        for (SearchHit hit : search.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }


    }
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号