- 浏览: 146439 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
zi_wu_xian:
docx格式的word文件虽然是zip格式的,也可以看到xml ...
用Java操作Office 2007 -
MyDreamNotDream:
看代码看到这里很不容易呢。
Java中HashMap的实现原理 -
四书五经:
to 楼上的 SonofGod :这个时候这样去获取:如果(值 ...
Java中HashMap的实现原理 -
SonofGod:
请问 楼主 在疑问3中。多个key的hash值一样的话,存储时 ...
Java中HashMap的实现原理 -
SonofGod:
请问 楼主 在疑问2中。多个可以的hash得到一样的hash值 ...
Java中HashMap的实现原理
首先肯定是建立索引了啊
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>
发表评论
-
微信收货地址共享接口-终极解决
2015-06-25 13:10 8390最近要接入微信的收货地址共享接口,总是不成功,折腾了好 ... -
Java中HashMap的实现原理
2011-04-28 14:30 2823昨天有人来公司面试,因为面试的地方和我坐的地方比较近,所以也听 ... -
java注解(annotation)简介
2010-06-13 10:10 1370[Java 5.0] Annotation – @Deprec ... -
quartz和spring-quartz
2010-06-13 10:03 977quartz和spring-quartz -
Java 线程实例讲解综述
2010-06-13 09:57 1051Java 线程实例讲解综述 编写具有多线程能力的程序经常会用 ... -
Java Double 精度问题总结
2010-06-13 09:56 5331使用Java,double 进行运算时,经常出现精度丢失的问题 ... -
eXtremeComponents的eXtremeTable分页特性
2010-05-14 17:27 3399下面是我使用的例子: <ec:table ite ... -
java---final 关键字 和 static 用法
2010-03-17 13:58 907final 关键字 和 static 用法 一、final ... -
java版的escape和unescape方法
2010-03-17 09:21 2599其中unescape方法可以用来解开javascript的es ... -
StatSVN的使用说明
2010-03-04 10:27 1053一、 checkout 希望统计的版本或者分支到某个目录(不管 ... -
Velocity语法
2010-03-01 18:01 9261. 变量 (1)变量的 ... -
用KeyTool生成安全证书
2010-02-22 17:14 1161详细请见:Tomcat的帮助文档,:https://local ... -
Spring 注解学习手札
2010-02-10 10:02 891http://snowolf.iteye.com/blog/5 ... -
JDK、JRE、JVM的关系
2010-01-25 11:23 917JDK就是Java Development Kit.简单的说J ... -
类装载器学习
2010-01-22 12:54 866Java的类装载器(Class Loader)和命名空间(Na ... -
Tomcat发布项目方法
2010-01-22 10:46 2642第一种方法:在tomcat中的conf目录中,在server. ... -
理解Java ClassLoader机制
2010-01-21 16:20 935当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初 ... -
cookie和session的工作机制
2010-01-19 15:19 871转载自:http://hi.baidu.com/jmtbai/ ... -
如何设置Tomcat的JVM虚拟机内存大小
2010-01-18 14:25 995Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上 ... -
浅谈设置JVM内存分配的几个妙招
2010-01-18 14:24 1622安装Java开发软件时,默 ...
相关推荐
本文将围绕"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平台的力量,构建出高效、易用的搜索解决方案。无论是...
通过上述步骤,我们不仅成功地在Tomcat下集成了Lucene-3.0.0,而且还掌握了如何通过控制台或Web应用程序建立索引和执行搜索的基本方法。这对于初学者来说是一个很好的实践机会,有助于深入了解全文搜索引擎的工作...
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-analyzers-2.0.0.jar:这是Lucene的分词器库,用于文本分析处理,可以将文本分割成一个个独立的单元,以便于索引和搜索。 - mysoo-true.jar:又一个自定义的库文件,可能包含项目特定的功能实现。 - ...
**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 中非常流行的一款针对中文...