在学习elasticsearch的时候结合kibana可视化,但是感觉现在的kibana做的还不好,好多模块还不成熟,所以为了需求就要自己开发可视化界面,对于elasticsearch的javaAPI的需求也就有了,但是官方文档上讲解的不是全面,并没有明确的指出查找和删除的使用,只是介绍了一下,这是我在网上找的javaAPIdoc,阅读自己研究出来的可行的代码实现,现在分享给大家。
1、elasticsearchUtil.java
public class ElasticsearchUtil {
// private static final Logger LOGGER = Logger
// .getLogger(ElasticsearchUtil.class);
public static TransportClient getClient() {
TransportClient client = null;
try {
client = TransportClient
.builder()
.build()
.addTransportAddress(
new InetSocketTransportAddress(InetAddress
.getByName("192.168.20.247"), 9300));
return client;
} catch (Exception e) {
// LOGGER.info("link elasticsearch failed !");
}
return client;
}
public static void close(TransportClient client) {
if (client != null)
client.close();
}
}
2.searchBydate
public List<String> searchBydate(String index,Date date){
TransportClient client = ElasticsearchUtil.getClient();
List<String> hitcontents = new ArrayList<String>();
JSONObject obj = null;
SearchRequestBuilder sbuilder = client.prepareSearch(index);
SearchResponse response = sbuilder.execute().actionGet();
SearchHits hits = response.getHits();
// System.out.println(response.get);
SearchHit[] h = hits.getHits();
for (SearchHit hit : h) {
// System.out.println(hit.getId());
obj = JSONObject.fromObject(hit.getSourceAsString());
// System.out.println(hit.getSourceAsString());
Date newdate = dateutil(obj.getString("@timestamp"));
if (newdate.before(date))
hitcontents.add(hit.getSourceAsString());
}
return hitcontents;
}
3.searchforId
public List<String> searchforId(String index,Date date){
TransportClient client = ElasticsearchUtil.getClient();
List<String> hitid = new ArrayList<String>();
JSONObject obj = null;
SearchRequestBuilder sbuilder = client.prepareSearch(index);
SearchResponse response = sbuilder.execute().actionGet();
SearchHits hits = response.getHits();
// System.out.println(response.get);
SearchHit[] h = hits.getHits();
for (SearchHit hit : h) {
// System.out.println(hit.getId());
obj = JSONObject.fromObject(hit.getSourceAsString());
// System.out.println(hit.getSourceAsString());
Date newdate = dateutil(obj.getString("@timestamp"));
if (newdate.before(date))
// hitcontents.add(hit.getSourceAsString());
hitid.add(hit.getId());
}
return hitid;
}
4、 dateutil
private Date dateutil(String date) {
date = date.replace("Z", " UTC");
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS Z");
Date d = null;
try {
d = format.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
}
5、deleteBydate
public void deleteBydate(String index , String type , String id){
TransportClient client = ElasticsearchUtil.getClient();
DeleteRequestBuilder drBuilder = client.prepareDelete(index, type, id);
// DeleteRequestBuilder drBuilder = client.prepareDeleteIndexedScript(scriptLang, id)
DeleteResponse response = drBuilder.execute().actionGet();
if(response.isFound())
System.out.println("");
else
System.out.println("");
}
6、delete—主要的删除函数
public static void delete(int time) {
Delete delete = new Delete();
List<String> hitcontents = new ArrayList<String>();
List<String> hitid = new ArrayList<String>();
JSONObject obj = null;
String index = PropertiesUtil.getProperty("index");
Date d=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(d.getTime() - time * 24 * 60 * 60 * 1000);
// hitcontents = delete.searchBydate(index, date);
hitid = delete.searchforId(index, date);
// Iterator it = hitcontents.iterator();
Iterator itid = hitid.iterator();
while(itid.hasNext()){
// System.out.println(it.next());
// obj = JSONObject.fromObject(it.next());
// String _index = obj.getString(index);
// String _id = obj.getString("_id");
// String _type = obj.getString("type");
System.out.println(itid.next().toString());
delete.deleteBydate(index , "syslog" , itid.next().toString());
}
}
这是自己实现的代码,就不细说了,有什么不懂得可以留言,大家一起讨论啊。