Hi All, I am facing a peculiar problem.
I am trying to index a file and the indexing code executes without any error but when I try to close the indexer, I get the following error and the error comes very rarely but when it does, no code on document indexing works and I finally have to delete all indexes and run a re-indexing utility. Can anyone please suggest what might be the problem? Thanks a ton Shivani Stack Trace: java.lang.ArrayIndexOutOfBoundsException: 97 >= 17 at java.util.Vector.elementAt(Vector.java:432) at org.apache.lucene.index.FieldInfos.fieldInfo(FieldInfos.java:135) at org.apache.lucene.index.FieldsReader.doc(FieldsReader.java:103) at org.apache.lucene.index.SegmentReader.document(SegmentReader.java:237) at org.apache.lucene.index.SegmentMerger.mergeFields(SegmentMerger.java:169) at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:97) at org.apache.lucene.index.IndexWriter.mergeSegments(IndexWriter.java:425) at org.apache.lucene.index.IndexWriter.flushRamSegments(IndexWriter.java:373) at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:193) at rd.admin.Indexer.indexFile(Indexer.java:150) Code: public void indexFile(File indexDirFile, File resumeFile) throws IOException, FileNotFoundException { IndexWriter indexwriter = null; File afile[] = indexDirFile.listFiles(); boolean flag = false; if (afile.length <= 0) flag = true; indexwriter = new IndexWriter(indexDirFile, new StandardAnalyzer(), flag); doIndexing(indexwriter, resumeFile); closeIndexWriter(indexwriter); } //-------------------------------------------------------------------------- ----------------------// public void doIndexing(IndexWriter indexwriter, File resumeFile) throws FileNotFoundException { System.out.println("Indexing of File " + resumeFile.getName() + "Started..."); Document document = new Document(); if (resumeFile.getName().endsWith(".pdf")) { FileInputStream fileinputstream; try { fileinputstream = new FileInputStream(resumeFile); } catch (FileNotFoundException e1) { e1.printStackTrace(); throw new MyRuntimeException(e1.getMessage(), e1); } Object obj = null; InputStreamReader inputstreamreader = null; OutputStreamWriter outputstreamwriter = null; PDDocument pddocument = null; try { PDFParser pdfparser = new PDFParser(fileinputstream); pdfparser.parse(); pddocument = pdfparser.getPDDocument(); ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(); outputstreamwriter = new OutputStreamWriter(bytearrayoutputstream); PDFTextStripper pdftextstripper = new PDFTextStripper(); pdftextstripper.writeText(pddocument.getDocument(), outputstreamwriter); byte abyte0[] = bytearrayoutputstream.toByteArray(); inputstreamreader = new InputStreamReader(new ByteArrayInputStream(abyte0)); document.add(Field.Text(IndexerColumns.contents, inputstreamreader)); abyte0 = bytearrayoutputstream.toByteArray(); } catch (Exception e) { System.out.println("error in indexFile " + e.getMessage()); e.printStackTrace(); } finally { if (inputstreamreader != null) { inputstreamreader = null; } if (outputstreamwriter != null) { try { outputstreamwriter.close(); } catch (IOException e2) { e2.printStackTrace(); } } if (pddocument != null) { try { pddocument.close(); } catch (IOException e2) { e2.printStackTrace(); } } inputstreamreader = null; } } else { document.add(Field.Text(IndexerColumns.contents, new FileReader(resumeFile))); } document.add(Field.Keyword(IndexerColumns.id, String.valueOf(mapLuceneParams.get(IndexerColumns.id)))); for (int i = 0; i < this.columnInfos.length; i++) { ColumnInfo columnInfo = columnInfos[i]; String value = String.valueOf(mapLuceneParams.get(columnInfo.columnName)); if (value != null) { value = value.trim(); if (value.length() != 0) { if (columnInfo.istokenized) { document.add(Field.Text(columnInfo.columnName, value)); } else { document.add(Field.Keyword(columnInfo.columnName, value.toLowerCase())); } } } } document.add(Field.Keyword(IndexerColumns.filePath, String .valueOf(mapLuceneParams.get(IndexerColumns.filePath)))); try { indexwriter.addDocument(documentWithCustomFields); } catch (IOException e) { closeIndexWriter(indexwriter); e.printStackTrace(); throw new MyRuntimeException(e.getMessage(), e); } } //-------------------------------------------------------------------------- ----------------------// private void closeIndexWriter(IndexWriter indexwriter) { if (indexwriter != null) { System.out.println("going to close index writer"); try { indexwriter.close(); } catch (IOException e1) { e1.printStackTrace(); } } }