- 浏览: 316087 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (286)
- 设计模式 (14)
- spring (5)
- 开发工具 (12)
- java (19)
- apache.commons工具 (7)
- ibaits (5)
- extjs4.0 (4)
- 数据库 (2)
- spring工具类 (2)
- jquery1.8 (32)
- 杂记 (1)
- linux (2)
- Quart (1)
- springMVC (2)
- webservice (1)
- oracle (5)
- dwr (6)
- jbmp3 (27)
- lucene3.5 (27)
- javascript (18)
- hibernate3.3.2 (27)
- spring事务管理 (10)
- nio (2)
- strust2 (3)
- jvm (7)
- jquery-easyui-1.2.6 (22)
- 多线程 (14)
- maven (3)
- 常用正则表达式 (4)
最新评论
-
HF_SKY000:
请问:
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密 ...
Java sslSocket 聊天实例
是否进行实时搜索
实时搜索(近实时搜索)
完全的实时搜索:只要数据库一变动,马上要更新索引,writer.commit来操作
近实时搜索:当用户修改了信息之后,先把索引保存到内存中,然后在一个统一的时间对内存中的所有的索引进行提交操作。reopen,NRTManager(near-real-time)
lucene3.5 近实时搜索(Near Real Time)
lucene通过NRTManager这个类来实现近实时搜索,所谓近实时搜索即在索引发生改变时,通
过线程跟踪,在相对很短的时间反映给给用户程序的调用
NRTManager通过管理IndexWriter对象,并将IndexWriter的一些方法(增删改)例如
addDocument,deleteDocument等方法暴露给客户调用,它的操作全部在内存里面,所以如果
你不调用IndexWriter的commit方法,通过以上的操作,用户硬盘里面的索引库是不会变化的,所
以你每次更新完索引库请记得commit掉,这样才能将变化的索引一起写到硬盘中,实现索引更新后的同步
用户每次获取最新索引
(IndexSearcher),可以通过两种方式,第一种是通过调用
NRTManagerReopenThread对象,该线程负责实时跟踪索引内存的变化,每次变化就调用
maybeReopen方法,保持最新代索引,打开一个新的IndexSearcher对象,而用户所要的
IndexSearcher对象是NRTManager通过调用getSearcherManager方法获得SearcherManager对
象,然后通过SearcherManager对象获取IndexSearcher对象返回个客户使用,用户使用完之
后调用SearcherManager的release释放IndexSearcher对象,最后记得关闭
NRTManagerReopenThread;
第二种方式是不通过NRTManagerReopenThread对象,而是直接调用
NRTManager的
maybeReopen方法来获取最新的IndexSearcher对象来获取最新索引
private SearcherManager mgr = null;
private NRTManager nrtMgr = null;
private IndexWriter writer = null;
writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
nrtMgr = new NRTManager
(writer,new SearcherWarmer() {
@Override
public void warm(IndexSearcher s) throws IOException {
System.out.println("reopen");
}
});
//启动NRTManager的Reopen线程
NRTManagerReopenThread reopen = new NRTManagerReopenThread(nrtMgr, 5.0,0.025);
reopen.setDaemon(true);
reopen.setName("NrtManager Reopen Thread");
reopen.start();
mgr = nrtMgr.getSearcherManager(true);
public void delete() {
try {
nrtMgr.deleteDocuments
(new Term("id","2"));
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void update() {
try {
/*
* Lucene并没有提供更新,这里的更新操作其实是如下两个操作的合集
* 先删除之后再添加
*/
Document doc = new Document();
doc.add(new Field("id","11",Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("email",emails[0],Field.Store.YES,Field.Index.NOT_ANALYZED));
doc.add(new Field("content",contents[0],Field.Store.NO,Field.Index.ANALYZED));
doc.add(new Field("name",names[0],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
nrtMgr.updateDocument
(new Term("id","1"), doc);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (LockObtainFailedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void search02() {
IndexSearcher searcher = mgr.acquire();
try {
// mgr.maybeReopen();//判断是否需要重新打开一个searcher
TermQuery query = new TermQuery(new Term("content","like"));
TopDocs tds = searcher.search(query, 10);
for(ScoreDoc sd:tds.scoreDocs) {
Document doc = searcher.doc(sd.doc);
System.out.println(doc.get("id")+"---->"+
doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+
doc.get("attach")+","+doc.get("date"));
}
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
mgr.release(searcher);
} catch (IOException e) {
e.printStackTrace();
}
}
}
发表评论
-
二十七、Luence在项目中运用
2012-12-26 15:03 1099public class LuceneContext { ... -
二十六、solr的基本使用
2012-12-26 10:26 962public class Message { p ... -
二十五、solr与tomcat的整合
2012-12-25 13:52 10531、solr是全文搜索服务器,专门用户管理索引的。 2 ... -
二十三、高亮显示
2012-12-20 09:24 1011public void lighter01() { ... -
二十二、Tika
2012-12-20 09:24 967Tika是2008年才产生的一个apache的项目,主要用于打 ... -
二十一、Luke
2012-12-20 09:24 814luke是一个查询索引的工具,使用时必须注意:版本要与luce ... -
二十、自定义过滤器
2012-12-20 09:23 874有的应用有些要求,对于某类型的内容即使满足条件了,但是也不 ... -
十七、搜索过滤
2012-12-20 09:23 637public void searcherByFilter(St ... -
十九、自定义QueryParser
2012-12-19 16:28 1224原因: 1、对于某些Quer ... -
十八、自定义评分
2012-12-19 16:18 792public class MyCustomScoreProvi ... -
十六、搜索排序
2012-12-19 12:14 1032public void searcherBySort(Stri ... -
十五、实现简单同义词分词器
2012-12-19 11:41 1260public interface SamewordContex ... -
十四、中文分词器
2012-11-28 13:49 865中文分词器 : Paoding:庖丁解牛分词器。 ... -
十三、自定义Stop分词器
2012-11-28 13:42 764import java.io.Reader; impor ... -
十二、Attribute
2012-11-28 13:20 827Attribute : ... -
十一、分词器的核心类
2012-11-28 13:12 907Analyzer : SimpleAnalyz ... -
十、分页搜索
2012-11-27 17:30 880分页查询有两种实现方式: 1、再查询 ... -
九、Queryparser
2012-11-27 17:24 1002Mike 默认域包含mike Mi ... -
八、其他搜索Query
2012-11-27 10:30 666TermRangeQuery : 字母范围搜索 ... -
七、搜索的简单实现(TermQuery)
2012-11-26 17:12 1004TermQuery只能精确匹配字符串(包括分词后的字符串,不 ...
相关推荐
在Android开发中,SearchManager是一个非常重要的组件,它主要用于实现应用程序内的全局搜索功能。这个功能让用户可以在不离开当前界面的情况下快速查找和访问应用中的数据。本文将深入探讨SearchManager的工作原理...
通过研究"浮动搜索框(SearchManager).doc"中的源码,你可以深入了解SearchManager的工作原理,学习如何在自己的应用中实现一个高效且用户友好的浮动搜索框。这份文档应该包含了具体的代码示例和实现细节,可以帮助...
在Android开发中,SearchManager是一个重要的组件,它用于实现应用内的搜索功能,提供了一种标准的方式来集成全局搜索和上下文搜索。本教程将深入探讨如何使用SearchManager来创建一个浮动搜索框,以及相关的源码...
本资源"浮动搜索框(SearchManager)(实用1).zip"可能包含一个示例项目,帮助开发者理解和实现这一功能。 首先,我们要理解`SearchManager`是如何工作的。`SearchManager`是Android系统提供的服务,负责管理搜索...
浮动搜索框(SearchManager)是Android开发中一种常见的交互元素,它允许用户在应用界面的顶部或底部方便地输入查询关键词,实现快速搜索。在这个毕业设计项目中,开发者提供了完整的源代码,使得学习者可以深入理解...
总之,这个项目将帮助你深入理解Android中的搜索功能,通过实际操作,你将掌握如何集成SearchManager和SearchView,以及如何处理搜索请求和提供用户友好的搜索体验。无论是对个人技能提升还是毕业设计,都是非常有...
通过研究这个项目,开发者不仅可以掌握如何在Android应用中实现一个功能完善的浮动搜索框,还能了解如何利用SearchManager进行全局搜索集成,从而提升应用的易用性和实用性。同时,这也是一次很好的实践机会,可以...
- 使用`SearchView`组件:这是Android SDK中内置的搜索视图,可以通过设置属性和监听器来实现基本的搜索功能。 - 自定义布局:为了实现浮动效果,可能需要创建自定义的布局组件,如使用`FrameLayout`或`...
在Android开发中,`SearchManager` 是一个非常重要的组件,它提供了一种高效且用户友好的方式来实现全局搜索功能。浮动搜索框通常指的是在应用界面中可以浮现在其他视图之上,允许用户快速输入查询内容的搜索框。在...
谷歌搜索管理器插件是一款在谷歌浏览器上运行的准们用于进行搜索的插件,本站提供的是该插件... 您可以直接从新标签页轻松切换Bing,Google和Yahoo搜索引擎。您的搜索引擎选择将允许您从地址栏和新标签页进行搜索,并允