我對Solr非常新,並試圖實現每30秒查詢solr的java程序。在循環中查詢solr不會返回任何內容
場景:
當程序啓動時,它會查詢的Solr的前一頁1月期間,以檢索DDI的網絡活動。 以下是查詢。 query.set(「q」,「pname:'深度威脅發現設備'AND eventName:MALWARE_DETECTION和logTime:[NOW-1MONTH TO NOW] AND app:HTTP」); query.setRows(10000);
初始化後,程序每30秒查詢一次DDA。 以下是查詢。 query.set(「q」,「pname:'深度威脅發現設備'AND eventName:MALWARE_DETECTION和logTime:[NOW-30SEPOND TO NOW] AND app:HTTP」); query.setRows(10000);
#1中的查詢返回一些結果。 但是每隔30秒調用一次的第二個查詢不會返回任何內容。 SolrDocumentList.size()是0總是。
以下是我的java代碼。
public void run(){
Connection conn;
PreparedStatement ps;
int dda_count = glob_var.dda_cnt;
long threadId = Thread.currentThread().getId();
System.out.println("Solr handling thread started... Thread ID: " + threadId);
System.out.println("Solr monitoring started... Thread ID: " + threadId);
while(true){
try{
for(int j = 0; j < glob_var.dda_cnt; j++){
Query_DDA_Solr(dda_solr[j], my_url);
Thread.sleep(100);
}
Thread.sleep(30000);
} catch(Exception e){
log.write_log("DDIC_SOLR_CON/run: " + e);
}
}
}
public static void Query_DDA_Solr(String dda_s, String my_u){
try{
Connection conn;
PreparedStatement ps;
SolrServer server = new HttpSolrServer(dda_s);
SolrQuery query = new SolrQuery();
//query.set("q","pname:'Deep Discovery Inspector' AND eventName:MALWARE_DETECTION AND logTime:[NOW-5MINUTE TO NOW] AND app:HTTP");
query.set("q","pname:'Deep Discovery Inspector' AND eventName:MALWARE_DETECTION AND app:HTTP");
query.setRows(10000);
QueryResponse rsp = server.query(query);
SolrDocumentList results = rsp.getResults();
conn = DriverManager.getConnection(my_u, glob_var.my_userid, glob_var.my_userpw);
System.out.println("size of result = " + results.size());
for (int i = 0; i < results.size(); ++i) {
//boolean insert = false;
String virusname = "", request = "";
Timestamp etime = null;
String element = results.get(i).toString();
StringTokenizer ts = new StringTokenizer(element, "{");
ts.nextElement();
String ts2 = ts.nextElement().toString();
ts = new StringTokenizer(ts2, ",");
while(ts.hasMoreTokens()){
String pair = ts.nextToken();
StringTokenizer ts_2 = new StringTokenizer(pair, "=");
String temp_attr = ts_2.nextElement().toString();
if(temp_attr.equals(" logTime")){
String eventtime = ts_2.nextElement().toString();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
Date d = (Date) sdf.parse(eventtime);
Timestamp temp_ts = new Timestamp(d.getTime());
etime = temp_ts;
break;
}
}
String app = "";
// other works here
//if(insert){
if(etime.after(glob_var.solr_timestamp)){
ResultSet trs = null;
PreparedStatement my_ps;
// database insert here
}
}
conn.close();
results.clear();
query.clear();
server.shutdown();
Thread.sleep(5);
} catch(Exception e){
log.write_log("SOLR_CON/Query_DDA_Solr: " + e);
}
}
有沒有人有一個想法這段代碼有什麼問題?
在此先感謝