`

Apache Lucene 5.x版本 示例

 
阅读更多
http://blog.csdn.net/isea533/article/details/48791309

由于目前网上关于lucene的资料多是4.x或者更早版本的,5.x版本相比有较大的改动,为了方便学习5.x版本,本文对5.x的示例简单修改做个记录。

本文内容源自官方文档,在core/overview-summary.html上。

本文使用的具体版本是5.3.1,针对5.x版本都适用。

简单例子

Apache Lucene 是一个高性能并且功能全面的文本搜索引擎库,这里有一个如何使用Lucene进行索引和查询的简单例子。

public static void main(String[] args) throws IOException, ParseException {
    Analyzer analyzer = new StandardAnalyzer();

    //将索引存储到内存中
    Directory directory = new RAMDirectory();
    //如下想把索引存储到硬盘上,使用下面的代码代替
    //Directory directory = FSDirectory.open(Paths.get("/tmp/testindex"));
    IndexWriterConfig config = new IndexWriterConfig(analyzer);
    IndexWriter iwriter = new IndexWriter(directory, config);

    String[] texts = new String[]{
        "Mybatis分页插件 - 示例",
        "Mybatis 贴吧问答 第一期",
        "Mybatis 示例之 复杂(complex)属性(property)",
        "Mybatis极其(最)简(好)单(用)的一个分页插件",
        "Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题",
        "Mybatis 示例之 foreach (下)",
        "Mybatis 示例之 foreach (上)",
        "Mybatis 示例之 SelectKey",
        "Mybatis 示例之 Association (2)",
        "Mybatis 示例之 Association"
    };

    for (String text : texts) {
        Document doc = new Document();
        doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
        iwriter.addDocument(doc);
    }
    iwriter.close();

    //读取索引并查询
    DirectoryReader ireader = DirectoryReader.open(directory);
    IndexSearcher isearcher = new IndexSearcher(ireader);
    //解析一个简单的查询
    QueryParser parser = new QueryParser("fieldname", analyzer);
    Query query = parser.parse("foreach");
    ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
    //迭代输出结果
    for (int i = 0; i < hits.length; i++) {
        Document hitDoc = isearcher.doc(hits[i].doc);
        System.out.println(hitDoc.get("fieldname"));
    }
    ireader.close();
    directory.close();
}

代码输出结果:
Mybatis 示例之 foreach (下)
Mybatis 示例之 foreach (上)

Lucene API 分成了下面几个包

org.apache.lucene.analysis

定义了从Reader转换为TokenStream的抽象AnalyzerAPI,主要就是分词器。提供了一些默认的实现,包含StopAnalyzer和基于文法的StandardAnalyzer。中文分词可以参考 中文分词库 IKAnalyzer。

org.apache.lucene.codecs

提供了一个抽象的编码和解码的倒排索引结构,还提供了一些不同的实现可以应用于不同的程序需求。

org.apache.lucene.document

提供了一个简单的Document类。一个文档只是一组命名的字段,它的值可以是字符串或者Reader的实例。

org.apache.lucene.index

提供了两个主要的类:IndexWriter用于创建和给文档添加索引,IndexReader用于访问索引数据。

org.apache.lucene.search

提供代表查询的数据结构(例如TermQuery用于单独的关键字查询,PhraseQuery用于短句,BooleanQuery用于布尔联合查询)。
IndexSearcher将查询转换为TopDocs。一些QueryParsers提供了从字符串或者xml生成查询结构的功能。

org.apache.lucene.store

定义了一个抽象类来存储持久化数据,Directory这是一个由IndexOutput和IndexInput分别写和读取的指定文件的集合。提供了多个实现,包括FSDirectory,这个实现使用文件系统目录来存储文件。还有RAMDirectory类实现了文件驻留在内存中的数据结构。

org.apache.lucene.util

包含了一些有用的数据结构和工具类,例如FixedBitSet和PriorityQueue。

应用应该按下面的步骤使用Luncene

通过添加字段(Field)创建文档(Document);

创建IndexWriter,通过addDocument()方法添加文档(Document);

调用QueryParser.parser()方法从字符串生成查询对象;

创建IndexSearcher并通过search()方法进行查询。

最后

以上内容是Luncene中最基本的内容,关于上面每个包下面都还有一份详细的文档,本文后续可能会对这些内容做一些简单的介绍,如果大家需要用到Luncene,建议下载官方提供的下载,里面包含完整的文档内容。
分享到:
评论

相关推荐

    Lucene.Net.dll

    作为Apache Lucene项目的一部分,Lucene.Net.dll为开发者提供了在.NET环境中构建高性能搜索引擎的能力。本文将深入探讨2.9.2版本的Lucene.Net.dll,揭示其背后的强大功能和核心技术。 Lucene.Net.dll是基于Java版本...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-27.Lucene项目实战5 共5页.pptx

    《Lucene4.X实战类百度搜索的大型文档海量搜索系统》是针对企业信息化系统中文档中心管理系统的深度应用,利用Apache Lucene构建一个强大的搜索引擎。Lucene作为一个高性能、全文本检索库,它允许开发者轻松地在应用...

    Lucene.dll各版本集合

    Lucene.dll 是 Apache Lucene 库的 .NET 版本,它是一个高性能、全文本搜索库,被广泛应用于各种应用程序中进行文本检索和索引。Apache Lucene 提供了强大的搜索功能,包括分词、评分、排序等,而 Lucene.dll 是这个...

    《ajax+Lucene构建搜索引擎》源代码 for lucene 2.x

    《Ajax+Lucene构建搜索引擎》源代码是针对Lucene 2.x版本的一个示例项目,旨在教用户如何结合Ajax技术和Lucene搜索引擎库来创建高效的、交互式的搜索功能。Lucene是一个开源全文检索库,由Apache软件基金会开发,它...

    Lucene.Net.DemoLib.dll

    Lucene.NET是Apache软件基金会开发的一个开源全文搜索库,它为.NET开发者提供了一个强大、高效的全文检索引擎框架。本文将深入探讨Lucene.Net.DemoLib.dll,这是一个基于Lucene.NET的示例库,旨在帮助开发者更好地...

    Lucene建立索引及查询包含“java”关键字 示例代码

    **Lucene创建索引与搜索"java"关键字的示例代码** Apache Lucene是一个高性能、全功能的文本搜索引擎库,广泛应用于各种系统中用于实现高效、精准的全文检索功能。这个示例代码将向我们展示如何使用Lucene来创建一...

    中文分词器(mmseg4j + luncene5.X)源码+jar包

    在Lucene5.x版本中,引入了更高效的倒排索引结构和查询优化策略,增强了对多语言的支持,包括对中文的处理。Lucene允许开发者自定义分词器,这就为mmseg4j与Lucene的结合提供了可能。 **mmseg4j与Lucene5.x整合** ...

    lucene.net.analysis.cn

    Lucene.NET是Apache Lucene项目的一个.NET版本,它是一个开放源代码的信息检索库,提供了强大的文本分析、索引和搜索功能。Lucene.Net完全用C#重写了Java版Lucene的核心算法,保持了与原版的高度兼容性,同时充分...

    lucene示例代码

    Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发并维护。它提供了强大的索引和搜索功能,是开源社区中最受欢迎的搜索框架之一。Lucene 可以被集成到各种 Java 应用程序中,用于实现高效的全文检索。它...

    IKAnalyzer5:IKAnalyzer 支持 Lucene 5.x 和 Solr 5.x

    Solr 5.x版本主要提升了性能,增强了稳定性,并引入了新的特性和改进,如SolrCloud的优化和更强大的数据分析能力。 **IKAnalyzer5的关键特性** 1. **灵活的配置**: IKAnalyzer5允许用户自定义分词规则,可以通过...

    lucene简单代码列子

    这里使用的是Lucene 8.10.1版本,根据实际情况可选择相应版本。 接下来,我们创建一个索引。索引是Lucene处理文档的基础,它将文本数据转换为可以快速搜索的结构。以下是一个简单的索引创建示例: ```java import ...

    lucene for java 简单demo

    doc.add(new StringField("title", "Lucene示例", Field.Store.YES)); doc.add(new StringField("content", "这是一个简单的Lucene应用", Field.Store.YES)); indexWriter.addDocument(doc); indexWriter.close...

    lucene练习代码

    1. 下载最新版本的Lucene库(通常为jar文件)。 2. 将下载的jar文件添加到项目的类路径中,这可以通过右键点击项目,选择"Build Path" -&gt; "Configure Build Path" -&gt; "Libraries" -&gt; "Add Jars" 或 "Add External ...

    Lucene之Helloworld

    在信息技术领域,搜索引擎是一个不可或缺的部分,而Apache Lucene作为一款高性能、全文本搜索库,为开发者提供了强大的文本检索能力。本文将深入探讨如何使用Lucene进行基本操作,通过“HelloWorld”实例来开启你的...

    Lucene.Net.NLS.rar

    Lucene.NET是一个开源全文搜索引擎库,它是Apache Lucene项目的一部分,专为.NET Framework设计。这个压缩包特别针对中文语言,提供了解决中文文本分词问题的关键组件。 在Lucene.NET中,分词是文本分析的一个重要...

    lucene对doc.xlsx操作包

    总结,利用Apache Lucene、POI和Tika,我们可以有效地处理doc.xlsx文档,将其内容纳入Lucene索引,从而实现高效的全文搜索。在实际开发中,根据项目需求,可能还需要考虑性能优化、错误处理以及与其他系统的集成等...

    lucene-6.5.1

    Lucene 6.5.1作为该系列的一个版本,继承了Lucene 6.x系列的诸多优点,并在此基础上进行了优化与增强,以提高搜索性能和稳定性。 ### 特性与改进 #### 1. 性能提升 - **索引速度**: Lucene 6.5.1通过改进内部算法...

    S4LuceneLib-an iOS native version of Apache's Lucene project.rar

    因此,S4LuceneLib应运而生,它是一个专门为iOS开发的、基于Apache Lucene的本地化版本,允许iOS应用具备强大的全文搜索功能。 S4LuceneLib的核心目标是将Lucene的精髓带到iOS世界,提供与原版Lucene相似的功能,...

    Lucene入门示例

    **Lucene入门示例** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java语言实现的,但提供了多种语言的接口,包括Python、C#等。本示例将帮助初学者理解Lucene的基本用法,以及如何在实际...

Global site tag (gtag.js) - Google Analytics