- 浏览: 115854 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 1626搜索 Lucene搜索的api的类主要有4个 IndexSe ... -
lucene学习笔记 2
2007-09-27 18:04 1646Boosting特性 luncene对Document和Fi ... -
lucene学习笔记 1
2007-09-27 18:04 1191Doug Cutting 于2000年开始的项目 2001年9 ... -
使用Lucene进行全文检索---进行搜索
2007-09-27 18:03 1412无论是建立索引还是分析内容,都是为了用户的搜索服务. 在 ... -
使用Lucene进行全文检索---得到有效的内容
2007-09-27 18:02 1296在使用lucene对相关内容进行索引时,会遇到各种格式的内 ... -
Lucene-2.0学习文档
2007-09-27 17:58 1153Lucene-2.0学习文档 Lucene是apache组织的 ... -
lucene搜索引擎技术的分析与整理
2007-09-27 17:56 25604. Lucene文档结构 Lucene ... -
实战 Lucene
2007-09-27 17:56 937文首先介绍了Lucene的一些基本概念,然后开发了一个应用程序 ... -
Lucene 中文分词的 highlight 显示
2007-09-27 17:55 14801 、问题的来源 增加分词以后结果的准确度提高了,但是用户 ... -
使用Lucene进行全文检索---处理索引
2007-09-27 17:53 1359http://www.jscud.com 转载请注明来源/作者 ... -
深入 Lucene 索引机制
2007-09-27 17:52 1099架构概览 图一显示了 Lucene 的索引机制的架构。Luce ... -
几个免费的中文分词模块
2007-09-27 17:50 4913一、什么是中文分词 众 ... -
Lucene站点推荐
2007-09-27 17:48 1306地址:http://www.lucene.com 简介:R ... -
Lucene中文分词组件 JE-Analysis 1.4.0
2007-09-27 17:45 5115本站申明 ...
相关推荐
Lucene学习的基本jar包.全CSDN最低积分的 Lucene-core-2.0.0.jar包
《开发自己的搜索引擎》第二版配套的Lucenejar包,有需要的可以下载,确保安全无毒,可放心下载。rar压缩包解压后即为Lucene-core-2.0.0.jar文件。
lucene-2.0.0-src源代码 lucene-2.0.0-src源代码 lucene-2.0.0-src源代码 lucene-2.0.0-src源代码 lucene-2.0.0-src源代码 lucene-2.0.0-src源代码 lucene-2.0.0-src源代码
lucene-demos-2.0.0.jar lucene-demos-2.0.0.jar lucene-demos-2.0.0.jar
用于编写Lucene高亮摘要的jar包,版本2.0.0,好用。谁用谁知道~~~~
全文检索jar包资源:资源中包括从网上找到并下载的jar包资源,包括四个jar包:Lucene-core-2.0.0、Lucene-core-2.3.0、Lucene-demos-2.3.0、je-analysis-1.5.3。
搜索引擎工具包,集成了 jsmartco ,je-analysis1.4.0,lucene-core-2.0.0,heritrix,14.4
赠送jar包:lucene-analyzers-smartcn-7.7.0.jar; 赠送原API文档:lucene-analyzers-smartcn-7.7.0-javadoc.jar; 赠送源代码:lucene-analyzers-smartcn-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-...
lucene-core-2.9.4,lucene-core-3.0.2,lucene-core-3.0.3,lucene-core-3.4.0
赠送jar包:lucene-core-7.7.0.jar; 赠送原API文档:lucene-core-7.7.0-javadoc.jar; 赠送源代码:lucene-core-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.7.0.pom; 包含翻译后的API文档:lucene...
赠送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-...
lucene2.0全文搜索引擎包。
赠送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-core-7.2.1.jar; 赠送原API文档:lucene-core-7.2.1-javadoc.jar; 赠送源代码:lucene-core-7.2.1-sources.jar; 赠送Maven依赖信息文件:lucene-core-7.2.1.pom; 包含翻译后的API文档:lucene...
赠送jar包:lucene-backward-codecs-7.3.1.jar; 赠送原API文档:lucene-backward-codecs-7.3.1-javadoc.jar; 赠送源代码:lucene-backward-codecs-7.3.1-sources.jar; 赠送Maven依赖信息文件:lucene-backward-...
赠送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...
Lucene是一个基于Java的全文索引工具包
Lucene 2.0.0下载安装及简单测试。分词的基本
这是一个java开发用的.jar文件,用它和Lucene-core-2.0.0.jar可以实现搜索引擎
赠送jar包:lucene-suggest-7.7.0.jar; 赠送原API文档:lucene-suggest-7.7.0-javadoc.jar; 赠送源代码:lucene-suggest-7.7.0-sources.jar; 赠送Maven依赖信息文件:lucene-suggest-7.7.0.pom; 包含翻译后的API...