首先肯定是建立索引了啊
public void creatIndex() {
File indexDir = new File(getPathIndex());
try {
List<article></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></document> searchDoc(String type, String queryString) {
List<document></document> fileList = new ArrayList<document></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("", "");
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 class="org.apache.lucene.index.IndexWriter" id="indexWriter"></bean>
来源:http://lihaiyan.iteye.com/blog/127685
分享到:
相关推荐
结合以上文件,我们可以看到Lucene-2.0的学习不仅需要理解基本的索引构建和搜索原理,还需要掌握如何自定义排序规则和分析器以满足特定需求。此外,通过阅读和分析这些源码,开发者还可以深入理解Lucene的内部工作...
Lucene 2.0是一款强大的开源全文检索库,由Apache软件基金会开发并维护,是Java编程语言中的一个核心工具,广泛应用于搜索引擎的构建和其他信息检索场景。该版本发布于2006年,虽然现在已经有了更新的版本,但Lucene...
**Lucene.Net 2.0 深度解析** Lucene.Net 是 Apache Lucene 的 .NET 实现,它是一个高性能、全文本搜索库,适用于 .NET 开发者。Lucene.Net 2.0 版本提供了强大的搜索功能,使得开发者能够轻松地在大量数据中进行...
Apache Lucene是一个开源全文搜索引擎库,由Java编写,被广泛应用于各种信息检索系统中。在本文中,我们将深入探讨其核心库——lucene-core-2.9.2.jar,以及与之相关的lucene-1.4.3.jar.license.txt文件。 一、...
7. **扩展性**:除了基本功能,Lucene.NET 2.0 还提供了丰富的扩展点,如自定义存储(Directory)、过滤器(Filter)和排序(Sort)等,允许开发者根据项目需求进行定制。 通过深入研究Lucene.NET 2.0 的源码,...
通过阅读这份API文档,开发者可以深入了解全文检索的基本原理,理解如何利用Lucene进行索引构建、查询执行、结果处理等一系列操作,从而在实际项目中高效地实现全文搜索功能。对于Java开发者来说,掌握Lucene的API是...
根据提供的文件信息,我们可以深入探讨与“开发自己的搜索引擎-Lucene 2.0 Heritrix”相关的知识点,主要包括Lucene 2.0和Heritrix的基本概念、特点以及如何利用它们来构建一个简单的搜索引擎。 ### 一、Lucene 2.0...
6. **数据持久化**: 利用Lucene库实现索引,确保数据的安全存储。 **二、Elasticsearch的主要组件** 1. **节点(Node)**: 是Elasticsearch的基本运行单位,负责数据的存储和处理。多个节点可以组成一个集群。 2. *...
《深入理解Lucene 2.0与...通过深入研究这些源代码和对应的库文件,开发者不仅可以掌握Lucene 2.0和Heritrix的基本用法,还能进一步提升在信息检索领域的专业技能,为构建更复杂、高效的搜索引擎应用打下坚实基础。
在《开发自己的搜索引擎》一书中,通过`ch2-lucene入门小例子`,读者可以了解到如何使用Lucene 2.0创建简单的搜索引擎,例如建立索引、执行搜索等基本操作。而`myReserch-可用的网络搜索引擎`可能包含一个完整的搜索...
《构建个人搜索引擎:深入理解Lucene 2.0与Heritrix》 在这个数字化时代,搜索引擎已经成为我们获取信息的关键工具。对于IT专业人士来说,了解并掌握搜索引擎的内部工作原理及开发技术,不仅可以提升自身技能,还能...
在IT领域,构建一个搜索引擎是一项复杂而技术性强的...在实际应用中,还可以结合其他工具和框架,如Solr(基于Lucene的企业级搜索平台)和Elasticsearch(分布式搜索和分析引擎),进一步增强搜索引擎的功能和性能。
1. **Lucene 2.0**: Lucene 2.0是较早的一个版本,它奠定了Lucene作为Java全文搜索引擎的基础。这个版本包括了基本的索引和查询功能,如分词、倒排索引、布尔查询等。同时,它也支持了一些高级特性,如文档评分和...
Lucene2.0是Apache软件基金会的一个项目,它是一个高性能、全文检索库,提供了一个简单的API,允许开发者将全文搜索功能集成到他们的应用中。Lucene的核心功能包括索引和搜索,它能够高效地处理大量的文本数据,并...
但作为入门实例,这个"Lucene2.0实例"应该会从最基本的层面教你如何启动并运行一个简单的搜索应用。通过学习并实践这些基础操作,你可以逐步掌握Lucene的核心功能,为进一步深入学习和开发更复杂的搜索系统奠定基础...
这个"elasticsearch-sql-7.9.2.0(maven包)"是针对Elasticsearch 7.9.2版本的一个定制版,包含了对SQL支持的源码,并且已经编译成了Maven项目的形式,便于开发者集成到自己的Java应用中。 在深入理解这个包之前,...
《Lucene2.0+Nutch0.8 API帮助文档》是一个综合性的技术资源,它包含了对Lucene 2.0和Nutch 0.8这两个关键的开源搜索引擎库的详细接口和功能说明。这两个组件在信息检索、全文搜索以及网络爬虫领域有着广泛的应用。 ...
2. **关于lucene2.0的创建、检索和删除功能的完整实现.doc** Lucene 2.0版本的教程,可能讲解了如何利用Lucene API实现文档的索引创建、查询检索和文档删除操作。这涵盖了Lucene的核心功能,对于初学者是很好的实践...
在这个"Lucene2.0+Heritrix(ch3源代码)"的压缩包中,我们主要关注的是这两个项目的第三章源代码,这将帮助我们深入理解它们的工作机制。 一、Lucene 2.0 1. **索引结构**:Lucene的核心是其倒排索引(Inverted ...