Lucene :基于 Java 的全文检索
引擎简介
赵力
Lucene 和数据库
Lucene 的 API 接口设计的比较通用,输入输出结构都很像数
据库的表 ==> 记录 ==> 字段,所以很多传统的应用的文件、
数据库等都可以比较方便的映射到 Lucene 的存储结构 / 接
口中。总体上看:可以先把 Lucene 当成一个支持全文索引
的数据库系统。
Lucene 和数据库
Lucene 中最基本的概念有: index, document, term.
Index 包含一个 document 序列( document 的有序集合)。
1 一个 document 是一个 field 序列( field 的有序集合)
2 一个 field 是一个 term 的命名序列。
3 一个 term 是一个字符串。
在两个不同 field 中的同一个字符串被认为是不同的 term 。
因此 terms 是用一个字符串对来表示,第一个字符串的名字是
field ,第二个字符串的名字是 text.
Lucene 和数据库
Lucene 数据库
索引数据源: doc(field1,field2...) doc(field1,field
2...)
\ 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
Document :一个需要进行索引的“单元”
一个 Document 由多个字段组成
Record :记录,包含多个字段
Field :字段 Field :字段
Hits :查询结果集,由匹配的 Document 组成 RecordSet :查询结果集,由多个 Record 组
成
全文检索
通常比较厚的书籍后面常常附关键词索引表(比如:北京:
12, 34 页,上海: 3,77 页……),它能够帮助读者比较快
地找到相关内容的页码。而数据库索引能够大大提高查询的
速度原理也是一样,想像一下通过书后面的索引查找的速度
要比一页一页地翻内容高多少倍……而索引之所以效率高,
另外一个原因是它是排好序的。对于检索系统来说
核心是一个排序问题。