转载自 http://download.csdn.net/source/858994

源地址下是 Word 文档,这里转换成HTML 格式

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

      

           

            

 

Lucene 源代码剖析-2 Lucene是什么的更多相关文章

  1. Lucene学习之四:Lucene的索引文件格式(1)

    本文转载自:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html Lucene的索引里面存了些什么,如何存放的,也即 ...

  2. 转】从源代码剖析Mahout推荐引擎

    原博文出自于: http://blog.fens.me/mahout-recommend-engine/ 感谢! 从源代码剖析Mahout推荐引擎 Hadoop家族系列文章,主要介绍Hadoop家族产 ...

  3. NGINX源代码剖析 之 CPU绑定(CPU亲和性)

    作者:邹祁峰 邮箱:Qifeng.zou.job@gmail.com 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 18:44 转载请注明来自&quo ...

  4. Qt中事件分发源代码剖析(一共8个步骤,顺序非常清楚:全局的事件过滤器,再传递给目标对象的事件过滤器,最终传递给目标对象)

    Qt中事件分发源代码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,并且进行分发,这些都是在exec中进行的.下面举例说明: 1)首先看看下面一段示例代码: in ...

  5. STL源代码剖析 读书总结

    <<STL源代码剖析>> 侯捷著 非常早就买了这本书, 一直没看, 如今在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法. 看之前我对于泛型 ...

  6. 菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t

    菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...

  7. STL源代码剖析(一) - 内存分配

    Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...

  8. 【Java集合源代码剖析】LinkedHashmap源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985 前言:有网友建议分析下LinkedHashMap的源代码.于是花了一晚上时间 ...

  9. 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理

    豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...

  10. Python源代码剖析笔记3-Python运行原理初探

    Python源代码剖析笔记3-Python执行原理初探 本文简书地址:http://www.jianshu.com/p/03af86845c95 之前写了几篇源代码剖析笔记,然而慢慢觉得没有从一个宏观 ...

随机推荐

  1. Python爬虫常用库介绍(requests、BeautifulSoup、lxml、json)

    1.requests库 http协议中,最常用的就是GET方法: import requests response = requests.get('http://www.baidu.com') pri ...

  2. 这应该是全网最详细的Vue3.5版本解读

    前言 Vue3.5正式版在这两天发布了,网上已经有了不少关于Vue3.5版本的解读文章.但是欧阳发现这些文章对3.5中新增的功能介绍都不是很全,所以导致不少同学有个错觉,觉得Vue3.5版本不过如此, ...

  3. RxJS 系列 – Transformation Operators

    前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators Error Handling Operators 这篇继续 ...

  4. SQL Server – Schema

    前言 久仰 dbo 大名, 但是一直没有认真去看它有啥作用. 今天翻看了一下 SQL Server sample database: AdventureWorks2019, 发现它用了许多 Schem ...

  5. HTTP——请求数据格式

    请求数据格式   

  6. 搭建本地nginx-rtmp服务,初体验rtmp推流、拉流

    实验环境说明: ubuntu 16.04 进行本实验的前提:需要在ubuntu上搭建好ffmpeg环境,参考我的另一篇博文 ffmpeg编译过程经历的99八十一难 下面开始本文内容 PART1 编译安 ...

  7. SuperMap iManager for K8S 删除旧环境修改NFS地址流程

    一.完整删除SuperMap iManager 找到SuperMap iManager安装目录,执行: ./shutdown.sh -v 二.修改NFS存储路径 有两种办法,一种是直接修改/etc/e ...

  8. 【VMware VCF】使用 PowerVCF 连接和管理 VMware Cloud Foundation 环境。

    VMware 有一个非常强大的命令行工具叫 PowerCLI,该工具是基于 PowerShell 开发的模块,主要用于在 Windows 环境中连接和管理传统虚拟化解决方案,比如 vSphere.vS ...

  9. 【解决方案】基于数据库驱动的自定义 TypeHandler 处理器

    目录 前言 一.TypeHandler 简介 1.1转换步骤 1.2转换规则 二.JSON 转换 三.枚举转换 四.文章小结 前言 笔者在最近的项目开发中,频繁地遇到了 Java 类型与 JDBC 类 ...

  10. 001 C#配置多个版本Swagger说明

    1. AddSwaggerGen AddSwaggerGen 是配置多个版本的swagger的关键 Path.Combine 当前项目运行的路径 UseSwaggerUI 主要分为 2 步骤  : 1 ...