pom引用:
<!--ES-->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.2</version>
<exclusions>
<exclusion>
<artifactId>elasticsearch</artifactId>
<groupId>org.elasticsearch</groupId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>5.5.3</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.0.7</version>
</dependency>
配置文件增加:
#ES配置
spring.data.elasticsearch.clustername=ganinfo
spring.data.elasticsearch.ip=172.16.1.29
spring.data.elasticsearch.port=9300
新建一个工具类:
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @author Shuyu.Wang
* @package:com.ganinfo.utils
* @className:
* @description:ES连接工具
* @date 2018-03-28 14:03
**/
@Component
public class ESUtil {
@Value("${spring.data.elasticsearch.ip}")
private String host; // 服务器地址
@Value("${spring.data.elasticsearch.port}")
private int port; // 端口
@Value("${spring.data.elasticsearch.clustername}")
private String clusterName;
private TransportClient client=null;
/**
* 获取连接
* @return
*/
public Client getCient(){
TransportClient client=null;
Settings.Builder settings=Settings.builder().put("cluster.name",clusterName);
try {
client = new PreBuiltTransportClient(settings.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
} catch (UnknownHostException e) {
e.printStackTrace();
}
if (client!=null){
System.out.println("Client创建成功!");
}
return client;
}
/**
* 关闭连接
* @param client
*/
public void closeClient(Client client){
if(client!=null){
client.close();
System.out.println("Client关闭成功!");
}
}
}
接口封装:
public interface ESService {
/**
* @param index 索引
* @param type 类型
* @param obj 插入的对象
* @author:shuyu.wang
* @description:新增接口
* @date: 2018/3/29 10:20
*/
Boolean add(String index, String type, Object obj);
/**
* @param index 索引
* @param type 类型
* @param queryBuilder 拼接的查询条件
* @param sort 排序字段,默认降序
* @param from 起始记录位置
* @param size 返回条数
* @author:shuyu.wang
* @description:查询接口
* @date: 2018/3/29 10:33
*
*/
ESReturn<List<Map<String,Object>>> query(String index, String type, QueryBuilder queryBuilder, String sort, Integer from, Integer size);
}
实现类:
@Service
public class ESServiceImpl implements ESService {
@Autowired
private ESUtil esUtil;
@Override
public Boolean add(String index,String type,Object obj) {
Client client = esUtil.getCient();
Field[] fields = obj.getClass().getDeclaredFields();
JsonObject jsonObject = new JsonObject();
for (int i = 0, len = fields.length; i < len; i++) {
// 对于每个属性,获取属性名
String varName = fields[i].getName();
try {
// 获取原来的访问控制权限
boolean accessFlag = fields[i].isAccessible();
// 修改访问控制权限
fields[i].setAccessible(true);
// 获取在对象f中属性fields[i]对应的对象中的变量
Object o;
try {
o = fields[i].get(obj);
jsonObject.addProperty(varName, o.toString());
System.err.println("传入的对象中包含一个如下的变量:" + varName + " = " + o);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// 恢复访问控制权限
fields[i].setAccessible(accessFlag);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
}
IndexResponse response = client.prepareIndex(index, type).setSource(jsonObject.toString(), XContentType.JSON).get();
esUtil.closeClient(client);
return null;
}
@Override
public ESReturn<List<Map<String,Object>>> query(String index, String type, QueryBuilder queryBuilder, String sort, Integer from, Integer size) {
ESReturn<List<Map<String,Object>>> esReturn=new ESReturn<List<Map<String,Object>>>();
Client client = esUtil.getCient();
SearchRequestBuilder srb = client.prepareSearch(index).setTypes(type);
SearchResponse sr = srb.setQuery(queryBuilder).setFrom(0).setSize(5)
.addSort("postDate", SortOrder.DESC)
.execute()
.actionGet(); // 分页排序所有
long totalHits = sr.getHits().totalHits();
esReturn.setTotal(totalHits);
SearchHits hits = sr.getHits();
List<Map<String,Object>> result=new ArrayList<>();
for (SearchHit hit : hits) {
Map<String,Object> map=(Map<String,Object>)hit.getSource();
result.add(map);
System.out.println(hit.getSourceAsString());
}
esReturn.setData(result);
return esReturn;
}
}
测试类:
@Autowired
ESService esService;
/**
* @author:shuyu.wang
* @description:新增样例
* @date: 2018/3/30 9:40
*/
@RequestMapping("/add2")
@ResponseBody
public Object add2() {
// Testa testa = new Testa();
// testa.setName("28");
// testa.setId("22");
// testa.setSex("女");
// testa.setNation("少数");
// testa.setGarden("123");
// esService.add("qq","tweet",testa);
return null;
}
/**
* @author:shuyu.wang
* @description:条件分页查询样例
* @date: 2018/3/30 9:39
*/
@RequestMapping("/get2")
@ResponseBody
public Object get2() {
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
WildcardQueryBuilder user = QueryBuilders.wildcardQuery("user", "*1");
queryBuilder.must(user);
ESReturn query = esService.query("qq","tweet",queryBuilder,"postDate",0,5);
System.out.println(query.getTotal());
return query;
}