共计 1949 个字符,预计需要花费 5 分钟才能阅读完成。
1、基于 Java 的全文检索引擎的简介
Lucene 不是一个完整的全文检索应用,而是一个 java 语言写的全文检索引擎工具包,他可以很方便的嵌入到各种应用系统中实现信息的全文检索功能。
2、全文检索实现机制
Lucene 的 api 输入输出结构很想数据库的表、记录、字段,因此很多传统的应用中的文件、数据库可以很方便的把数据映射到 Lucene 的存储结构中,我们可以把 Lucene 当成一个支持全文索引的数据库系统。
下面我们比较一下 Lucene 和数据库
Lucene database
索引数据源 document(field1,field2….).. record(field1,field2…)..
| inder | sql:insert
lucene index database index
|search |select
Hits(docuemnt(field1,field2…)..) results(record(field1,field2…)..)
一个 document 有多个字段组成,是一个需要进行索引的单元,hits 查询结果集。
数据库索引能够大大的帮助我们提高查询的速度,而索引之所以相对查询起高校作用,原因就在于它是排好序的,对于检索系统来说核心是核心是一个排序问题。
数据的索引不是为全文索引设计的,所以在 sql 中使用 like % 进行模糊查询时,数据库的索引是不起作用的,对于需要对外提供高效服务的服务的服务器来说,这是个致命的危害。所以建立一个高效的检索系统的关键时建立一个与反向索引类似的机制,将数据源排序存储的同时,有另一个排好序的关键词列表,用于存储关键词和内容的映射关系。检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程,从而大大的提高了关键词查询到的效率,所以全文检索问题归结到第就是一个排序问题。
Lucene 最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制。
3、Lucene 与数据库的模糊查询的简单比较:
索引:Lucene 将数据源中的数据通过全文索引一一建立反向索引。数据库对于 like 模糊查询而言,在数据检索时索引根本用不了的。
结果输出:Lucene 通过特别的算法,将匹配度最高的前 100 条结果集输出,结果集是缓冲式的小批量读取。而数据库返回所有的结果集,在匹配条目多的时候,需要大量的内存存放这些临时结果集。
从上面可以总结出:Lucene 和 database 最大的不同的在于让与用户查询的数据匹配的前 100 条结果满足 98% 以上用户的需求。
4、Lucene 的创新之处
大部分的搜索引擎都是用 B 树来维护索引,索引的更新会导致大量的 io 操作,Lucene 在实现中对此稍微做了改进,不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些小索引文件合并到原先的大的索引文件中,这样在不影响检索效率的前提下,提高了索引的效率。
Lucene 的详细介绍 :请点这里
Lucene 的下载地址 :请点这里
基于 Lucene 多索引进行索引和搜索 http://www.linuxidc.com/Linux/2012-05/59757.htm
Lucene 实战 (第 2 版) 中文版 配套源代码 http://www.linuxidc.com/Linux/2013-10/91055.htm
Lucene 实战 (第 2 版) PDF 高清中文版 http://www.linuxidc.com/Linux/2013-10/91052.htm
使用 Lucene-Spatial 实现集成地理位置的全文检索 http://www.linuxidc.com/Linux/2012-02/53117.htm
Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a9 http://www.linuxidc.com/Linux/2012-02/53113.htm
Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a8 http://www.linuxidc.com/Linux/2012-02/53111.htm
Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a7 http://www.linuxidc.com/Linux/2012-02/53110.htm
Project 2-1: 配置 Lucene, 建立 WEB 查询系统 [Ubuntu 10.10] http://www.linuxidc.com/Linux/2010-11/30103.htm