- 浏览: 117669 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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
首先肯定是建立索引了啊
public void creatIndex() {
File indexDir = new File(getPathIndex());
try {
List<Article> listArticle = getArticleDao().search(null, null,null, null, null, null, null, null, new Boolean(true));
for (int i = 0; i < listArticle.size(); i++) {
Document doc = new Document();
Article article = listArticle.get(i);
//我的配置是追加方式的建立索引,所以为了不重复数据,只好先删除再添加
deleteAllIndex(article);
Field fieldId = new Field("id", article.getId().toString(),
Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.YES);
Field fieldTitles = new Field("title", article.getTitle(),
Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.YES);
//我没有用任何的分析器,所以只好用HTMLParser 把HTML分析成文本在索引
String contentHtml = article.getContent();
Reader read = new StringReader(contentHtml);
HTMLParser htmlParser = new HTMLParser(read);
BufferedReader breader = new BufferedReader(htmlParser.getReader());
String htmlContent = "";
String tempContent = breader.readLine();
while (tempContent != null && tempContent.length() > 0) {
htmlContent = htmlContent + tempContent;
tempContent = breader.readLine();
}
//下面的是Field 我找了半天可是没有找到存储object的方法,本想自己写,可是没时间,就把对象切开放
Field fieldContents = new Field("content", htmlContent,
Field.Store.COMPRESS, Field.Index.TOKENIZED,Field.TermVector.YES);
Field fieldTime = new Field("time", article.getUpdateTime().toString(), Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.YES);
Field fieldAuthor = new Field("author", article.getAuthor(), Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.YES);
Field fieldCategory = new Field("category", article.getCategory().getOutsideName(), Field.Store.COMPRESS,
Field.Index.TOKENIZED, Field.TermVector.YES);
String path = "/" + article.getCategory().getCategoryUrl()+ "/" + article.getId() + ".html";
Field fieldPath = new Field("path", path, Field.Store.COMPRESS,
Field.Index.TOKENIZED, Field.TermVector.YES);
doc.add(fieldId);
doc.add(fieldPath);
doc.add(fieldCategory);
doc.add(fieldTime);
doc.add(fieldAuthor);
doc.add(fieldContents);
doc.add(fieldTitles);
indexWriter.addDocument(doc);
}
indexWriter.optimize();
indexWriter.close();}
catch (IOException e) { e.printStackTrace();}
}
到这里索引已经建立了 ,下面要做的就是搜索
public List<Document> searchDoc(String type, String queryString) {
List<Document> fileList = new ArrayList<Document>();
//其实这里是不需要的,因为lucene默认是调用它的,当然还有另外一个,我这里只是为了下面的高亮显示
Analyzer analyzer = new StandardAnalyzer();
try {
Directory fsDir = FSDirectory.getDirectory(getPathIndex(), false);
IndexSearcher searcher = new IndexSearcher(fsDir);
QueryParser queryParse = new QueryParser(type, analyzer);
Hits hits = searcher.search(queryParse.parse(queryString));
for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
String value = doc.get(type);
//对要高亮显示的字段格式化,我这里只是加红色显示和加粗
SimpleHTMLFormatter sHtmlF = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
Highlighter highlighter = new Highlighter(sHtmlF,new QueryScorer(queryParse.parse(queryString)));
highlighter.setTextFragmenter(new SimpleFragmenter(100));
if (value != null) {
TokenStream tokenStream = analyzer.tokenStream(type,new StringReader(value));
Field tempField = new Field(type, highlighter.getBestFragment(tokenStream, value),Field.Store.NO,
Field.Index.TOKENIZED,Field.TermVector.YES);
doc.removeField(type);
doc.add(tempField);
}
//这里取的是Document 对象哦,里面的东西还需要你自己抽取呵,代码我就不写了
fileList.add(doc);
}
searcher.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return fileList;
}
OK,这里索引就做好了,当时我给我们前台程序员说,好了,我给你2个方法,你调用吧。
以为我轻松了吧,其实没有呢,我只是加了一点必要的存储字段,那个兄弟要求高着呢,最后加了很多,后来还要我用多条件查询(网上应该有这样的教材吧,我后来用的是compass实现的,原理是一样)
在这里我好象少了一个东西,呵呵 发现了么?没有么?发现了吧 呵呵
我用的是spring配置 所以没有indexwriter,下面是配置文件
<bean id="indexWriter" class="org.apache.lucene.index.IndexWriter">
<constructor-arg index="0" type="java.io.File">
<bean class="java.io.File">
<constructor-arg value="E:/Projects/netSchool/indexDatas" />
</bean>
</constructor-arg>
<constructor-arg index="1" >
<bean class="org.apache.lucene.analysis.standard.StandardAnalyzer" />
</constructor-arg>
<constructor-arg index="2" type="boolean" value="true"/>
</bean>
public void creatIndex() {
File indexDir = new File(getPathIndex());
try {
List<Article> listArticle = getArticleDao().search(null, null,null, null, null, null, null, null, new Boolean(true));
for (int i = 0; i < listArticle.size(); i++) {
Document doc = new Document();
Article article = listArticle.get(i);
//我的配置是追加方式的建立索引,所以为了不重复数据,只好先删除再添加
deleteAllIndex(article);
Field fieldId = new Field("id", article.getId().toString(),
Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.YES);
Field fieldTitles = new Field("title", article.getTitle(),
Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.YES);
//我没有用任何的分析器,所以只好用HTMLParser 把HTML分析成文本在索引
String contentHtml = article.getContent();
Reader read = new StringReader(contentHtml);
HTMLParser htmlParser = new HTMLParser(read);
BufferedReader breader = new BufferedReader(htmlParser.getReader());
String htmlContent = "";
String tempContent = breader.readLine();
while (tempContent != null && tempContent.length() > 0) {
htmlContent = htmlContent + tempContent;
tempContent = breader.readLine();
}
//下面的是Field 我找了半天可是没有找到存储object的方法,本想自己写,可是没时间,就把对象切开放
Field fieldContents = new Field("content", htmlContent,
Field.Store.COMPRESS, Field.Index.TOKENIZED,Field.TermVector.YES);
Field fieldTime = new Field("time", article.getUpdateTime().toString(), Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.YES);
Field fieldAuthor = new Field("author", article.getAuthor(), Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.YES);
Field fieldCategory = new Field("category", article.getCategory().getOutsideName(), Field.Store.COMPRESS,
Field.Index.TOKENIZED, Field.TermVector.YES);
String path = "/" + article.getCategory().getCategoryUrl()+ "/" + article.getId() + ".html";
Field fieldPath = new Field("path", path, Field.Store.COMPRESS,
Field.Index.TOKENIZED, Field.TermVector.YES);
doc.add(fieldId);
doc.add(fieldPath);
doc.add(fieldCategory);
doc.add(fieldTime);
doc.add(fieldAuthor);
doc.add(fieldContents);
doc.add(fieldTitles);
indexWriter.addDocument(doc);
}
indexWriter.optimize();
indexWriter.close();}
catch (IOException e) { e.printStackTrace();}
}
到这里索引已经建立了 ,下面要做的就是搜索
public List<Document> searchDoc(String type, String queryString) {
List<Document> fileList = new ArrayList<Document>();
//其实这里是不需要的,因为lucene默认是调用它的,当然还有另外一个,我这里只是为了下面的高亮显示
Analyzer analyzer = new StandardAnalyzer();
try {
Directory fsDir = FSDirectory.getDirectory(getPathIndex(), false);
IndexSearcher searcher = new IndexSearcher(fsDir);
QueryParser queryParse = new QueryParser(type, analyzer);
Hits hits = searcher.search(queryParse.parse(queryString));
for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
String value = doc.get(type);
//对要高亮显示的字段格式化,我这里只是加红色显示和加粗
SimpleHTMLFormatter sHtmlF = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
Highlighter highlighter = new Highlighter(sHtmlF,new QueryScorer(queryParse.parse(queryString)));
highlighter.setTextFragmenter(new SimpleFragmenter(100));
if (value != null) {
TokenStream tokenStream = analyzer.tokenStream(type,new StringReader(value));
Field tempField = new Field(type, highlighter.getBestFragment(tokenStream, value),Field.Store.NO,
Field.Index.TOKENIZED,Field.TermVector.YES);
doc.removeField(type);
doc.add(tempField);
}
//这里取的是Document 对象哦,里面的东西还需要你自己抽取呵,代码我就不写了
fileList.add(doc);
}
searcher.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return fileList;
}
OK,这里索引就做好了,当时我给我们前台程序员说,好了,我给你2个方法,你调用吧。
以为我轻松了吧,其实没有呢,我只是加了一点必要的存储字段,那个兄弟要求高着呢,最后加了很多,后来还要我用多条件查询(网上应该有这样的教材吧,我后来用的是compass实现的,原理是一样)
在这里我好象少了一个东西,呵呵 发现了么?没有么?发现了吧 呵呵
我用的是spring配置 所以没有indexwriter,下面是配置文件
<bean id="indexWriter" class="org.apache.lucene.index.IndexWriter">
<constructor-arg index="0" type="java.io.File">
<bean class="java.io.File">
<constructor-arg value="E:/Projects/netSchool/indexDatas" />
</bean>
</constructor-arg>
<constructor-arg index="1" >
<bean class="org.apache.lucene.analysis.standard.StandardAnalyzer" />
</constructor-arg>
<constructor-arg index="2" type="boolean" value="true"/>
</bean>
发表评论
-
lucene学习笔记 3
2007-09-27 18:05 1649搜索 Lucene搜索的api的类主要有4个 IndexSe ... -
lucene学习笔记 2
2007-09-27 18:04 1682Boosting特性 luncene对Document和Fi ... -
lucene学习笔记 1
2007-09-27 18:04 1230Doug Cutting 于2000年开始的项目 2001年9 ... -
使用Lucene进行全文检索---进行搜索
2007-09-27 18:03 1445无论是建立索引还是分析内容,都是为了用户的搜索服务. 在 ... -
使用Lucene进行全文检索---得到有效的内容
2007-09-27 18:02 1331在使用lucene对相关内容进行索引时,会遇到各种格式的内 ... -
Lucene-2.0学习文档
2007-09-27 17:58 1176Lucene-2.0学习文档 Lucene是apache组织的 ... -
lucene搜索引擎技术的分析与整理
2007-09-27 17:56 25894. Lucene文档结构 Lucene ... -
实战 Lucene
2007-09-27 17:56 954文首先介绍了Lucene的一些基本概念,然后开发了一个应用程序 ... -
Lucene 中文分词的 highlight 显示
2007-09-27 17:55 15071 、问题的来源 增加分词以后结果的准确度提高了,但是用户 ... -
使用Lucene进行全文检索---处理索引
2007-09-27 17:53 1395http://www.jscud.com 转载请注明来源/作者 ... -
深入 Lucene 索引机制
2007-09-27 17:52 1116架构概览 图一显示了 Lucene 的索引机制的架构。Luce ... -
几个免费的中文分词模块
2007-09-27 17:50 4949一、什么是中文分词 众 ... -
Lucene站点推荐
2007-09-27 17:48 1332地址:http://www.lucene.com 简介:R ... -
Lucene中文分词组件 JE-Analysis 1.4.0
2007-09-27 17:45 5165本站申明 ...
相关推荐
本文将围绕"Lucene-core-2.0.0.jar"这一核心组件,深入探讨Lucene的原理、应用以及其在2.0.0版本中的特性。 Lucene的诞生,源于对高效、可扩展的全文检索需求。2.0.0版本的发布,标志着Lucene在搜索领域迈出的重要...
6. **学习路径**: 学习Lucene可以从理解基本概念和数据结构开始,然后通过编写简单的索引和搜索程序来实践,逐步深入到高级特性,如分片、分布式搜索、性能调优等。 7. **安全注意事项**: 使用第三方库时,应确保...
虽然这一版本存在对中文支持的限制,但其基本操作流程为我们提供了深入理解Lucene工作机制的基础。随着版本的更新,Lucene已经引入了更多高级特性,包括对多种语言的支持,这使得它成为现代搜索应用开发中不可或缺的...
标题中的“jsmartco_zh_CN+je-analysis-1.4.0+lucene-core-2.0.0+heritrix.14.4”表明这是一个关于搜索引擎开发的资源集合,主要包括了jsmartco中文版、je-analysis 1.4.0、lucene核心库2.0.0以及Heritrix爬虫14.4...
本文将围绕Lucene 2.0.0版本展开,深入探讨其核心功能、工作原理以及在实际应用中的价值。 一、Lucene概述 Lucene 2.0.0是该库的一个里程碑版本,发布于2006年。尽管后续版本进行了大量更新和改进,但2.0.0仍具有...
本文将围绕Lucene 2.0.0的核心特性、设计思想以及应用实践进行详尽解析。 一、Lucene 2.0.0概述 Apache Lucene 2.0.0是搜索引擎开发的重要里程碑,它引入了多项改进和新特性,旨在提高索引效率和查询性能。这个...
9. **安全与监控**:虽然Elasticsearch的安全特性相对较弱,但2.0.0可能包含了一些基础的安全配置选项,如基本的身份验证和授权。 10. **性能优化**:每次版本更新,Elasticsearch都会对底层Lucene库进行优化,以...
总结来说,Groovy 2.0.0-final和Lucene-Sugar的结合,展示了开源项目如何通过创新和共享,提升开发者的体验。通过学习和应用这些工具,我们可以更好地利用Java平台的力量,构建出高效、易用的搜索解决方案。无论是...
Elasticsearch 2.0.0 是一个重要的版本更新,它是基于 Lucene 库的分布式、RESTful 风格的搜索和分析引擎。这个版本引入了许多改进和新特性,旨在提升性能、稳定性和易用性。在安装过程中,集成的 "head" 插件是一个...
Elasticsearch是一个基于Lucene库的高度可扩展、实时的搜索和分析引擎,广泛应用于大数据分析、日志聚合、网站搜索等领域。 **一、Elasticsearch的基本概念** 1. **节点(Node)**:Elasticsearch是以分布式的方式...
3. **Document与Field**:Document是Lucene的基本存储单元,代表一份文档,由多个Field组成。每个Field对应文档的一个属性,如标题、内容等,Field有可搜索、可存储等属性设置。 4. **索引过程**:包括分析...
`lucene-2.0.0`可能包含其他的库文件,如示例代码、API文档等,供开发者学习和参考。 6. **进阶应用** - 集成Solr或Elasticsearch:尽管Lucene本身是低级库,但可以作为更高级的搜索服务Solr和Elasticsearch的基础...
《深入剖析Lucene 2.0.0搜索引擎源代码》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了一个高效、可扩展的信息检索库,允许开发者轻松地在他们的应用程序中添加全文搜索功能。本文将重点...
开发者可以通过阅读www.pudn.com.txt等文档资料,学习如何在实际项目中应用Lucene-2.0.0。 总的来说,Java全文搜索引擎Lucene是一个强大的工具,它简化了全文搜索的实现,让开发者可以专注于业务逻辑,而不是底层的...
**Lucene.Net 2.0.0:打造高效全文搜索引擎** **一、Lucene.Net简介** Lucene.Net是一个开源的全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个高度可扩展的搜索框架,Lucene.Net为开发者提供了强大...
其中,lucene-core-2.0.0.jar是包含在压缩包中的另一个重要组件。Lucene是一个开源全文检索库,由Apache软件基金会支持。它提供了高级的索引和搜索功能,常被用于构建搜索引擎。je-analysis与Lucene结合,可以为用户...
“lucene-core-2.0.0.rar”文件可能包含了Lucene 2.0版本的主要库文件,包括API文档、示例代码和必要的依赖库,这可以帮助开发者理解和使用这个早期版本的Lucene。 “地址及工具介绍.txt”文件很可能是对这两个项目...
它基于 Lucene 库,提供了分布式、RESTful 风格的搜索和分析引擎。在中文环境下,为了实现对中文文本的有效索引和检索,我们需要使用特定的分词器。Analysis-IK 分词插件是 Elasticsearch 中非常流行的一款针对中文...