2014-03-05 89 views
1

我對Solr非常新,並試圖實現每30秒查詢solr的java程序。在循環中查詢solr不會返回任何內容

場景:

  1. 當程序啓動時,它會查詢的Solr的前一頁1月期間,以檢索DDI的網絡活動。 以下是查詢。 query.set(「q」,「pname:'深度威脅發現設備'AND eventName:MALWARE_DETECTION和logTime:[NOW-1MONTH TO NOW] AND app:HTTP」); query.setRows(10000);

  2. 初始化後,程序每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); 
} 

} 

有沒有人有一個想法這段代碼有什麼問題?

在此先感謝

回答

0

增加query.setRows(XXXX)到一些大的數量,並檢查,它幫助我

相關問題