1

我正在尝试从 Apache Lucene 索引中搜索查询。搜索返回大量结果,我必须JTable使用 Swing 填写结果。我正在使用循环从 Apache Lucene 索引中提取对象行。

由于上述原因,如果有数千条记录,那么填写表中的记录需要时间,我正在使用以下代码。有没有其他方法可以在不运行循环的情况下完成任务?

  try {         File indexDir= new File("path of the file")

               Directory directory = FSDirectory.open(indexDir);

                    IndexSearcher searcher = new IndexSearcher(directory, true);
                    int maxhits=1000000;
                    QueryParser parser1 = new QueryParser(Version.LUCENE_36, "field",

                      new StandardAnalyzer(Version.LUCENE_36));

              Query qu=parser1.parse("texttosearch");

                    TopDocs topDocs = searcher.search(, maxhits);
                    ScoreDoc[] hits = topDocs.scoreDocs;


              len = hits.length;


                     int docId = 0;
                    Document d;
                    Vector column_name=new Vector();   

    column_name.addElement("title"); 
    column_name.addElement(""); 
      // For All Rows Data

    Vector row=new Vector();
     String filename="";
               String titlee="";
    Vector newRow=new Vector();



    for ( i = 0; i<len; i++) {
     docId = hits[i].doc;
     d = searcher.doc(docId);
     filename= d.get(("fpath"));
     titlee=d.get("title");
     newRow= new Vector();
     newRow.addElement(titlee);
     newRow.addElement(filename);
     row.addElement(newRow);                     

    }

    DefaultTableModel model= new DefaultTableModel(row, column_name);
    table.setModel(model);    


 }

catch(Exception ex)

{

  ex.printStackTrace();
}
4

1 回答 1

1

小错误有时会造成大麻烦

  • Vector row = new Vector();应该Vector<Vector<Object>> row = new Vector<Vector<Object>>();

  • 循环中的第一行for (i = 0; i < len; i++) { 必须是newRow = new Vector();

伪代码

for (i = 0; i < len; i++) {
     // must be otherwise first Vector is added forever!!!
     newRow = new Vector();

     //loop, add elements to one dimensional Vector

     // add 1D Vector to 2D Vector used and implemented in JTables API 
     row.addElement(newRow); 
}
于 2013-04-17T13:32:26.967 回答