SpringBoot集成ElasticSearch客户端Transport

本文详细介绍如何在不引入SpringBoot的ES依赖下,使用Transport客户端连接Elasticsearch,并通过Java API进行索引创建、数据批量插入及关键字查询等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Rransport操作es

  • 导包
    使用transport客户端时,不能引入springboot中的es依赖
    在这里插入图片描述
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.2.2</version>
</dependency>

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.2.2</version>
</dependency>
 <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>
  • application-es.properties配置
elasticsearch.host=127.0.0.1
elasticsearch.port=9300
elasticsearch.cluster-name=elasticsearch
  • 获取客户端连接
@Configuration
@PropertySource({"classpath:application-es.properties"})
@ConfigurationProperties(prefix = "elasticsearch")
public class EsConfig {

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

    @Value("${elasticsearch.port}")
    private int port;

    @Value("${elasticsearch.cluster-name}")
    private String clusterName;

    //获取客户端连接
    @Bean
    public TransportClient getClient() throws UnknownHostException {
        System.out.println("---------------init es client");
        InetSocketTransportAddress node = new InetSocketTransportAddress(
                InetAddress.getByName(host),port    //ip
        );
        Settings setttings = Settings.builder()
                .put("client.transport.sniff", true)
                .put("cluster.name", clusterName).build();  //集群名字

        TransportClient client = new PreBuiltTransportClient(setttings);
        client.addTransportAddress(node);
        return client;
    }
}
  • java API操作
	public void createIndex() {
		//判断该索引库是否存在
        boolean flag =client.admin().indices().exists(
                new IndicesExistsRequest()
                        .indices(new String[]{INDEX}))
                .actionGet().isExists();

        if (!flag) {
            //创建索引库
            IndexRequestBuilder builder1 = client.prepareIndex(INDEX, TYPE);
        }
		
        List<Course> courseList = courseService.findAll();
        //获取bulkbuilder
        BulkRequestBuilder req = client.prepareBulk();
        Map<String, Object> map =null;
        for (Course course : courseList) {
            map = new HashMap<>();
            map.put("id", course.getId());
            map.put("coursename", course.getCoursename());
            map.put("intro", course.getIntro());
            req.add(client.prepareIndex(INDEX, TYPE,course.getId().toString()).setSource(map));
        }

 		//设置刷新
		req.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
        BulkResponse response = req.get();
        if ( response.hasFailures()){
            throw new RuntimeException("数据插入失败");
        }

    }
    }
    //进行关键字查询
    public ArrayList<Object> change(QueryCourse queryCourse) {

        //设置在指定索引库查询
        SearchRequestBuilder builder = client.prepareSearch(INDEX).setTypes(TYPE);

        //获取查询对象
        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

        queryBuilder.must(QueryBuilders.matchQuery("coursename", queryCourse.getName()));

        //设置查询
        builder.setQuery(queryBuilder);

        //设置结果最大返回数
        builder.setSize(2);

        SearchResponse searchResponse = builder.get();

        //获取命中的数据
        SearchHits hits = searchResponse.getHits();

        SearchHit[] hits1 = hits.getHits();
        ArrayList<Object> list = new ArrayList<>();
        for (SearchHit h : hits1) {
            list.add(h.getSource());
        }
        return list;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值