SpringBoot集成ElasticSearch及ElasticsearchRepository

怎么搭建Elasticsearch服务就不多说了,可参考:

Elasticsearch5.2.1集群搭建 https://blog.csdn.net/Gamer_gyt/article/details/59077189

 

1.添加配置及依赖

spring: 
    data:
       elasticsearch: 
            cluster-name: es 
            cluster-nodes: 192.168.120.103:9300,192.168.120.104:9300
dependencies {
   compile 'org.springframework.boot:spring-boot-starter-data-elasticsearch:1.5.8.RELEASE'
}

2.实体类,定义索引、类型、字段

package com.demo.pojo;

import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;


@Document(indexName = "apilog_index", type = "apilog")
public class ApiLog implements Serializable {
	private static final long serialVersionUID = -382318121710813866L;
	@Id
	private long id;

	private int uid;
	private int app_id;
	private String url;
	private long c_time;

}

3.Service层定义增删查方法

package com.demo.service;

import java.util.ArrayList;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

import com.demo.ApiLog;

@Service
public class ApiLogService {

	@Autowired
	private ApiLogSearchRepository repository;

    /**
     * 删除文档
     * @param id
     * @return
     */
	public boolean deleteApiLog(long id) {
		try {
			repository.delete(id);
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		}
		return true;
	}

    /**
     * 插入文档
     * @param aLog
     * @return
     */
	public ApiLog saveApiLog(ApiLog aLog) {
		ApiLog apiLog = new ApiLog();
		try {
			apiLog = repository.save(aLog);
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
		return apiLog;
	}

    /**
     * 按id查询
     * @param id
     * @return
     */
	public ApiLog findOneApiLog(long id) {
		ApiLog apiLog = new ApiLog();
		try {
			apiLog = repository.findOne(id);
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
		return apiLog;
	}

    /**
     * 查询全部文档
     * @return
     */
	public List findAllApiLog() {
		List list = new ArrayList<>();
		try {
			Iterable aIterable = repository.findAll();
			for (ApiLog apiLog : aIterable) {
				list.add(apiLog);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
		return list;
	}

  /**
     * 按条件过滤查询
     * @param b_time
     * @param e_time
     * @return
     */
	public List findApiLogByDate(String b_time,String e_time) {
		List list = new ArrayList<>();
		try {
			// 单个字符串
//			QueryBuilder qb0 = QueryBuilders.termQuery("id", "0");
			// 闭区间
			QueryBuilder qb1 = QueryBuilders.rangeQuery("c_time").from(b_time).to(e_time);
			// 大于
			QueryBuilder qb2 = QueryBuilders.rangeQuery("uid").gt(0);
            // 过滤多条件
			QueryBuilder qb = QueryBuilders.boolQuery().must(qb1).must(qb2);

			Iterable aIterable = repository.search(qb);
			for (ApiLog apiLog : aIterable) {
				list.add(apiLog);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
		return list;
	}
}

4.声明ElasticsearchRepository,可理解为dao层

package com.demo.dao;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import com.demo.ApiLog;

public interface ApiLogSearchRepository extends ElasticsearchRepository{

}

参考博文:

常用查询方法QueryBuilder构造举例API:

https://blog.csdn.net/u012546526/article/details/74184769

你可能感兴趣的:(SpringBoot集成ElasticSearch及ElasticsearchRepository)