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

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

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

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

		
			org.springframework.boot
			spring-boot-starter-data-elasticsearch
		

另外还有Jest的相关依赖:

		
			io.searchbox
			jest
		

二、对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的依赖:

		
			com.google.code.gson
			gson
			2.8.5
		

拿到了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进去,集群访问也十分便捷。整体的实现也是相当的简单。

你可能感兴趣的:(ElasticSearch,SpringBoot)