2015-01-08 6 views
1

성능 향상을 위해 문서 및 필드 인스턴스를 재사용하려고합니다. 20 초가 걸리는 인스턴스를 재사용하지 않고 파일에서 1 백만 행을 시도했습니다.Lucene 인덱싱에서 문서 및 필드 인스턴스 재사용

하지만 그렇게하려고하면 너무 많은 시간이 걸리고 계속 실행됩니다.

누구나 전에도 같은 문제에 직면 할 수 있습니까?

이것은 새 문서와 필드를 작성하는 파일의 각 행에 대해 인스턴스를 재사용하기 전에 기존 코드입니다.

FileInputStream fis; 
       try { 

        fis = new FileInputStream(file); 
        String filePath= file.getPath(); 
        BufferedReader br = new BufferedReader(
          new InputStreamReader(fis, StandardCharsets.UTF_8)); 

        String line = null; 
        while ((line = br.readLine()) != null) { 

         String[] lineTokens = line.split("\\|"); 
         Document doc = new Document(); 
         Field field1 = new TextField("field1", field1Value, Field.Store.YES); 
         doc.add(field1); 
         Field field2 = new StringField("field2", field2Value,Field.Store.YES); 
         doc.add(field2); 
         writer.addDocument(doc); 
        } 
        br.close(); 
       } catch (FileNotFoundException fnfe) { 

       } 

FileInputStream fis; 
       try { 

        fis = new FileInputStream(file); 
        String filePath= file.getPath(); 
        BufferedReader br = new BufferedReader(
          new InputStreamReader(fis, StandardCharsets.UTF_8)); 

        String line = null; 
        Document doc = new Document(); 
        Field field1 = new TextField("field1", field1Value, Field.Store.YES); 
        Field field2 = new StringField("field2", field2Value,Field.Store.YES); 
        while ((line = br.readLine()) != null) { 

         //String[] lineTokens = line.split("\\|"); 

         field1.setStringValue("field1Value"); 
         doc.add(field1); 

         field2.setStringValue("field2Value"); 
         doc.add(field2); 
         writer.addDocument(doc); 
        } 
        br.close(); 
       } catch (FileNotFoundException fnfe) { 

       } 

답변

4

을 변경 한 후 당신은 모든 반복에 문서에 필드를 추가 할 필요가 없습니다. 한 번 필드를 추가 한 후, 당신이해야 할 모든이 같은 인덱스에 변경된 문서를 작성 후 필드 값을 변경하고 있습니다 :

Document doc = new Document(); 
Field field1 = new TextField("field1", field1Value, Field.Store.YES); 
doc.add(field1); 
Field field2 = new StringField("field2", field2Value,Field.Store.YES); 
doc.add(field2); 
while ((line = br.readLine()) != null) { 
    field1.setStringValue("field1Value"); 
    field2.setStringValue("field2Value"); 

    writer.addDocument(doc); 
} 
+0

감사를 너무 많이 .. 작동 !!!! – Shankar