你是否正在寻找关于lucene的内容?让我把最有价值的东西奉献给你:

« 从 汉化 到 国际化 | (回到Blog入口)|(回到首页) | Resin学习笔记 »
lucene是一个基于Java的全文索引工具包。
另外,如果是在选择全文引擎,现在也许是试试Sphinx的时候了:相比lucene速度更快,有中文分词的支持,而且内置了对简单的分布式检索的支持;
基于Java的全文索引/检索引擎——lucene
lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实会jakarta的一个子项目:
已经有很多Java项目都使用了lucene作为其后台的全文索引引擎,比较著名的有:
对于中文用户来说,最关心的问题是其是否支持中文的全文检索。但通过后面对于Lucene的结构的介绍,你会了解到由于lucene良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。
全文检索的实现机制
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%"
通常比较厚的书籍后面常常附关键词索引表(比如:北京:12, 34页, 上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。而索引能够大大提高查询的速度原理也是一样,想像一下通过书后面的索引查找的速度要比一页一页地翻内容高多少倍……而索引之所以效率高,另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。
由于索引不是为全文索引设计的,因此,使用like "%keyword%"时,索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。
所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-8070-1.html
赤裸裸千里万里挑衅和侵犯别国做出愚蠢行为是要付出代价的