SpringBoot下使用Jest访问ES数据库以及访问ES集群

很多时候一个项目不仅会使用到关系型数据库(Mysql等),也可能会使用到非关系型数据库,在这之中ElasticSearch就是一个佼佼者。而使用RestAPI的方式去访问ElasticSearch无疑是一个很可以的方法。

当然成功的访问到ES数据库需要做到一下几步。

一、在项目里添加相关的依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

另外还有Jest的相关依赖:

		<dependency>
			<groupId>io.searchbox</groupId>
			<artifactId>jest</artifactId>
		</dependency>

二、对Jest进行配置

		spring:
		    elasticsearch:
				jest:
				connection-timeout: 3000
				multi-threaded: true
				uris: http://xxx.xx.xxx.xxx:9200
				read-timeout: 7200

访问地址便是服务器地址,端口默认是9200(不排除进行了修改),其它的相关属性也可根据自身需要自行设置。

三、访问ES数据库

import com.google.gson.JsonObject;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Search;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;

/**
 * @Author Kolloge
 * @Project esdemo
 * @Date 2018/11/13  10:00
 * @Description 
 **/
@Service("esService")
public class EsInfoImpl implements EsInfo {
    private final Logger logger = LoggerFactory.getLogger(EsInfoImpl.class);

    @Value("${es.index}")
    private String indexName;

    @Value("${es.type}")
    private String typeName;

    @Autowired
    private JestClient jestClient;

    @Override
    public JsonObject searchInformation(String id) {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchQuery("填写你要查找的keyname",id));
        Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(indexName).addType(typeName).build();
        try{
            JestResult jestResult = jestClient.execute(search);
            logger.info("获取ES信息成功!");
            return  jestResult.getJsonObject();

        }catch (SearchESException | IOException e){
            logger.error("获取ES信息异常:" + e.getMessage());
            return null;
        } catch (Exception e){
            logger.error("获取ES信息异常:" + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
}

此处的index_name和type_name需要根据自身情况进行设置。此处没有贴出interface,务必自行根据impl写出interface。

需要注意的事情是,此处的结果JsonObject是gson的格式,所以可能还需要添加gson的依赖:

		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.5</version>
		</dependency>

拿到了Json之后自然是想怎么使用就怎么使用了。若是想要将结果直接放入实体中:SpringBoot下Jest实现ElasticSearch查询结果直接写入实体对象中

四、集群访问的方法

其实到上一步的时候所有的操作就已经结束了,程序已经可以正常的访问ES数据库并且拿到相关的数据。但是很多时候ES肯定不止一台服务器,一般都是集群搭建。那么这样的情况下又该如何操作呢?

其实以上的配置完全就可以访问集群的ES数据库,只需要改一下配置文件就可以轻松的实现既修改第二步的操作:

		spring:
		    elasticsearch:
				jest:
				connection-timeout: 3000
				multi-threaded: true
				uris:
				- http://xxx.xx.xxx.xxx:9200
				- http://yyy.xx.xxx.xxx:9200
				read-timeout: 7200

有多少就加多少URI进去,集群访问也十分便捷。整体的实现也是相当的简单。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值