怎么搭建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<ApiLog> findAllApiLog() {
List<ApiLog> list = new ArrayList<>();
try {
Iterable<ApiLog> 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<ApiLog> findApiLogByDate(String b_time,String e_time) {
List<ApiLog> 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<ApiLog> 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<ApiLog, Long>{
}
参考博文:
常用查询方法QueryBuilder构造举例API: