Cache Lucene IndexReader with Apache Commons Pool
IndexReaderFactory.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556package
org.ostree.module.lucene;
import
org.apache.commons.pool.KeyedPoolableObjectFactory;
import
org.apache.lucene.index.IndexReader;
import
org.apache.lucene.store.FSDirectory;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
java.io.File;
import
java.util.NoSuchElementException;
public
class
IndexReaderFactory
implements
KeyedPoolableObjectFactory<String, IndexReader> {
private
String baseIndexDir=
"/var/data/ostree/index"
;
private
static
final
Logger logger = LoggerFactory
.getLogger(IndexReaderFactory.
class
);
public
IndexReaderFactory(String baseIndexDir) {
this
.baseIndexDir = baseIndexDir;
}
@Override
public
IndexReader makeObject(String key)
throws
Exception {
logger.info(
"open index: "
+ key);
File file=
new
File(baseIndexDir,key);
if
(!file.exists()){
throw
new
NoSuchElementException(key +
" index doesn't exist!"
);
}
FSDirectory dir =FSDirectory.open(file);
return
IndexReader.open(dir,
true
);
}
@Override
public
void
destroyObject(String key, IndexReader reader)
throws
Exception {
logger.info(
"destroy index: "
+ key);
reader.close();
}
@Override
public
boolean
validateObject(String key, IndexReader reader) {
logger.info(
"validate index: "
+ key);
if
(reader!=
null
){
return
true
;
}
return
false
;
}
@Override
public
void
activateObject(String key, IndexReader reader)
throws
Exception {
logger.debug(
"activate index: "
+ key);
}
@Override
public
void
passivateObject(String key, IndexReader reader)
throws
Exception {
logger.debug(
"passivate index: "
+ key);
}
}
Usage
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import
org.apache.commons.pool.KeyedObjectPool;
import
org.apache.commons.pool.impl.GenericKeyedObjectPool;
import
org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory;
import
org.apache.lucene.document.Document;
import
org.apache.lucene.index.IndexReader;
import
org.apache.lucene.index.Term;
import
org.apache.lucene.search.IndexSearcher;
import
org.apache.lucene.search.NGramPhraseQuery;
import
org.apache.lucene.search.ScoreDoc;
import
org.apache.lucene.search.TopDocs;
public
class
LuceneSearcherPool {
public
static
void
main(String[] args) {
GenericKeyedObjectPool.Config config =
new
GenericKeyedObjectPool.Config();
GenericKeyedObjectPoolFactory<String, IndexReader> poolFactory =
new
GenericKeyedObjectPoolFactory<String, IndexReader>(
new
IndexReaderFactory(
"/var/data/ostree/index"
), config);
KeyedObjectPool<String, IndexReader> pool = poolFactory.createPool();
try
{
String[] dates = {
"2012-01-01"
,
"2011-01-04"
,
"2012-01-05"
};
for
(String date : dates) {
for
(
int
i =
0
; i <
10
; i++) {
long
start = System.currentTimeMillis();
IndexReader reader = pool.borrowObject(date);
test(reader);
pool.returnObject(date, reader);
System.out.println(date +
":"
+ i +
";"
+ (System.currentTimeMillis() - start));
}
}
pool.close();
}
catch
(Exception ex) {
}
}
public
static
void
test(IndexReader reader)
throws
Exception {
String input =
"java"
;
int
num =
5
;
IndexSearcher searcher =
new
IndexSearcher(reader);
//build your query here
//Query query =
TopDocs hits = searcher.search(query, num);
for
(ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc);
// handle the Document
}
searcher.close();
}
}
Cache Lucene IndexReader with Apache Commons Pool的更多相关文章
- JedisCluster中应用的Apache Commons Pool对象池技术
对象池技术在服务器开发上应用广泛.在各种对象池的实现中,尤其以数据库的连接池最为明显,可以说是每个服务器必须实现的部分. apache common pool 官方文档可以参考:https://c ...
- Tomcat 开发web项目报Illegal access: this web application instance has been stopped already. Could not load [org.apache.commons.pool.impl.CursorableLinkedList$Cursor]. 错误
开发Java web项目,在tomcat运行后报如下错误: Illegal access: this web application instance has been stopped already ...
- NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool/impl ...
- Spring + Tomcat 启动报错java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool
错误如下: -- ::,-[TS] INFO http-- org.springframework.beans.factory.support.DefaultListableBeanFactory - ...
- Apache Commons Pool 故事一则
Apache Commons Pool 故事一则 最近工作中遇到一个由于对commons-pool的使用不当而引发的问题,习得正确的使用姿势后,写下这个简单的故事,帮助理解Apache Commons ...
- 池化 - Apache Commons Pool
对于那些创建耗时较长,或者资源占用较多的对象,比如网络连接,线程之类的资源,通常使用池化来管理这些对象,从而达到提高性能的目的.比如数据库连接池(c3p0, dbcp), java的线程池 Execu ...
- org/apache/commons/pool/impl/GenericObjectPool异常的解决办法
org/apache/commons/pool/impl/GenericObjectPool异常的解决办法 webwork+spring+hibernate框架的集成, 一启动Tomcat服务器就出了 ...
- 对象池化技术 org.apache.commons.pool
恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.Jakarta Commons Pool组件提供了一整套用于实现对象池化的框架,以及若干种各具特色的对象池实现,可以 ...
- Java_异常_03_ java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
异常信息: java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory 原因: 我用的是commons ...
随机推荐
- Angular 4 依赖注入
一.依赖注入 1. 创建工程 ng new myangular 2. 创建组件 ng g componet product1 3. 创建服务 ng g service shared/product 如 ...
- 阿里巴巴Java开发手册-并发处理
1. [强制]获取单例对象需要保证线程安全,其中的方法也要保证线程安全.说明:资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯.正例: ...
- Oracle 10g下emctl start dbconsole 报错:OC4J Configuration issue 问题解决
http://blog.sina.com.cn/s/blog_95b5eb8c0100x4a7.html http://blog.csdn.net/sz_bdqn/article/details/17 ...
- linux 线程的同步 一 (互斥量和信号量)
互斥量(Mutex) 互斥量表现互斥现象的数据结构,也被当作二元信号灯.一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源. ...
- Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比
Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比 上一篇文章: Android自动化测试中AccessibilityService获取控件信息(1 ...
- bzoj2262: 平行宇宙与虫洞
Description 量子力学指出,宇宙并非只有一种形态. 根据量子理论,一件事件发生之后可以产生不同的后果,而所有可能的后果都会形成自己的宇宙. 我们可以把一个宇宙看成一个时间轴,虫洞可以看成不同 ...
- 常用的sql语句(存储过程语法)
1.存储过程语法 ①package create or replace package PKG_RPT_WAREHOUSE is -- Author : -- Created : 2018/9/28 ...
- 杂项:SQLite
ylbtech-杂项:SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是 ...
- 定义function的层级
不知道标题拟的对不对,今天犯了个错误,图一是正确的写法. 图一 为了代码可以重复利用,我把其中两个方法独立出来,如图二. 图二 后来发现运行错误,说Gxrc未定义,百思不得其解,后来琢磨了好久,才发现 ...
- python simplejson and json 使用及区别
''' import simplejson as json #几个主要函数:dump.dumps.load.loads,带s跟不带s的区别: 带s的是对 字符串的处理,而不带 s的是对文件对像的处理. ...