`
Jony.Hwong
  • 浏览: 116889 次
  • 来自: ...
社区版块
存档分类
最新评论

Lucene使用指南

阅读更多

 

 

 

Lucene使用指南

 

 Lucene简介

Lucene是一个基于Java的、高性能的全文检索工具包,它目前是著名的 Apache Jakarta 家族中的一个开源项目,也是目前最为流行的基于 Java 开源全文检索工具包。但它不是一个完整的搜索应用程序,而是为应用程序提供索引和搜索功能。

 

Lucene 是为文本类型的数据建立索引的,所以只要能把需要索引的数据格式转化的文本的,Lucene 就能对文档进行索引和搜索。比如HTMLPDF,都可以转换文本再交给Lucene进行索引。

1. Lucene环境

 1.1 Lucene版本

当前版本:取当前最新版本Lucene Core 3.4.0

下载地址:http://lucene.apache.org/java/docs/index.html

linux版本: lucene-3.4.0.tgz

windows版本:lucene-3.4.0.zip

 

 1.2 IKAnalyzer中文分词器

Lucene的分词器以接口Analyzer的形式对外提供,外部根据业务需要实现该分词器。Lucene本身提供了标准分词器StandarAnalyzer,针对英文的分词。

 

中文分词器现在比较成熟的是开源项目的IKAnalyzer,是针对中文的分词, 目前最新版本是IKAnalyzer3.2.8.jar

下载地址http://code.google.com/p/ik-analyzer/downloads/list

 

2. Lucene和应用程序的关系

 


 

 

 

3. Lucene API使用

 

 3.1 建立索引

为了对文档进行索引,Lucene 提供了五个基础的类,他们分别是 Document, Field, IndexWriter, Analyzer, Directory。下面我们分别介绍一下这五个类的用途:

 

Document

Document 是用来描述文档的,这里的文档可以指一个 HTML 页面,一封电子邮件,或者是一个文本文件。一个 Document对象由多个 Field 对象组成的。可以把一个 Document 对象想象成数据库中的一个记录,而每个 Field 对象就是记录的一个字段。

Field

Field 对象是用来描述一个文档的某个属性的,比如一封电子邮件的标题和内容可以用两个 Field 对象分别描述。

Analyzer

在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由 Analyzer 来做的。Analyzer 类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的 AnalyzerAnalyzer 把分词后的内容交给 IndexWriter 来建立索引。

IndexWriter

IndexWriter  Lucene 用来创建索引的一个核心的类,他的作用是把一个个的 Document 对象加到索引中来。

Directory

这个类代表了 Lucene 的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。

 

使用例子

 

public void createIndexs() throws Exception

{

    String indexDir = "d:\\Temp\\lucence\\indexDir";

    String dataDir = "d:\\Temp\\lucence\\dataDir";

    Analyzer  analyzer = new IKAnalyzer(true); // 使用中文分词器

    File dir = new File(dataDir);

    File[] files = dir.listFiles();

   

    Directory fsDirectory = FSDirectory.open(new File(indexDir));

    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, analyzer);

    config.setOpenMode(OpenMode.CREATE_OR_APPEND);

    config.setMaxBufferedDocs(1000);

    IndexWriter indexWriter = new IndexWriter(fsDirectory, config);

   

    for(int i = 0; i < files.length; i++)

{

         String filePath = files[i].getAbsolutePath();

        

         if(filePath.endsWith(".html") || filePath.endsWith(".htm"))

        {

             HTMLDocParser htmlParser = new HTMLDocParser(filePath);

              String path    = htmlParser.getPath();

              String title   = htmlParser.getTitle();

              Reader content = htmlParser.getContent();

             

              Document document = new Document();

            document.add(new Field("path", path, Field.Store.YES,

                        Field.Index.NO, Field.TermVector.NO));

            document.add(new Field("title", title, Field.Store.YES,

                        Field.Index.ANALYZED,

                        Field.TermVector.WITH_POSITIONS_OFFSETS));

            document.add(new Field("content", content,

                        Field.TermVector.WITH_POSITIONS_OFFSETS));

        

              indexWriter.addDocument(document);

        }

    }

    indexWriter.commit();

    indexWriter.optimize();

    indexWriter.close();

}

 


 3.2 搜索文档

在上面一部分中,我们已经为一个目录下的文本文档建立好了索引,现在在这个索引上进行搜索以找到包含某个关键词或短语的文档。Lucene 提供了几个基础的类来完成这个过程,它们分别是呢 IndexSearcher, Query, QueryParser,TopDocs下面我们分别介绍这几个类的功能。

 

Query

这是一个抽象类,Lucene针对不同的类型提供了不同的实现,比如 TermQuery, BooleanQuery, PrefixQuery,PhraseQuery这个类的目的是把用户输入的查询字符串封装成 Lucene 能够识别的 Query

QueryParser

如果不乐意去了解诸如BooleanQueryPhraseQuery看上去复杂的查询类型。希望的是输入一个字符串,它就能够理解用户的搜索意图,然后转换成lucene中合理的Query子类,提供给lucene进行搜索,那这个就是QueryParserQueryParser能够根据用户的输入来进行解析,自动构建合适的Query对象。

IndexSearcher

IndexSearcher 是用来在建立好的索引上进行搜索的。它只能以只读的方式打开一个索引,所以可以有多个 IndexSearcher的实例在一个索引上进行操作。

TopDocs

TopDocs是用来保存搜索的结果。保存前N条得分高的记录。

 

使用例子

 

    public List search(String strQuery) throws Exception

    {

        List searchResult = new ArrayList();

        String indexDir = "d:\\Temp\\lucence\\indexDir";

        String field = "content";

         Analyzer  analyzer = new IKAnalyzer(true); // 使用中文分词器

        

         Directory fsDirectory = FSDirectory.open(new File(indexDir));

        IndexSearcher indexSearcher = new IndexSearcher(fsDirectory, true);

 

        QueryParser queryParser = new QueryParser(Version.LUCENE_34, field, analyzer);

        Query query = queryParser.parse(strQuery);

       

        if (null != query && null != indexSearcher)

        {

            TopDocs hits = indexSearcher.search(query, 1000);

            int totalHits = hits.totalHits;

            int len = Math.min(1000, totalHits);

 

            ScoreDoc[] docs = hits.scoreDocs;

            for (int i = 0; i < len; i++)

            {

                SearchResultBean resultBean = new SearchResultBean();

 

                Document doc = indexSearcher.doc(docs[i].doc);

                resultBean.setHtmlPath(doc.get("path"));

                resultBean.setHtmlTitle(doc.get("title"));

                searchResult.add(resultBean);

            }

        }

        return searchResult;

    }

 

 

4. 附录

 

提供一个简单的Lucene Demo工程。参考lucene-demo.rar

 

 

 

分享到:
评论
1 楼 xiaolv 2012-02-08  
String indexDir = "d:\\Temp\\lucence\\indexDir";

String dataDir = "d:\\Temp\\lucence\\dataDir";


这两个地址干什么用?
地址下面还要自己建*.html的文件?

相关推荐

    Lucene开发指南

    《Lucene开发指南》是一份综合性的学习资料,旨在帮助开发者深入理解和熟练运用Apache Lucene这一强大的全文搜索引擎库。Lucene是Java语言实现的开源项目,广泛应用于信息检索、数据分析和大数据处理等领域。本指南...

    Lucene.In.Action.2nd.Edition

    《Lucene in Action》第二版是一本专注于Apache Lucene搜索引擎库的专业著作,更新至2010年7月,提供详尽且清晰的Lucene使用指南。这本书是开发者们深入理解并有效应用Lucene进行信息检索和全文搜索的宝贵资源。 ...

    Lucene IN ACTION中文版

    《Lucene IN ACTION》中文版是一本深入探讨Apache Lucene搜索引擎库的专业书籍,它为读者提供了全面、详尽的Lucene使用指南和技术解析。Lucene是Java开发的全文检索库,广泛应用于各种信息检索和文本分析场景。这...

    lucene帮助文档.chm

    这个名为“lucene帮助文档.chm”的压缩包文件,包含了一份详尽的Lucene使用指南,通常以CHM(Microsoft Compiled HTML Help)格式呈现。CHM文件是一种将HTML页面、图像和其他资源组合成一个单一的、可搜索的离线帮助...

    Lucene 基础指南.doc

    《Lucene基础指南》 Lucene是一个由Apache软件基金会开发的全文搜索引擎库,采用Java语言编写,具有强大的功能。它的核心API简洁而高效,主要处理两大任务:建立索引和执行搜索。 1. 建立索引 - Document:在...

    lucene2.9开发指南

    《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...

    lucene入门指南

    **Lucene 入门指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它是 Java 开发人员用来构建搜索引擎应用程序的基础工具。本指南将帮助初学者理解 Lucene 的核心概念,以及如何利用它来...

    lucene指南

    **Lucene 指南** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发,广泛应用于各种搜索引擎的构建。它提供了一个简单但功能强大的API,允许开发者在自己的应用中实现全文检索功能。Lucene 入门需要...

    Lucene入门指南

    ### Lucene入门指南 #### 一、Lucene简介 **Lucene** 是一款高性能的全文检索引擎工具包,由 **Apache 软件基金会** 的 **Jakarta 项目组** 开发并维护。作为一款完全开放源代码的工具,Lucene 提供了一系列的功能...

    lucene in action源码

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。源码的提供使得读者可以更直观地理解Lucene的工作原理,这对于学习和开发基于Lucene的搜索应用非常有帮助。...

    lucene in action英文版 lucene 3.30包

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...

    Lucene资料大全(包括Lucene_in_Action书等)

    这是一本广泛认可的关于Apache Lucene的权威指南,通常被简称为LIA,它深入介绍了Lucene搜索引擎库的使用和实现。 描述中的"Lucene资料大全"暗示了这个压缩包可能包含了除书籍之外的其他学习材料,比如教程、PPT或...

    Lucene的的学习资料及案例

    **Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...

    Lucene3.0 使 用 教 程

    【Lucene3.0 使用教程】是针对Java开发者的一个指南,旨在教授如何利用Apache Lucene 3.0.1版本实现全文检索功能。Lucene是一个高性能、可伸缩的开源全文检索库,它提供了文本分析、索引创建、文档检索等核心功能。...

    Lucene实战

    Lucene实战(第2版)(最权威的Lucene指南,覆盖Apache Lucene 3.0,作者为Lucene项目成员) 《Lucene实战(第2版)》基于Apache的Lucene 3.0,从Lucene核心、Lucene应用、案例分析3个方面详细系统地介绍了Lucene,包括...

    Lucene全文搜索_LuceneJava全文搜索_

    至于压缩包中的文件"用户管理手册.docx",这可能是一个关于如何使用Lucene的详细指南,涵盖了从安装、配置到实际应用的方方面面。"DocSearch"可能是一个示例程序或库,展示了如何在Java项目中实际集成和使用Lucene...

    基于lucene3.6平台搜索工具相关包及使用说明

    本指南将深入探讨基于Lucene 3.6的搜索工具包及其使用方法。 一、Lucene 3.6核心组件 1. 分析器(Analyzer):负责对输入文本进行预处理,包括分词、去除停用词、词形还原等。Lucene 3.6中内置了多种分析器,如...

    lucene 数据库

    《Lucene 数据库:深入解析与实践指南》 Lucene,作为一款开源的全文检索库,是Java领域中广泛使用的搜索引擎框架。它为开发者提供了强大的文本检索功能,使得在大量数据中快速查找相关信息变得轻而易举。在这个...

Global site tag (gtag.js) - Google Analytics