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 + -
显示快捷键?