2013-04-17 1 views
1

Я пытаюсь найти запрос из индекса Apache Lucene. Поиск возвращает большое количество результатов, я должен заполнить результат в JTable с помощью Swing. Я использую цикл для извлечения строки объекта из индекса Apache Lucene.Извлечь данные из индекса apache lucene и заполнить JTable

По этой причине, если есть тысячи записей, требуется время для заполнения записей в таблице, я использую следующий код. Есть ли другой способ выполнить задачу без запуска цикла?

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(); 
} 
+2

* "Есть ли другой способ для достижения этой задачи, не запуская цикл? »* Если бы был другой способ, я сомневаюсь, что это будет быстрее, чем цикл. BTW Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы! –

ответ

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); 
} 
  • Я бы определить переменную в виде Vector<Object> newRow = new Vector<Object>();

  • все важно, описано в Oracle turorial How to use Tables