Index: SegmentReader.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/SegmentReader.java,v retrieving revision 1.26 diff -u -r1.26 SegmentReader.java --- SegmentReader.java 17 Aug 2004 08:56:08 -0000 1.26 +++ SegmentReader.java 18 Aug 2004 19:25:22 -0000 @@ -42,7 +42,7 @@ private FieldsReader fieldsReader; TermInfosReader tis; - TermVectorsReader termVectorsReader; + private ThreadLocal termVectorsLocal = null; BitVector deletedDocs = null; private boolean deletedDocsDirty = false; @@ -128,7 +128,17 @@ openNorms(cfsDir); if (fieldInfos.hasVectors()) { // open term vector files only as needed - termVectorsReader = new TermVectorsReader(cfsDir, segment, fieldInfos); + final Directory dir = cfsDir; + termVectorsLocal = new ThreadLocal() { + protected synchronized Object initialValue() { + try { + return new TermVectorsReader(dir, segment, fieldInfos); + } catch (IOException ioe) { + ioe.printStackTrace(); + return null; + } + } + }; } } @@ -164,7 +174,12 @@ proxStream.close(); closeNorms(); - if (termVectorsReader != null) termVectorsReader.close(); + if (termVectorsLocal != null) { + TermVectorsReader termVectorsReader = (TermVectorsReader)termVectorsLocal.get(); + if (termVectorsReader != null) { + termVectorsReader.close(); + } + } if (cfsReader != null) cfsReader.close(); @@ -408,6 +423,15 @@ FieldInfo fi = fieldInfos.fieldInfo(field); if (fi == null || !fi.storeTermVector) return null; + if (termVectorsLocal == null) { + return null; + } + + TermVectorsReader termVectorsReader = (TermVectorsReader)termVectorsLocal.get(); + if (termVectorsReader == null) { + return null; + } + return termVectorsReader.get(docNumber, field); } @@ -419,8 +443,14 @@ * If no such fields existed, the method returns null. */ public TermFreqVector[] getTermFreqVectors(int docNumber) { - if (termVectorsReader == null) - return null; + if (termVectorsLocal == null) { + return null; + } + + TermVectorsReader termVectorsReader = (TermVectorsReader)termVectorsLocal.get(); + if (termVectorsReader == null) { + return null; + } return termVectorsReader.get(docNumber); }