`

lucene-2.0的基本应用

阅读更多

首先肯定是建立索引了啊
 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-2.0的学习不仅需要理解基本的索引构建和搜索原理,还需要掌握如何自定义排序规则和分析器以满足特定需求。此外,通过阅读和分析这些源码,开发者还可以深入理解Lucene的内部工作...

    lucene-2.0

    Lucene 2.0是一款强大的开源全文检索库,由Apache软件基金会开发并维护,是Java编程语言中的一个核心工具,广泛应用于搜索引擎的构建和其他信息检索场景。该版本发布于2006年,虽然现在已经有了更新的版本,但Lucene...

    Lucene.Net-2.0.doc.zip

    **Lucene.Net 2.0 深度解析** Lucene.Net 是 Apache Lucene 的 .NET 实现,它是一个高性能、全文本搜索库,适用于 .NET 开发者。Lucene.Net 2.0 版本提供了强大的搜索功能,使得开发者能够轻松地在大量数据中进行...

    lucene-core-2.9.2.jar

    Apache Lucene是一个开源全文搜索引擎库,由Java编写,被广泛应用于各种信息检索系统中。在本文中,我们将深入探讨其核心库——lucene-core-2.9.2.jar,以及与之相关的lucene-1.4.3.jar.license.txt文件。 一、...

    Lucene.net 2.0源码

    7. **扩展性**:除了基本功能,Lucene.NET 2.0 还提供了丰富的扩展点,如自定义存储(Directory)、过滤器(Filter)和排序(Sort)等,允许开发者根据项目需求进行定制。 通过深入研究Lucene.NET 2.0 的源码,...

    Lucene.2.0.API

    通过阅读这份API文档,开发者可以深入了解全文检索的基本原理,理解如何利用Lucene进行索引构建、查询执行、结果处理等一系列操作,从而在实际项目中高效地实现全文搜索功能。对于Java开发者来说,掌握Lucene的API是...

    《开发自己的搜索引擎-Lucene 2.0 Heritrix》cd(全)(下载地址)

    根据提供的文件信息,我们可以深入探讨与“开发自己的搜索引擎-Lucene 2.0 Heritrix”相关的知识点,主要包括Lucene 2.0和Heritrix的基本概念、特点以及如何利用它们来构建一个简单的搜索引擎。 ### 一、Lucene 2.0...

    elasticsearch-2.0

    6. **数据持久化**: 利用Lucene库实现索引,确保数据的安全存储。 **二、Elasticsearch的主要组件** 1. **节点(Node)**: 是Elasticsearch的基本运行单位,负责数据的存储和处理。多个节点可以组成一个集群。 2. *...

    Lucene 2.0+Heriterx书源代码-ch7lib

    《深入理解Lucene 2.0与...通过深入研究这些源代码和对应的库文件,开发者不仅可以掌握Lucene 2.0和Heritrix的基本用法,还能进一步提升在信息检索领域的专业技能,为构建更复杂、高效的搜索引擎应用打下坚实基础。

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    在《开发自己的搜索引擎》一书中,通过`ch2-lucene入门小例子`,读者可以了解到如何使用Lucene 2.0创建简单的搜索引擎,例如建立索引、执行搜索等基本操作。而`myReserch-可用的网络搜索引擎`可能包含一个完整的搜索...

    【完整光盘24.5M】开发自己的搜索引擎-Lucene 2.0+Heritrix.zip

    《构建个人搜索引擎:深入理解Lucene 2.0与Heritrix》 在这个数字化时代,搜索引擎已经成为我们获取信息的关键工具。对于IT专业人士来说,了解并掌握搜索引擎的内部工作原理及开发技术,不仅可以提升自身技能,还能...

    开发自己的搜索引擎-Lucene 2.0+Heritrix

    在IT领域,构建一个搜索引擎是一项复杂而技术性强的...在实际应用中,还可以结合其他工具和框架,如Solr(基于Lucene的企业级搜索平台)和Elasticsearch(分布式搜索和分析引擎),进一步增强搜索引擎的功能和性能。

    lucene jar大全 包涵多个版本的jar包2.0-4.1等

    1. **Lucene 2.0**: Lucene 2.0是较早的一个版本,它奠定了Lucene作为Java全文搜索引擎的基础。这个版本包括了基本的索引和查询功能,如分词、倒排索引、布尔查询等。同时,它也支持了一些高级特性,如文档评分和...

    Lucene2.0+Heritrix(源代码)

    Lucene2.0是Apache软件基金会的一个项目,它是一个高性能、全文检索库,提供了一个简单的API,允许开发者将全文搜索功能集成到他们的应用中。Lucene的核心功能包括索引和搜索,它能够高效地处理大量的文本数据,并...

    Lucene2.0实例

    但作为入门实例,这个"Lucene2.0实例"应该会从最基本的层面教你如何启动并运行一个简单的搜索应用。通过学习并实践这些基础操作,你可以逐步掌握Lucene的核心功能,为进一步深入学习和开发更复杂的搜索系统奠定基础...

    elasticsearch-sql-7.9.2.0(maven包)

    这个"elasticsearch-sql-7.9.2.0(maven包)"是针对Elasticsearch 7.9.2版本的一个定制版,包含了对SQL支持的源码,并且已经编译成了Maven项目的形式,便于开发者集成到自己的Java应用中。 在深入理解这个包之前,...

    Lucene2.0+Nutch0.8 API帮助文档(CHM格式)

    《Lucene2.0+Nutch0.8 API帮助文档》是一个综合性的技术资源,它包含了对Lucene 2.0和Nutch 0.8这两个关键的开源搜索引擎库的详细接口和功能说明。这两个组件在信息检索、全文搜索以及网络爬虫领域有着广泛的应用。 ...

    lucene学习资料

    2. **关于lucene2.0的创建、检索和删除功能的完整实现.doc** Lucene 2.0版本的教程,可能讲解了如何利用Lucene API实现文档的索引创建、查询检索和文档删除操作。这涵盖了Lucene的核心功能,对于初学者是很好的实践...

    Lucene2.0+Heritrix(ch3源代码)

    在这个"Lucene2.0+Heritrix(ch3源代码)"的压缩包中,我们主要关注的是这两个项目的第三章源代码,这将帮助我们深入理解它们的工作机制。 一、Lucene 2.0 1. **索引结构**:Lucene的核心是其倒排索引(Inverted ...

Global site tag (gtag.js) - Google Analytics