- 浏览: 115617 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (63)
- struts (7)
- spring (12)
- Hibernate (14)
- struts+spring+hibernate (11)
- Ajax (1)
- DWR (0)
- JSON (0)
- Junit (0)
- Lucene (15)
- Compass (0)
- Tomcat(Jsp) (0)
- MySql (0)
- JavaScript (0)
- Html (0)
- UML (0)
- Log4j (0)
- Ant (0)
- Acegi (0)
- (My)eclipse (0)
- java2 (0)
- Jakarta Commons (0)
- java Web (0)
- Ruby (0)
- Ruby On Rails (0)
- IBatis (0)
- 版本控制 (0)
- eXtremeComponents (0)
- SiteMesh (0)
- IT相关 (0)
- 电子商务 (0)
- 随笔 (0)
- 正则表达式 (0)
- 测试资料 (0)
- 个人收藏 (0)
- 开发经验 (0)
- 名词解释(java,j2ee) (1)
- 英语 (0)
- java规则引擎 (0)
- CMS系统 (0)
- XML操作 (0)
- jvm (0)
- 开源工具收集 (0)
- webService (2)
最新评论
-
锦毛鼠:
请问下您现在有没有这个demo啊?可以发我看看吗?
cxf webservice身份验证 -
z276356445t:
LZ,你写的类文件怎么和配置文件中的不一样呢,求解.
spring 定时器 -
j2eeli:
感谢共享!
spring 定时器 -
gimy:
写的很清楚,谢谢!
Spring-MultiActionController -
valgrind:
Exception in thread "main& ...
Lucene中文分词组件 JE-Analysis 1.4.0
在Lucene中,如果需要使用搜索,需要使用Searcher类,这是一个抽象类,它有2个子类:IndexSearcher和MultiSearcher.
IndexSearcher是对一个索引进行搜索,如果你需要对多个索引进行搜索,可以使用MultiSearcher.下面的内容只介绍了IndexSearcher.
搜索涉及到几个问题:分页,组合条件,根据条件过滤,排序等等.
分页:分页在记录列表的地方都会遇到,这里不在赘述,我也实现过一个保存分页结果和显示结果的类,用于自己的实际工作,下面也会用到保存分页结果的类,代码如下:
package com.jscud.support; /** * 分页显示用的参数. * * @author scud(飞云小侠) http://www.jscud.com * */ public class DivPageInfo { //开始记录数 private int recStart; //结束记录数 private int recEnd; //总页数 private int pageCount; //当前页 private int page; //记录总数 private int recCount; //每页记录数 private int perPageRows; public int getNicePageCount() { return getNicePageNum(pageCount); } //get,set等,不在列出 //...... /** * 得到友好的页数数字,页数为0时,返回1. * * @return 得到友好的页数 */ public static int getNicePageNum(int nPage) { if (nPage == 0) { return 1; } else { return nPage; } } } |
显示分页结果的类就需要大家根据自己使用的框架来具体实现了.我使用的是WebWork.
组合条件:在Lucene中,搜索的条件可以组合的很复杂,相关的类有BooleanQuery, FilteredQuery, MultiTermQuery, PhrasePrefixQuery, PhraseQuery, PrefixQuery, RangeQuery, SpanQuery, TermQuery 等等,从而可以组合出很复杂的条件用于查询.
另外QueryParser可以根据用户输入的字符串和设定的解析器和字段设置等,可以自动产生新的组合条件用于查询,例如用户输入"john AND black",QueryParser可以自己分析出用户是需要查询字段中同时包含"john"和"black"的结果.
过滤条件:有时候根据具体的用户需求,有些记录对于一些用户是不可见的,此时就要使用过滤器来防止不合法的用户看到不应该看到的记录.过滤器同时也可以根据一些具体的条件来过滤掉一些用户不想看到的记录.如果需要实现自己的filter,只要参考QueryFilter,DateFilter实现Filter即可.
排序:有时候,可能需要根据某个字段进行排序,例如按照时间排序.当然更多的时候是按照搜索结果的符合度进行排序,lucene默认的排序就是按照符合度来进行排序的.
进行搜索的代码如下,根据自己的需要进行代码的修改:
/** * 进行搜索. * * 参数依次为:搜索内容(支持lucene语法),当前页,每页记录数,分页信息对象 * */ public static List search(String searchText, int page, int perpage, final DivPageInfo pageinfo) { List docs = new ArrayList(); if(!LuceneSearch.indexExist(indexDir)) { return docs; } Searcher searcher = null; //处理检索条件 BooleanQuery query = new BooleanQuery(); //分页检索 DivPageInfo.divPage(hits.length(), perpage, page, pageinfo); //取出当前页的记录 return docs; |
代码中出现了一个新的类Hits,Hits是lucene的搜索结果集,是lazy load的结果集,只有你真正访问它,它才去装载真正的数据.
代码中还出现了一个LuceneDocument,这是为了在页面中显示而写的一个辅助类,因为lucene的Document是final的,无法进行扩展,而要显示时间字段必须要调用DateField中的函数,这样在页面中显示就不太直观了,所以写了这个辅助类,代码如下:
=center border=0> |
package com.jscud.www.support.search; import java.sql.Timestamp; import java.util.Date; import org.apache.lucene.document.DateField; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; /** * 对Lucene的Document的封装,用于显示目的. * * @author scud(飞云小侠) http://www.jscud.com * */ public class LuceneDocument { private Document doc; public LuceneDocument(Document doc) { this.doc = doc; } public static LuceneDocument getDocument(Document doc) { return new LuceneDocument(doc); } public String getValue(String name) { return doc.get(name); } public Field getField(String name) { return doc.getField(name); } public Timestamp getDateTime(String name) { String value = doc.get(name); return new Timestamp( DateField.stringToTime(value)); } public Date getDate(String name) { String value = doc.get(name); return DateField.stringToDate(value); } } |
使用WebWork对结果集进行了显示,代码如下:
<ww:iterator value="docs"> <tr > <td> <a href="<jscud:contextpath /><ww:property value="getValue('visiturl')" />" target="_blank" > <ww:property value="getValue('title')" escape="true" /> </a> (<jscud:datetime value="getDateTime('addtime')" />) </td> </tr> </ww:iterator> |
然后调用分页信息显示tag即可.
来源:Scud(飞云小侠) http://www.jscud.com
发表评论
-
lucene学习笔记 3
2007-09-27 18:05 1624搜索 Lucene搜索的api的类主要有4个 IndexSe ... -
lucene学习笔记 2
2007-09-27 18:04 1642Boosting特性 luncene对Document和Fi ... -
lucene学习笔记 1
2007-09-27 18:04 1186Doug Cutting 于2000年开始的项目 2001年9 ... -
使用Lucene进行全文检索---得到有效的内容
2007-09-27 18:02 1294在使用lucene对相关内容进行索引时,会遇到各种格式的内 ... -
lucene-2.0.0的基本应用
2007-09-27 18:00 1256首先肯定是建立索引了啊 public void creatI ... -
Lucene-2.0学习文档
2007-09-27 17:58 1151Lucene-2.0学习文档 Lucene是apache组织的 ... -
lucene搜索引擎技术的分析与整理
2007-09-27 17:56 25564. Lucene文档结构 Lucene ... -
实战 Lucene
2007-09-27 17:56 934文首先介绍了Lucene的一些基本概念,然后开发了一个应用程序 ... -
Lucene 中文分词的 highlight 显示
2007-09-27 17:55 14751 、问题的来源 增加分词以后结果的准确度提高了,但是用户 ... -
使用Lucene进行全文检索---处理索引
2007-09-27 17:53 1358http://www.jscud.com 转载请注明来源/作者 ... -
深入 Lucene 索引机制
2007-09-27 17:52 1093架构概览 图一显示了 Lucene 的索引机制的架构。Luce ... -
几个免费的中文分词模块
2007-09-27 17:50 4909一、什么是中文分词 众 ... -
Lucene站点推荐
2007-09-27 17:48 1303地址:http://www.lucene.com 简介:R ... -
Lucene中文分词组件 JE-Analysis 1.4.0
2007-09-27 17:45 5111本站申明 ...
相关推荐
赠送jar包:lucene-spatial3d-6.6.0.jar; 赠送原API文档:lucene-spatial3d-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial3d-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial3d-6.6.0.pom; 包含...
赠送jar包:lucene-spatial3d-6.6.0.jar; 赠送原API文档:lucene-spatial3d-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial3d-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial3d-6.6.0.pom; 包含...
赠送jar包:lucene-suggest-6.6.0.jar; 赠送原API文档:lucene-suggest-6.6.0-javadoc.jar; 赠送源代码:lucene-suggest-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-6.6.0.pom; 包含翻译后的API...
赠送jar包:lucene-spatial-extras-6.6.0.jar; 赠送原API文档:lucene-spatial-extras-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial-extras-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras...
赠送jar包:lucene-core-6.6.0.jar; 赠送原API文档:lucene-core-6.6.0-javadoc.jar; 赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-core-6.6.0.jar; 赠送原API文档:lucene-core-6.6.0-javadoc.jar; 赠送源代码:lucene-core-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-6.6.0.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-memory-6.6.0.jar; 赠送原API文档:lucene-memory-6.6.0-javadoc.jar; 赠送源代码:lucene-memory-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-memory-6.6.0.pom; 包含翻译后的API文档...
赠送jar包:lucene-highlighter-6.6.0.jar; 赠送原API文档:lucene-highlighter-6.6.0-javadoc.jar; 赠送源代码:lucene-highlighter-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-highlighter-6.6.0.pom;...
赠送jar包:lucene-spatial-6.6.0.jar; 赠送原API文档:lucene-spatial-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-6.6.0.pom; 包含翻译后的API...
赠送jar包:lucene-misc-6.6.0.jar; 赠送原API文档:lucene-misc-6.6.0-javadoc.jar; 赠送源代码:lucene-misc-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-misc-6.6.0.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-queryparser-6.6.0.jar; 赠送原API文档:lucene-queryparser-6.6.0-javadoc.jar; 赠送源代码:lucene-queryparser-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-queryparser-6.6.0.pom;...
赠送jar包:lucene-sandbox-6.6.0.jar; 赠送原API文档:lucene-sandbox-6.6.0-javadoc.jar; 赠送源代码:lucene-sandbox-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-sandbox-6.6.0.pom; 包含翻译后的API...
赠送jar包:lucene-grouping-6.6.0.jar; 赠送原API文档:lucene-grouping-6.6.0-javadoc.jar; 赠送源代码:lucene-grouping-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-grouping-6.6.0.pom; 包含翻译后...
Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例Lucene全文检索案例
使用compass+lucene实现简单的全文检索功能 里面整合了spring2.5、hibernate3.2、struts2.0,是对数据库进行全文检索的一个非常好的demo的所有jar包组合! 对研究基于数据库检索的java开源搜索引擎的朋友有很大的...
赠送jar包:lucene-spatial-extras-6.6.0.jar; 赠送原API文档:lucene-spatial-extras-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial-extras-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-extras...
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76273859本文出自【我是干勾鱼的博客】
赠送jar包:lucene-analyzers-common-6.6.0.jar; 赠送原API文档:lucene-analyzers-common-6.6.0-javadoc.jar; 赠送源代码:lucene-analyzers-common-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
基于Lucene的全文检索系统,对本地文件的全文检索,方便搜索自己的文档
赠送jar包:lucene-spatial-6.6.0.jar; 赠送原API文档:lucene-spatial-6.6.0-javadoc.jar; 赠送源代码:lucene-spatial-6.6.0-sources.jar; 赠送Maven依赖信息文件:lucene-spatial-6.6.0.pom; 包含翻译后的API...