abstractindex.java
来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 502 行 · 第 1/2 页
JAVA
502 行
if (!IndexReader.isLocked(getDirectory())) { return; } if (indexReader != null) { indexReader.commitDeleted(); } if (indexWriter != null) { log.debug("committing IndexWriter."); indexWriter.close(); indexWriter = null; } // optimize if requested if (optimize) { IndexWriter writer = getIndexWriter(); writer.optimize(); writer.close(); indexWriter = null; } } /** * Closes this index, releasing all held resources. */ synchronized void close() { if (indexWriter != null) { try { indexWriter.close(); } catch (IOException e) { log.warn("Exception closing index writer: " + e.toString()); } indexWriter = null; } if (indexReader != null) { try { indexReader.close(); } catch (IOException e) { log.warn("Exception closing index reader: " + e.toString()); } indexReader = null; } if (sharedReader != null) { try { sharedReader.close(); } catch (IOException e) { log.warn("Exception closing index reader: " + e.toString()); } } if (directory != null) { try { directory.close(); } catch (IOException e) { directory = null; } } } /** * Closes the shared reader. * * @throws IOException if an error occurs while closing the reader. */ protected synchronized void invalidateSharedReader() throws IOException { // invalidate shared reader if (sharedReader != null) { sharedReader.close(); sharedReader = null; } } /** * Returns a document that is finished with text extraction and is ready to * be added to the index. * * @param doc the document to check. * @return <code>doc</code> if it is finished already or a stripped down * copy of <code>doc</code> without text extractors. * @throws IOException if the document cannot be added to the indexing * queue. */ private Document getFinishedDocument(Document doc) throws IOException { if (!Util.isDocumentReady(doc)) { Document copy = new Document(); for (Enumeration fields = doc.fields(); fields.hasMoreElements(); ) { Field f = (Field) fields.nextElement(); Field field = null; Field.TermVector tv = getTermVectorParameter(f); Field.Store stored = getStoreParameter(f); Field.Index indexed = getIndexParameter(f); if (f.readerValue() != null) { // replace all readers with empty string reader field = new Field(f.name(), new StringReader(""), tv); } else if (f.stringValue() != null) { field = new Field(f.name(), f.stringValue(), stored, indexed, tv); } else if (f.isBinary()) { field = new Field(f.name(), f.binaryValue(), stored); } if (field != null) { field.setOmitNorms(f.getOmitNorms()); copy.add(field); } } // schedule the original document for later indexing Document existing = indexingQueue.addDocument(doc); if (existing != null) { // the queue already contained a pending document for this // node. -> dispose the document Util.disposeDocument(existing); } // use the stripped down copy for now doc = copy; } return doc; } //-------------------------< properties >----------------------------------- /** * The lucene index writer property: useCompountFile */ void setUseCompoundFile(boolean b) { useCompoundFile = b; if (indexWriter != null) { indexWriter.setUseCompoundFile(b); } } /** * The lucene index writer property: minMergeDocs */ void setMinMergeDocs(int minMergeDocs) { this.minMergeDocs = minMergeDocs; if (indexWriter != null) { // since lucene 2.0 setMaxBuffereDocs is equivalent to previous minMergeDocs attribute indexWriter.setMaxBufferedDocs(minMergeDocs); } } /** * The lucene index writer property: maxMergeDocs */ void setMaxMergeDocs(int maxMergeDocs) { this.maxMergeDocs = maxMergeDocs; if (indexWriter != null) { indexWriter.setMaxMergeDocs(maxMergeDocs); } } /** * The lucene index writer property: mergeFactor */ void setMergeFactor(int mergeFactor) { this.mergeFactor = mergeFactor; if (indexWriter != null) { indexWriter.setMergeFactor(mergeFactor); } } /** * The lucene index writer property: maxFieldLength */ void setMaxFieldLength(int maxFieldLength) { this.maxFieldLength = maxFieldLength; if (indexWriter != null) { indexWriter.setMaxFieldLength(maxFieldLength); } } //------------------------------< internal >-------------------------------- /** * Returns the index parameter set on <code>f</code>. * * @param f a lucene field. * @return the index parameter on <code>f</code>. */ private Field.Index getIndexParameter(Field f) { if (!f.isIndexed()) { return Field.Index.NO; } else if (f.isTokenized()) { return Field.Index.TOKENIZED; } else { return Field.Index.UN_TOKENIZED; } } /** * Returns the store parameter set on <code>f</code>. * * @param f a lucene field. * @return the store parameter on <code>f</code>. */ private Field.Store getStoreParameter(Field f) { if (f.isCompressed()) { return Field.Store.COMPRESS; } else if (f.isStored()) { return Field.Store.YES; } else { return Field.Store.NO; } } /** * Returns the term vector parameter set on <code>f</code>. * * @param f a lucene field. * @return the term vector parameter on <code>f</code>. */ private Field.TermVector getTermVectorParameter(Field f) { if (f.isStorePositionWithTermVector() && f.isStoreOffsetWithTermVector()) { return Field.TermVector.WITH_POSITIONS_OFFSETS; } else if (f.isStorePositionWithTermVector()) { return Field.TermVector.WITH_POSITIONS; } else if (f.isStoreOffsetWithTermVector()) { return Field.TermVector.WITH_OFFSETS; } else if (f.isTermVectorStored()) { return Field.TermVector.YES; } else { return Field.TermVector.NO; } } /** * Adapter to pipe info messages from lucene into log messages. */ private static final class LoggingPrintStream extends PrintStream { /** Buffer print calls until a newline is written */ private StringBuffer buffer = new StringBuffer(); public LoggingPrintStream() { super(new OutputStream() { public void write(int b) { // do nothing } }); } public void print(String s) { buffer.append(s); } public void println(String s) { buffer.append(s); log.debug(buffer.toString()); buffer.setLength(0); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?