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...
分享到:
相关推荐
本资源用于快速了解lucence的工作原理,快速搭建一个体验环境.打开lucence的学习入门.
lucene.net好多人都知道的吧,反正我是最近才好好的看了一下,别笑我拿历史当新闻哦,不太了解Lucence的朋友先听我说两句哦。Lucene的知识主要分为索引、搜索、分析器、性能优化几个部分。索引和搜索没啥可说的,...
Lucence的描述以及重要的几个方法详解说明,Lucence的应用以及实例
lucence例子
一头扎进 lucence 视频教程 java1234出品 一头扎进 lucence 视频教程 java1234出品
lucence学习笔记,中文的,适用于初学者学习,知识点案例较多。
学习Lucence和Hadoop的资料,Lucence in Action 和 Hadoop权威指南。
lucence教程,通过这份文档可以学习lucence的相关知识
lucence文档,非常有参考价值,用于lucence开发使用,搜索引擎
lucence 索引合并 资料汇总 值得参考
springboot整合lucence完整代码
lucence全文检索引擎 开发文档,视频教程,开发jar包。
最近要使用lucence,所以写了一个查了一下文档,根据博客上的代码写了一个小demo,希望能对需要的人有所帮助,带jar文件 直接放到eclipse 就可运行了
Lucence的高亮显示是通过给关键字加html标签实现高亮显示的,这种加了html标签的文本同样可以在Android的WebView中实现高亮显示。
示例中使用了最新版lucence,庖丁解牛分词器,庖丁解牛字典, lucence分页,为数据库表创建索引,为文件创建索引,搜索示例等整套的lucence使用方法,入门必须。
lucence资源技术,4.10以后的版本,建立索引,删除索引,读取OFFICE功能等。
学习lucence的一个比较好的手册 令附 lucence.jar
PHP运用java的lucence搜索引擎
lucence.net多字段查询。建立索引,组合查询等等
IKAnalyzer fro lucence5.x基于最新版IKAnalyzer修改,兼容lucence5.x版本