gpt4 book ai didi

java - 如何安全地关闭 IndexReader?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:07 24 4
gpt4 key购买 nike

我的问题很简单,当用IndexReader.openIfChanged(reader)替换掉之前的reader时,如何安全的关闭oldReader

代码如下:(使用 Lucene 3.5)

IndexReader newReader=IndexReader.openIfChanged(reader);
if(newReader!=null){
IndexReader oldReader=reader;
IndexSearcher oldSearcher=searcher;

reader=newReader;
searcher=new IndexSearcher(newReader);

oldSearcher.close();
oldReader.close();//or oldReader.decRef(),result is the same
}

这段代码在守护线程中,每5秒运行一次

IndexReader 实例(reader 对象)是全局唯一的

由于此更改,我得到一个异常(exception):

org.apache.lucene.store.AlreadyClosedException: this IndexReader is closed
at org.apache.lucene.index.IndexReader.ensureOpen(IndexReader.java:297)
at org.apache.lucene.index.IndexReader.getSequentialSubReaders(IndexReader.java:1622)
at org.apache.lucene.search.TermQuery$TermWeight.scorer(TermQuery.java:98)
at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:298)
at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:298)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:577)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:517)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:487)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:400)
at org.zenofo.index.IndexManager.query(IndexManager.java:392)
...

IndexManager.java:392 使用reader对象(IndexReader实例,全局唯一)

IndexManager.query方法有大量并发请求,所有请求使用一个全局唯一的IndexReader实例(reader对象)

enter image description here

我需要关闭 oldReader 只是因为:

引用:

我该如何解决这个问题?

最佳答案

查看 NRTManager 和 SearcherManager。您真的不必自己处理这个问题。

关于java - 如何安全地关闭 IndexReader?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com