Lucene做为一个开源的搜索引擎框架,它不但易于学习,而且为开发人员提供了丰富的API来完成用为开发人员不同的需求,下面是Lucene一些主要应用的代码:
建索引:
try{
//将索引写入文件,标准分词器,field长度为有限的
writer = new IndexWriter(FSDirectory.open(index),
new StandardAnalyzer(Version.LUCENE_CURRENT), create,
IndexWriter.MaxFieldLength.LIMITED);
if(obj!=null){
List list=(List)obj;
for(int i=0;i<list.size();i++){
doc = new Document();
articleInfo =(ArticleInfo)list.get(i);
Field id= new Field("id",String.valueOf(articleInfo.getId()),
Field.Store.YES,Field.Index.ANALYZED); //保存id值,并为其建立索引
Field title = new Field("title",articleInfo.getTitle() ,
Field.Store.YES, Field.Index.ANALYZED); //保存内容,并为其建立索引
Field context = new Field("contents", articleInfo.getContents(),
Field.Store.YES, Field.Index.ANALYZED); //保存内容,并为其建立索引
Field url = new Field("url", articleInfo.getPath(), Field.Store.YES,
Field.Index.NO); //保存内容,不建立索引
doc.add(id);
doc.add(title);
doc.add(context);
doc.add(url);
//写入索引文件
writer.addDocument(doc);
}
}
writer.optimize();
writer.close();
}catch(Exception ex){
ex.printStackTrace();
}
更新索引:
try {
//将索引写入文件,标准分词器,field长度为有限的,create=false
writer = new IndexWriter(FSDirectory.open(index),
new StandardAnalyzer(Version.LUCENE_CURRENT), false,
IndexWriter.MaxFieldLength.LIMITED);
if(obj!=null){
list = (List)obj;
for(int i=0;i<list.size();i++){
articleInfo = (ArticleInfo)list.get(i);
System.out.println("update id is :"+articleInfo.getId());
term = new Term("id",String.valueOf(articleInfo.getId()));
Field id= new Field("id",String.valueOf(articleInfo.getId()),
Field.Store.YES,Field.Index.ANALYZED); //保存id值,并为其建立索引
Field title = new Field("title",articleInfo.getTitle() ,
Field.Store.YES, Field.Index.ANALYZED); //保存内容,并为其建立索引
Field context = new Field("contents", articleInfo.getContents(),
Field.Store.YES, Field.Index.ANALYZED); //保存内容,并为其建立索引
Field url = new Field("url", articleInfo.getPath(), Field.Store.YES,Field.Index.NO); //保存内容,不建立索引
doc = new Document();
doc.add(id);
doc.add(title);
doc.add(context);
doc.add(url);
//更新索引
writer.updateDocument(term, doc);
// writer.addDocument(doc);
}
}
writer.optimize();
writer.close();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
删除索引:
try {
Directory directory=FSDirectory.open(index);
//该文件夹下是否存在索引文件
if(IndexReader.indexExists(directory)){
//因为要执行删除操作,所以read-only=false
reader = IndexReader.open(directory, false);
//判断是否最新的索引信息
if(!reader.isCurrent()){
//如果不是,重新获取索引信息
reader.reopen();
}
if(obj!=null){
list = (List)obj;
for(int i=0;i<list.size();i++){
info=(ArticleInfo)list.get(i);
System.out.println("id is: "+info.getId());
term = new Term("id", String.valueOf(info.getId()));
//根据doc序号删除索引
// reader.deleteDocument(1);
//根据id删除索引
reader.deleteDocuments(term);
}
}
}
reader.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
最后,实现对索引的搜索:
Directory directory= FSDirectory.open(new File(indexFile));
//判断文件夹下是否存在索引文件
if(IndexReader.indexExists(directory)){
//索引存在
indexReader = IndexReader.open(directory, true);
//判断是否为最新索引
if(!indexReader.isCurrent()){
//获取最新索引
indexReader.reopen();
}
Searcher searcher = new IndexSearcher(indexReader);
//创建标准分词器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
//复合字段查询
MultiFieldQueryParser parser = new MultiFieldQueryParser(fieldNames,analyzer);
//查询关键字解析
Query query = parser.parse(queryStr);
//查询前100条记录
TopDocs docs =searcher.search(query, count);
ScoreDoc[] score = docs.scoreDocs;
//关键字高亮显示
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color='red'>", "</font>");
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,new QueryScorer(query));
//截取含有关键字的文本片段,
highlighter.setTextFragmenter(new SimpleFragmenter(50));
System.out.println("length is: "+score.length);
if(score.length>0){
list = new ArrayList<ArticleInfo>();
for(int i=0;i<score.length;i++){
doc = searcher.doc(score[i].doc);
sum = highlighter.getBestFragment(analyzer, "contents", doc.get("contents"));
if(sum==null || "".equals(sum)){
sum = highlighter.getBestFragment(analyzer, "title", doc.get("title"));
}
System.out.println("sum is: "+sum);
articleInfo = new ArticleInfo();
articleInfo.setId(Integer.parseInt(doc.get("id")));
articleInfo.setTitle(doc.get("title"));
articleInfo.setContents(sum);
articleInfo.setPath(doc.get("url"));
list.add(articleInfo);
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
分享到:
相关推荐
本篇文章主要探讨如何利用Lucene实现文件摘要的自动提取,并进行关键词高亮显示。这一过程涉及到Lucene的Highlighter组件,它专门用于突出显示搜索结果中的关键词。 首先,我们了解Lucene的Highlighter是如何工作的...
《Lucene Web项目应用实例详解》 在信息技术领域,搜索引擎技术是不可或缺的一部分,Apache Lucene作为一款开源全文搜索引擎库,为开发者提供了强大的文本检索能力。本文将深入探讨一个名为“lucene_web”的项目,...
### 基于Lucene的全文检索引擎研究与应用 #### 概述 随着信息技术的飞速发展,尤其是互联网的普及,企业和个人积累了大量的电子文档。如何高效地管理和检索这些文档成为了亟待解决的问题。全文检索技术作为一种...
3. **集成到应用程序**: 开发者可以将Lucene库嵌入到Java应用中,实现自定义的全文检索功能。 4. **工具和库**: 如Luke工具,用于查看和分析Lucene索引;Tika用于解析各种格式的文件内容。 通过TestLucene文件,你...
这个项目涉及到了在Java环境下使用JSP(JavaServer Pages)技术来构建基于Lucene的搜索应用。JSP是一种动态网页技术,允许开发者将Java代码嵌入到HTML页面中,从而在服务器端处理数据并生成动态内容。 **描述:...
在本视频教程中,我们将深入探讨Lucene的核心概念,以及如何利用它来构建自己的搜索应用。 **一、Lucene基本概念** 1. **索引**:在Lucene中,数据不是直接存储的,而是被转换为一种叫做索引的数据结构。索引是...
### Lucene全文搜索引擎的应用 #### 摘要与背景 随着互联网技术的飞速发展,搜索引擎已成为人们获取信息的重要工具之一。它不仅提供了大量的信息,还简化了信息查找的过程。对于学术研究、日常学习和工作而言,...
Lucene是一个开源的Java库,提供了强大的文本分析、索引和搜索功能,被广泛应用于各种信息检索系统中。 第一章 引言 在信息爆炸的时代,搜索引擎成为人们获取信息的重要工具。Apache Lucene作为一款强大的全文搜索...
#### 四、构建Lucene应用程序 1. **开发环境搭建**: - 需要的JAR包: - `lucene-core-3.1.0.jar`:Lucene的核心组件。 - `lucene-analyzers-3.1.0.jar`:提供文本分析工具,如分词器。 - `lucene-highlighter-...
**Lucene.NET 搜索:深度解析与应用** **一、Lucene.NET 简介** Lucene.NET 是 Apache Software Foundation 开发的一个开源全文检索库,它是 Lucene 的 .NET 版本,为 .NET 平台提供了强大的文本搜索功能。Lucene...
Lucene是一个高性能、全文本搜索库,它为开发者提供了在应用程序中实现全文检索的功能。然而,为了更好地适应实际项目需求,通常需要对其进行封装,以便于管理和提升性能。本文将深入探讨Lucene的封装方法以及如何...
最后,将结果以用户友好的形式展示,如链接、摘要等。 在Java项目中,可以将这些步骤封装成服务类,提供接口供其他模块调用。示例代码可能会包括创建索引的 `createIndex()` 方法、查询的 `search(String query)` ...
Lucene是一个高性能、可伸缩的信息检索库,它提供了一个简单但功能强大的API,可以用于在各种应用中实现全文搜索功能。 【描述】"利用lucene对下载的网络真实数据进行索引并检索索引资源"意味着我们需要执行以下...
作为开源项目,Lucene 已经被广泛应用于各种 Web 应用、内容管理系统、搜索引擎等领域。 **主要组成部分** 1. **索引(Indexing)**:Lucene 的核心功能之一是将非结构化的文本数据转换成可搜索的索引。它将文档...
Lucene全文检索Word2007示例项目提供了一个实用的方法,将复杂的文本搜索功能引入到Java应用中,尤其适用于处理大量的文档数据。通过结合使用Lucene和Apache POI,我们可以高效地索引和检索Word2007文档内容,为用户...
在 .Net MVC4 中,Lucene.Net 可以作为独立的服务运行,或者集成到应用程序中。MVC(Model-View-Controller)是一种软件设计模式,用于组织 Web 应用程序的代码结构,使得代码更易于维护和扩展。在本案例中,我们将...
Lucene是一个高度可定制的全文搜索引擎库,广泛应用于各种Java应用程序中,以实现强大的搜索功能。在3.6.2版本中,Lucene提供了一整套功能,包括索引构建、查询解析、文档检索以及优化等。而Highlighter组件,则是...
总的来说,基于Lucene的财经类搜索引擎是一个复杂而实用的系统,它将先进的信息检索技术应用于金融领域的信息检索,提升了数据的可获取性和分析效率。对于开发者来说,理解并掌握Lucene的原理和实践,对提升自身在...
Lucene是Apache软件基金会的一个开放源码项目,它是一个高性能、全文本搜索库,为开发者提供了在Java应用程序中实现全文检索功能的基础架构。本篇文章将深入探讨Lucene 2.3.1版本的源代码,帮助读者理解其内部工作...
Lucene不仅用于网站搜索引擎,还广泛应用于企业级应用程序,帮助用户快速找到所需的信息。 1. **Lucene的基本概念** - **索引**: Lucene首先对文档内容建立索引,这个过程类似于书籍的目录,使得搜索能快速定位到...