`
xiao_yi
  • 浏览: 411138 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
lucence是一个很容易上手,纯java语言的全文索引检索工具包。
Lucene的作者是资深的全文索引/检索专家,最开始发布在他本人的主页上,2001年10月贡献给APACHE,成为APACHE基金jakarta的一个子项目。
      目前,lucene广泛用于全文索引/检索的项目中。
      lucene也被翻译成C#版本,目前发展为Lucene.Net(不过最近好象有流产的消息)。
 
Lucene 原理


       lucene的检索算法属于索引检索,即用空间来换取时间,对需要检索的文件、字符流进行全文索引,在检索的时候对索引进行快速的检索,得到检索位置,这个位置记录检索词出现的文件路径或者某个关键词。
       在使用数据库的项目中,不使用数据库进行检索的原因主要是:数据库在非精确查询的时候使用查询语言“like %keyword%”,对数据库进行查询是对所有记录遍历,并对字段进行“%keyword%”匹配,在数据库的数据庞大以及某个字段存储的数据量庞大的时候,这种遍历是致命的,它需要对所有的记录进行匹配查询。因此,lucene主要适用于文档集的全文检索,以及海量数据库的模糊检索,特别是对数据库的 xml或者大数据的字符类型。

全文检索的实现机制

Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统

比较一下Lucene和数据库:

Lucene 数据库
索引数据源:doc(field1,field2...) doc(field1,field2...)
\ indexer /
_____________
| Lucene Index|
--------------
/ searcher \
结果输出:Hits(doc(field1,field2) doc(field1...))
 索引数据源:record(field1,field2...) record(field1..)
\ SQL: insert/
_____________
| DB Index |
-------------
/ SQL: select \
结果输出:results(record(field1,field2..) record(field1...))
Document:一个需要进行索引的“单元”
一个Document由多个字段组成
Record:记录,包含多个字段
Field:字段 Field:字段
Hits:查询结果集,由匹配的Document组成 RecordSet:查询结果集,由多个Record组成

全文检索 ≠ like "%keyword%"

搜索过程优化

 以下是http://www.onjava.com/lpt/a/3273的原文

For instance, if we set mergeFactor to 10, a new segment will be created on the disk for every 10 documents added to the index. When the 10th segment of size 10 is added, all 10 will be merged into a single segment of size 100. When 10 such segments of size 100 have been added, they will be merged into a single segment containing 1000 documents, and so on. Therefore, at any time, there will be no more than 9 segments in each power of 10 index size.

The exception noted earlier has to do with another IndexWriter instance variable: maxMergeDocs. While merging segments, Lucene will ensure that no segment with more than maxMergeDocs is created. For instance, if we set maxMergeDocs to 1000, when we add the 10,000th document, instead of merging multiple segments into a single segment of size 10,000, Lucene will create a 10th segment of size 1000, and keep adding segments of size 1000 for every 1000 documents added.

就是说如果set mergeFactor to 10 ,当有10个document对象被增加到索引中,就会创建一个segment,然而当segment的数量到达10,100条数据,的时候就会把这10个segment存储到一个新的segment中,依次顺序增加。我们还可以设置maxMergeDocs来固定segment,如果set maxMergeDocs 为1000,当segment数量到达1000的时候不会合并创建到一个新的segment,而是固定的。

                       to be continued...

 
分享到:
评论

相关推荐

    lucene.net搜索技术,附带学习资料

     lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦。Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,...

    Lucence和Hadoop学习资料

    对于Hadoop,你需要了解HDFS的分布式特性,如何进行数据分块和复制,以及MapReduce的编程模型。同时,深入学习YARN(Yet Another Resource Negotiator),它是Hadoop的资源管理系统,负责任务调度和集群资源分配。 ...

    lucence视频全面例子

    通过以上内容,我们可以了解到Lucene作为一个强大的全文搜索引擎库,如何在实际应用中处理信息检索问题。结合提供的视频教程,读者将能够更深入地理解和实践Lucene的各项功能,进一步提升在信息检索领域的专业技能。

    lucene评分公式详解

    首先,我们要了解Lucence默认的评分公式,这是TF-IDF(Term Frequency - Inverse Document Frequency)的变种。TF-IDF是一种统计方法,用于评估一个词在文档集合中的重要性。在Lucene中,评分公式大致可以分为三个...

    Lucence高亮显示的实现

    通过本文的学习,我们了解了如何使用 Lucene 实现文本高亮显示的方法。这一技术不仅可以提升用户的搜索体验,还能为开发者提供更丰富的文本处理手段。在实际应用中,还需要根据具体的业务需求和技术环境进行相应的...

    lucence完整项目

    总之,"lucence 完整项目" 提供了一个实践 Lucene 全文搜索功能的实例,对于想要深入了解 Lucene 工作原理和应用的开发者来说,这是一个非常宝贵的参考资料。通过这个项目,你可以逐步掌握 Lucene 的关键技术和最佳...

    Lucence的资料和例子

    **正文** 《Lucene:深度探索与实例解析...通过深入学习这些资料,开发者可以全面了解Lucene的工作原理,掌握全文检索技术,并具备在实际项目中应用Lucene的能力。无论是初学者还是有经验的开发者,都能从中受益匪浅。

    lucence实战

    通过学习和实践这个压缩包提供的内容,开发者可以深入了解Lucene的工作机制,并能够构建自己的全文搜索引擎。这不仅有助于提升开发者的技能,也为企业级应用开发提供了强大的搜索功能支持。无论是在网站、数据库、...

    lucence+xml

    首先,让我们了解Lucene。Lucene是Apache软件基金会的一个开源项目,它是一个高性能、全文本搜索库,提供了强大的文本分析和索引功能。在公交系统中,Lucene可以用于构建一个高效的查询引擎,帮助乘客快速找到所需的...

    Lucence搜索

    在本篇文章中,我们将深入探讨Lucene的基本概念,以及如何通过一个简单的Lucene搜索技术Demo,了解其关键字搜索和网页爬虫的应用。 ### Lucene核心概念 1. **索引**:在Lucene中,数据首先被转化为索引。索引是一...

    学习lucence的一个比较好的手册

    《Lucene学习手册》是一本深入浅出介绍Apache Lucene的宝贵资源,它为开发者提供了全面了解和掌握这个全文搜索引擎库的途径。Lucene是一个强大的、高性能的、开放源码的Java库,允许开发人员轻松地在应用程序中实现...

    IKAnalyzer fro lucence5.x

    为了更好地利用这个工具,你需要了解如何配置词典、设置停用词、以及如何在Lucene的索引和查询过程中调用IKAnalyzer。同时,理解IKAnalyzer的分词原理和优化技巧也是提高系统性能的关键。总的来说,IKAnalyzer是一个...

    Lucence创建索引

    在建立索引的过程中,有几个关键的类需要了解: - **IndexWriter** - **Document** - **Field** ##### 1. IndexWriter - **功能**:执行索引写操作,并控制索引建立过程中的各种参数。 - **参数**: - **索引...

    Lucence3.0学习

    总结来说,Lucene 3.0是一个强大的全文检索库,通过深入学习其源码,我们可以了解到其索引和搜索的核心原理,而配合相关工具,如Luke和Nutch,能够更高效地管理和调试索引,进一步提升搜索质量。同时,掌握实战技巧...

    Lius.jar能运行的lucence查看索引的小工具

    通过这个工具,我们可以深入了解Lucene索引的工作机制,包括文档的存储方式、分词过程以及倒排索引的构建原理。 使用Lius.jar非常简单,只需将该工具下载到本地,然后运行对应的jar文件即可。在Lius.jar中,你可以...

    net.rar_Lucence图像检索_图像检索 java

    描述提到“基于Lucence的图像检索的最新版本的开源源码”,这暗示我们能够获得这个项目的完整源代码,意味着我们可以深入理解其内部工作原理,对其进行定制或进一步开发。开源代码通常是社区驱动的,因此可能有活跃...

    传智播客lucence内部资料

    总的来说,传智播客的Lucene内部资料是一份全面的学习资源,它将引导学习者了解Lucene的基本概念,掌握索引构建与查询处理的细节,以及如何利用Lucene开发实际的信息检索系统。通过深入学习和实践,开发者能够充分...

    lucence例子,类似百度搜索

    首先,我们需要了解Lucene的基本工作原理。Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。每个文档代表你要索引的信息单元,可以包含多个字段,如标题、内容等。索引过程...

    全文检索lucence3.5+IKAnalzers3.5示例

    首先,我们要了解Lucene的基本概念。Lucene的核心功能包括文档索引、查询解析、评分和结果排序等。在3.5版本中,它提供了更稳定和高效的性能,增强了对多线程和分布式环境的支持。 1. **文档索引**:Lucene通过索引...

    lucene4.7 开发简单实例

    此外,我们还将了解如何使用不同的分词器,以适应不同场景的需求。 首先,让我们从基础开始,了解如何创建索引。在Lucene中,我们首先需要定义一个文档(Document)对象,用于存储我们要索引的信息。接着,我们可以...

Global site tag (gtag.js) - Google Analytics