转载自 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. ELK快速部署(踩坑记录、常见报错解决)及常用架构讲解

    ELK = Elasticserach + Logstash + kibana(包含但不仅限于) 简介: Elasticsearch:分布式搜索和分析引擎,具有高可伸缩.高可靠和易管理等特点.基于 A ...

  2. springboot 静态文件夹

    正常这个很久了,不需要写,但是好几年没有写这个相关的,都忘了,好记性不如烂笔头 spring: resources: static-locations: file:D:\\test #对应服务器内映射 ...

  3. smiley-http-proxy-servlet 转发https至 http网页访问

    转发 https -> http 网页访问 正常的smiley-http-proxy-servlet 写法, 可以转发https接口到http,http接口到http,http访问转发至http ...

  4. UDT(一):概览

    1. 参考链接 官网 https://udt.sourceforge.io/ 谷博士对UDT的简单介绍 https://udt.sourceforge.io/doc/udt-2009.ppt 获取UD ...

  5. ComfyUI 基础教程(二) —— Stable Diffusion 文生图基础工作流及常用节点介绍

    上一篇文章讲解述首次启动 ComfyUI 会自动打开一个最基础的文生图工作流.实际上,后续我们可以通过菜单选项,或者快捷键 ctrl + D来打开这个默认工作流.默认工作流如下: 这是一个最基础的文生 ...

  6. 推荐一款流量录制回放工具:jvm-sandbox-repeater

    在软件开发和测试过程中,我们经常会遇到需要对网络请求进行录制和回放的需求,以便进行调试.测试和分析.为了模拟真实的用户请求,我们通常会使用各种流量录制回放工具来记录并重放网络请求. 其中,jvm-sa ...

  7. Effective C++——Item33: 避免隐藏继承的名字

    Effective C++--Item33: 避免隐藏继承的名字 一.从原理理解隐藏 从变量作用域看隐藏 全局变量x和局部变量x的类型是不同的,但C++的隐藏规则:只隐藏名字(hiding names ...

  8. .NET 开源的功能强大的人脸识别 API

    前言 人工智能时代,人脸识别技术已成为安全验证.身份识别和用户交互的关键工具. 给大家推荐一款.NET 开源提供了强大的人脸识别 API,工具不仅易于集成,还具备高效处理能力. 本文将介绍一款如何利用 ...

  9. USB协议详解第4讲(USB描述符-标准配置描述符)

    1.USB描述符 USB描述符有设备描述符.标准配置描述符.接口描述符.端点描述符.字符串描述符,HID设备有HID描述符.报告描述符和物理描述符.今天主要是学习USB标准配置描述符的组成. 2.标准 ...

  10. .Net Core 的 using 作用

    // using 的使用 // 1. 引用命名空间 using namespace // 2. 自动释放资源 执行结束自动调用 IDispose 接口释放资源 // using (var contex ...