`

lucene-2.0.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>
分享到:
评论

相关推荐

    Lucene-core-2.0.0.jar

    本文将围绕"Lucene-core-2.0.0.jar"这一核心组件,深入探讨Lucene的原理、应用以及其在2.0.0版本中的特性。 Lucene的诞生,源于对高效、可扩展的全文检索需求。2.0.0版本的发布,标志着Lucene在搜索领域迈出的重要...

    Lucene-core-2.0.0

    6. **学习路径**: 学习Lucene可以从理解基本概念和数据结构开始,然后通过编写简单的索引和搜索程序来实践,逐步深入到高级特性,如分片、分布式搜索、性能调优等。 7. **安全注意事项**: 使用第三方库时,应确保...

    Lucene 2.0.0下载安装及简单测试

    虽然这一版本存在对中文支持的限制,但其基本操作流程为我们提供了深入理解Lucene工作机制的基础。随着版本的更新,Lucene已经引入了更多高级特性,包括对多种语言的支持,这使得它成为现代搜索应用开发中不可或缺的...

    整合资源jsmartco_zh_CN+je-analysis-1.4.0+lucene-core-2.0.0+heritrix.14.4.

    标题中的“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.tar.gz

    本文将围绕Lucene 2.0.0版本展开,深入探讨其核心功能、工作原理以及在实际应用中的价值。 一、Lucene概述 Lucene 2.0.0是该库的一个里程碑版本,发布于2006年。尽管后续版本进行了大量更新和改进,但2.0.0仍具有...

    lucene-2.0.0

    本文将围绕Lucene 2.0.0的核心特性、设计思想以及应用实践进行详尽解析。 一、Lucene 2.0.0概述 Apache Lucene 2.0.0是搜索引擎开发的重要里程碑,它引入了多项改进和新特性,旨在提高索引效率和查询性能。这个...

    elasticsearch-2.0.0.tar.gz

    9. **安全与监控**:虽然Elasticsearch的安全特性相对较弱,但2.0.0可能包含了一些基础的安全配置选项,如基本的身份验证和授权。 10. **性能优化**:每次版本更新,Elasticsearch都会对底层Lucene库进行优化,以...

    lang-groovy-2.0.0-final.zip

    总结来说,Groovy 2.0.0-final和Lucene-Sugar的结合,展示了开源项目如何通过创新和共享,提升开发者的体验。通过学习和应用这些工具,我们可以更好地利用Java平台的力量,构建出高效、易用的搜索解决方案。无论是...

    elasticsearch-2.0.0

    Elasticsearch 2.0.0 是一个重要的版本更新,它是基于 Lucene 库的分布式、RESTful 风格的搜索和分析引擎。这个版本引入了许多改进和新特性,旨在提升性能、稳定性和易用性。在安装过程中,集成的 "head" 插件是一个...

    elasticsearch-2.0.0.zip

    Elasticsearch是一个基于Lucene库的高度可扩展、实时的搜索和分析引擎,广泛应用于大数据分析、日志聚合、网站搜索等领域。 **一、Elasticsearch的基本概念** 1. **节点(Node)**:Elasticsearch是以分布式的方式...

    lucene2.0.0

    3. **Document与Field**:Document是Lucene的基本存储单元,代表一份文档,由多个Field组成。每个Field对应文档的一个属性,如标题、内容等,Field有可搜索、可存储等属性设置。 4. **索引过程**:包括分析...

    lucene-2.0

    `lucene-2.0.0`可能包含其他的库文件,如示例代码、API文档等,供开发者学习和参考。 6. **进阶应用** - 集成Solr或Elasticsearch:尽管Lucene本身是低级库,但可以作为更高级的搜索服务Solr和Elasticsearch的基础...

    lucene2.0.0搜索引擎源代码

    《深入剖析Lucene 2.0.0搜索引擎源代码》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了一个高效、可扩展的信息检索库,允许开发者轻松地在他们的应用程序中添加全文搜索功能。本文将重点...

    java全文搜索引擎 Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便

    开发者可以通过阅读www.pudn.com.txt等文档资料,学习如何在实际项目中应用Lucene-2.0.0。 总的来说,Java全文搜索引擎Lucene是一个强大的工具,它简化了全文搜索的实现,让开发者可以专注于业务逻辑,而不是底层的...

    Lucene.Net_2_0_0.rar

    **Lucene.Net 2.0.0:打造高效全文搜索引擎** **一、Lucene.Net简介** Lucene.Net是一个开源的全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个高度可扩展的搜索框架,Lucene.Net为开发者提供了强大...

    分词器je-analysis-1.5.3.jar

    其中,lucene-core-2.0.0.jar是包含在压缩包中的另一个重要组件。Lucene是一个开源全文检索库,由Apache软件基金会支持。它提供了高级的索引和搜索功能,常被用于构建搜索引擎。je-analysis与Lucene结合,可以为用户...

    Java检索引擎

    “lucene-core-2.0.0.rar”文件可能包含了Lucene 2.0版本的主要库文件,包括API文档、示例代码和必要的依赖库,这可以帮助开发者理解和使用这个早期版本的Lucene。 “地址及工具介绍.txt”文件很可能是对这两个项目...

    Elasticserach2.0与已编译过的anaysis-ik分词插件

    它基于 Lucene 库,提供了分布式、RESTful 风格的搜索和分析引擎。在中文环境下,为了实现对中文文本的有效索引和检索,我们需要使用特定的分词器。Analysis-IK 分词插件是 Elasticsearch 中非常流行的一款针对中文...

Global site tag (gtag.js) - Google Analytics