Cache Lucene IndexReader with Apache Commons Pool
IndexReaderFactory.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556packageorg.ostree.module.lucene;importorg.apache.commons.pool.KeyedPoolableObjectFactory;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.store.FSDirectory;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.io.File;importjava.util.NoSuchElementException;publicclassIndexReaderFactoryimplementsKeyedPoolableObjectFactory<String, IndexReader> {privateString baseIndexDir="/var/data/ostree/index";privatestaticfinalLogger logger = LoggerFactory.getLogger(IndexReaderFactory.class);publicIndexReaderFactory(String baseIndexDir) {this.baseIndexDir = baseIndexDir;}@OverridepublicIndexReader makeObject(String key)throwsException {logger.info("open index: "+ key);File file=newFile(baseIndexDir,key);if(!file.exists()){thrownewNoSuchElementException(key +" index doesn't exist!");}FSDirectory dir =FSDirectory.open(file);returnIndexReader.open(dir,true);}@OverridepublicvoiddestroyObject(String key, IndexReader reader)throwsException {logger.info("destroy index: "+ key);reader.close();}@OverridepublicbooleanvalidateObject(String key, IndexReader reader) {logger.info("validate index: "+ key);if(reader!=null){returntrue;}returnfalse;}@OverridepublicvoidactivateObject(String key, IndexReader reader)throwsException {logger.debug("activate index: "+ key);}@OverridepublicvoidpassivateObject(String key, IndexReader reader)throwsException {logger.debug("passivate index: "+ key);}}Usage
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152importorg.apache.commons.pool.KeyedObjectPool;importorg.apache.commons.pool.impl.GenericKeyedObjectPool;importorg.apache.commons.pool.impl.GenericKeyedObjectPoolFactory;importorg.apache.lucene.document.Document;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.index.Term;importorg.apache.lucene.search.IndexSearcher;importorg.apache.lucene.search.NGramPhraseQuery;importorg.apache.lucene.search.ScoreDoc;importorg.apache.lucene.search.TopDocs;publicclassLuceneSearcherPool {publicstaticvoidmain(String[] args) {GenericKeyedObjectPool.Config config =newGenericKeyedObjectPool.Config();GenericKeyedObjectPoolFactory<String, IndexReader> poolFactory =newGenericKeyedObjectPoolFactory<String, IndexReader>(newIndexReaderFactory("/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(inti =0; i <10; i++) {longstart = 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) {}}publicstaticvoidtest(IndexReader reader)throwsException {String input ="java";intnum =5;IndexSearcher searcher =newIndexSearcher(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 ...
随机推荐
- Visual Event :快速查看 DOM 上绑定的 JS 事件
http://web.jobbole.com/82503/ Javascript中的事件经常被认为如谜一般不可解.Javascript是一个事件驱动的语言,在这样的前提下前面的看法是很奇怪,但是说到它 ...
- centos6安装GitLab全程详解和常见问题解决
GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用. 官方只提供了Debian/Ubuntu系统下的安 ...
- PHP中的11个魔术方法总结:__construct,、__destruct、__call等
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...
- FineUI利用JS取控件的值
用ExtJS的获取方式应该就可以了把...我是直接用Ext.getCmp("txt_cusname").getValue;不过txt_cusname这个控件如果是runat=&qu ...
- mysql 微信用户昵称emoji 完整保存
微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情.起先,我总以为MySQL只能保存纯文本数据.但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji ...
- 【Spring实战-2】Spring4.0.4整合Hibernate4.3.6
作者:ssslinppp 源程序下载:http://download.csdn.net/detail/ssslinppp/8751185 1. 摘要 本文主要讲解如何在Spring4.0. ...
- 【XMLHttpRequest】获取XMLHttpRequest
// 获取http请求 function getXMLHttpRequest() { req = false; //本地XMLHttpRequest对象 if (window.XMLHttpReque ...
- 设置redis 密码
redis配置密码 1.通过配置文件进行配置 yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到 [plain] view plain copy require ...
- [UE4]ue4 FString 中文乱码问题
使用FString出现乱码,最简单的情况,FString Str = "你好"; 这时候就会出现乱码,解决方法是改成这样 FString Str = TEXT("你好&q ...
- solr之模糊搜索(Fuzzy matching)
solr的模糊搜索主要有通配符,范围查询,近距离搜索等几类.下面分别探讨一下用法. 1. 通配符查询 通配符只是对单个term有效,对短语不起作用,ps:短语就是在查询条件上加双引号,比如 title ...