`
wbj0110
  • 浏览: 1610297 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Lucene 源代码剖析-1 Lucene是什么

阅读更多

1           Lucene是什么

Apache Lucene是一个高性能(high-performance)的全能的全文检索(full-featured text search engine)的搜索引擎框架库,完全(entirely)使用Java开发。它是一种技术(technology),适合于(suitable for)几乎(nearly)任何一种需要全文检索(full-text search)的应用,特别是跨平台(cross-platform)的应用。

 

 

Lucene 通过一些简单的接口(simple API)提供了强大的特征(powerful features):

 

可扩展的高性能的索引能力(Scalable, High-Performance Indexing

  •               超过20M/分钟的处理能力(Pentium M 1.5GHz
  •               很少的RAM内存需求,只需要1MB heap
  •               增量索引(incremental indexing)的速度与批量索引(batch indexing)的速度一样快
  •                索引的大小粗略(roughly)为被索引的文本大小的20-30%

  

强大的精确的高效率的检索算法(< /strong>Powerful, Accurate and Efficient Search Algorithms

  •               分级检索(ranked searching)能力,最好的结果优先推出在前面
  •               很多强大的query种类:phrase queries, wildcard queries, proximity queries, range queries
  •               支持域检索(fielded searching),如标题、作者、正文等
  •               支持日期范围检索(date-range searching
  •               可以按任意域排序(sorting by any field
  •               支持多个索引的检索(multiple-index searching)并合并结果集(merged results
  •               允许更新和检索(update and searching)并发进行(simultaneous

     

跨平台解决方案(Cross-Platform Solution

  •               Open Source方式提供并遵循Apache License,允许你可以在即包括商业应用也包括Open Source程序中使用Lucene
  •               100%-pure Java(纯Java实现)
  •                提供其他开发语言的实现版本并且它们的索引文件是兼容的

 

Lucene API被分成(divide into)如下几种包(package

   

  •                     org.apache.lucene.analysis     

定义了一个抽象的Analyser API,用于将text文本从一个java.io.Reader转换成一个TokenStream,即包括一些Tokens的枚举容器(enumeration)。一个TokenStream的组成(compose)是通过在一个Tokenizer的输出的结果上再应用TokenFilters生成的。一些少量的Analysers实现已经提供,包括StopAnalyzer和基于语法(gramar-based)分析的StandardAnalyzer     

  •                    org.apache.lucene.document  

提供一个简单的Document类,一个document只不过包括一系列的命名了(named)的Fields(域),它们的内容可以是文本(strings)也可以是一个java.io.Reader的实例。     

  •                      org.apache.lucene.index         

提供两个主要类,一个是IndexWriter用于创建索引并添加文档(document),另一个是IndexReader用于访问索引中的数据。      

  •                     org.apache.lucene.search        

提供数据结构(data structures)来呈现(represent)查询(queries):TermQuery用于单个的词(individual words),PhraseQuery用于短语,BooleanQuery用于通过boolean关系组合(combinations)在一起的queries。而抽象的Searcher用于转变queries为命中的结果(hits)。IndexSearcher实现了在一个单独(single)的IndexReader上检索。      

  •                      org.apache.lucene.queryParser      

使用JavaCC实现一个QueryParser     

  •                      org.apache.lucene.store          

定义了一个抽象的类用于存储呈现的数据(storing persistent data),即Directory(目录),一个收集器(collection)包含了一些命名了的文件(named files),它们通过一个IndexOutput来写入,以及一个IndexInput来读取。提供了两个实现,FSDirectory使用一个文件系统目录来存储文件,而另一个RAMDirectory则实现了将文件当作驻留内存的数据结构(memory-resident data structures)。      

  •                      org.apache.lucene.util              

包含了一小部分有用(handy)的数据结构,如BitVectorPriorityQueue等。

     

2           Hello World!

下面是一段简单的代码展示如何使用Lucene来进行索引和检索(使用JUnit来检查结果是否是我们预期的):

 

 

复制代码
    // Store the index in memory:
    Directory directory = new RAMDirectory();
    
// To store an index on disk, use this instead:
    
//Directory directory = FSDirectory.getDirectory(”/tmp/testindex”);
    IndexWriter iwriter = new IndexWriter(directory, analyzer, true);
    iwriter.setMaxFieldLength(
25000);
    Document doc 
= new Document();
    String text 
= “This is the text to be indexed.“;
    doc.add(
new Field(“fieldname“, text, Field.Store.YES,
        Field.Index.TOKENIZED));
    iwriter.addDocument(doc);
    iwriter.optimize();
    iwriter.close();
    
    
// Now search the index:
    IndexSearcher isearcher = new IndexSearcher(directory);
    
// Parse a simple query that searches for ”text”:
    QueryParser parser = new QueryParser(“fieldname“, analyzer);
    Query query 
= parser.parse(“text“);
    Hits hits 
= isearcher.search(query);
    assertEquals(
1, hits.length());
    
// Iterate through the results:
    for (int i = 0; i < hits.length(); i++{
      Document hitDoc 
= hits.doc(i);
      assertEquals(“This 
is the text to be indexed.“, hitDoc.get(“fieldname“));
    }

    isearcher.close();
    directory.close(); 
复制代码

为了使用Lucene,一个应用程序需要做如下几件事:

1.          通过添加一系列Fields来创建一批Documents对象。

2.          创建一个IndexWriter对象,并且调用它的AddDocument()方法来添加进Documents

3.          调用QueryParser.parse()处理一段文本(string)来建造一个查询(query)对象。

4.          创建一个IndexReader对象并将查询对象传入到它的search()方法中。

   

   

3           Lucene Roadmap

      

 

           

            

 

http://www.cnblogs.com/eaglet/archive/2009/02/13/1390003.html

分享到:
评论

相关推荐

    .NET lucene 源代码

    标题中的".NET Lucene 源代码"表明我们将探讨的是如何在.NET环境下利用Lucene进行搜索引擎的开发,并且会涉及到源代码层面的解析。描述中提到的“简单易用”,揭示了Lucene的核心特性之一,即它对开发者友好,易于...

    Lucene源代码剖析

    《Lucene源代码剖析》是一本深度探讨Java版本Lucene搜索引擎库的专业书籍。Lucene是Apache软件基金会的一个开源项目,广泛应用于全文检索和信息检索领域。本书旨在通过深入解析其源代码,帮助开发者理解Lucene的工作...

    Lucene 源代码剖析.rar

    这是一篇公司的内部培训教材,其中中的内容涵盖LUCENE的方方面面,从源代码角度深入剖析LUCENE,如果要对LUCENE有更加深入的了解(专家级别),这篇技术文档必不可少。 前提:对LUCENE有一定程度的了解,否则会让你云...

    lucene.net源代码

    《深入剖析Lucene.NET:基于源代码的实例解析》 Lucene.NET,作为Apache Lucene的.NET版本,是一个高性能、全文检索库,为.NET开发者提供了强大的文本搜索功能。本实例将带您深入理解Lucene.NET的内部机制,通过源...

    lucene-5.3.1源代码

    本文将深入探讨Lucene 5.3.1版本的核心概念、架构以及如何利用其源代码进行二次开发。 一、Lucene基础 1. Lucene核心组件: - 文档(Document):存储用户数据的容器,可以包含多个字段(Field),如标题、内容等...

    Lucene-2.3.1 源代码阅读学习

    《Lucene-2.3.1 源代码阅读学习》 Lucene是Apache软件基金会的一个开放源码项目,它是一个高性能、全文本搜索库,为开发者提供了在Java应用程序中实现全文检索功能的基础架构。本篇文章将深入探讨Lucene 2.3.1版本...

    CLucene源代码-Lucene的C++版本

    CLucene是Lucene的C++实现,为那些偏好或需要使用C++进行开发的...通过深入研究clucene-core-2.3.3.4这个版本的源代码,开发者不仅可以学习到搜索引擎的基本原理,还能了解到如何在实际应用中优化和定制这些功能。

    lucene-core-2.9.2.jar

    Apache采用的是Apache License 2.0,这是一种宽松的开源许可,允许用户自由地使用、复制、修改、合并、发布、分发、再授权和/或销售软件,同时也允许用户以源代码或编译后的形式分发。了解许可条款对于遵循开源社区...

    Lucene 3.6.2 源代码

    这个源代码版本代表了Lucene 3.x系列的最后一个稳定版本,为开发者提供了深入理解Lucene内部机制的宝贵资源。下面将详细探讨Lucene 3.6.2中的关键知识点。 1. **分词器(Tokenizers)**: Lucene的核心功能之一是...

    lucene-3.0.1库及源代码

    本文将围绕“lucene-3.0.1”库和源代码,深入探讨其核心概念、主要特性以及如何进行开发和调试。 一、Lucene 3.0.1核心概念 1. **倒排索引**:Lucene的核心在于其倒排索引机制,这种索引方式能快速找到包含特定...

    Lucene-core-2.0.0

    1. **Lucene概述**: Lucene是Apache软件基金会的一个开放源代码项目,它是Java语言编写的信息检索库。它提供了高级的索引和搜索功能,支持分词、布尔运算、短语搜索、近似搜索等多种搜索模式。 2. **Lucene核心组件...

    lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

    Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,提供了文本分析、索引和搜索的基本功能。 1. **Lucene简介** Lucene是一个高性能、全文本检索库,可集成到各种系统中,用于构建强大的...

    lucene-2.9.4-src.zip

    《Apache Lucene 2.9.4源代码解析》 Apache Lucene是一个开源全文搜索引擎库,由Java编写,被广泛应用于各种搜索应用中...无论是对搜索技术的探索,还是在实际项目中的应用,深入研究Lucene源代码都能带来极大的收益。

    Lucene.net-4.8.0 -new Bate.rar

    Lucene.Net提供了多种内置分析器,如标准分析器(StandardAnalyzer)、盘古分析器(PanguAnalyzer),也可自定义分析器以满足特定的语言或业务需求。 3. **文档(Document)**:文档是信息的基本单位,可以包含多个...

    Incubating-Apache-Lucene.Net-2.0-004-11Mar07.bin.zip

    由于描述中提到“已编译,不含源代码”,这意味着提供的文件是编译后的二进制版本,用户可以直接在.NET环境中使用,而无需自行编译源代码。 Lucene.Net的核心功能包括: 1. **全文检索**:Lucene.Net支持对文本...

    lucene-4.2.1-src.tgz

    **Lucene** 是一个开源的全文检索库,由Apache...通过研究`lucene-4.2.1-src.tgz`中的源代码,开发者不仅可以理解Lucene的工作原理,还能学习到如何在实际项目中高效地应用这些知识,提升搜索引擎的性能和用户体验。

    lucene所有的jar包

    Lucene是Apache软件基金会的一个开放源代码项目,它提供了一个高性能、全文本搜索的API。Lucene支持索引和搜索文本,可以集成到各种Java应用程序中,帮助开发者轻松实现全文检索功能。其核心特性包括文档分析、索引...

    lucene-4.8.0源代码,比较全

    本文将深入探讨Lucene 4.8.0版本的源代码,揭示其内部工作原理以及关键组件,帮助读者理解这个强大的搜索引擎是如何工作的。 一、Lucene概述 Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)...

    基于lucene的词频分析源代码

    **基于Lucene的词频分析源代码** 在信息检索和自然语言处理领域,词频分析是一种重要的技术,它用于理解文本中的关键词分布和频率。Lucene,作为一个强大的全文搜索引擎库,提供了内置的分析器和工具,支持对文本...

Global site tag (gtag.js) - Google Analytics