2007-7-2
突然想学LUCENE了,不知为什么,就是想学了,为了防止半途而废,决定写读书笔记,大家监督。
(初学者写的,切记不可当教程看,不准的。本不想发在blog,但实在没时间整别的了,还是发了吧)
LUCENE
是什么?
Lucence 是一种全文检索工具,它按照一定的规则去创建文件索引,然后再按照一定的规则根据索引进行数据的查找,目的是提高查询速度(但为了创建索引也耗费了额外的存储空间)
以下是读书笔记,是根据ajax in action和征服ajax做的笔记。以备日后复习交流。
在写笔记之前其实已经看过ajax in action 了,但由于当时看的是英文版本并且2.0已经发布,所以没愿意做笔记;现在发现2.0的资料太少,不容易学习,还是决定先根据1.43来学习。毕竟自己还没达到那种没有资料就可以学习的水平…………,够用就好
今天看了征服ajax的前几章(第八章和第九章),感觉这两章主要是举了几个例子,由于以前接触过,马虎一看而过,因为真正的祥解是从第十章开始的。
这里大体总结一下lucence的机制,
用lecence进行全文检索,是通过两个步骤来完成的:创建索引和根据索引查询。仅此而已,简单吗? 听起来简单,做个测试例子也不难,但真正要用到项目中并产生作用就有些难度了,因为需要做很多的额外工作。以前用过trs,感觉他们实现的不错,但毕竟是收费的产品,还是自己能实现的好啊。
索引的创建
开始了,现在开始创建索引,没办法,不创建索引你怎么去根据索引去查询? 所以得从它开始啃了。
1
索引的建立过程
建立索引一般是经过下面几个步骤的:
A 提取数据:为啥子要提取数据?因为lucence没你想的那么聪明,什么样的格式都能读取出来,都能认识。看了征服ajax的第九章的例子,被索引的文件格式好像是txt的,就是说纯文本文件的东西可以读取出来,别的嘛,就得另说了阿.按照它的说法,得需要给每一种文档格式都写一中数据分析器(按照lucence的说法好像叫做Parser,也不知道好写不?)
写到这,好风忍不住想说两句,其实我们现在做的项目,其实大多数是从数据库里读取的数据并查询的,从文件里读取的还是少数吧?就算是从文件里读取数据的话,我们也可以用一些现有的工具去读取数据,如
poi
等。就是说,我们可以利用现有的工具去获取各种格式的数据(从数据库里读取数据也可以看作是一种格式,只不过是利用
jdbc
去读取哦)
就是说,如果lucence的Parser不好写或者根本就没这么个东西(我现在认为他是一个接口),我们可以去自己写,凡只需要返回纯文本数据就成了呗。写个接口,创建Paser类返回同样的数据就可以阿(好风模式学的不好,不知道做起来能不能这么简单)。
B 创建Document :
这个东西嘛,根据我现在的理解就相当于数据库里的一行,一条记录。
查询出的结果是以他为最小单位的好像。里面有既然是一行,那么就应该有列喽(或者叫字段),想起来了,Lucene中好像有个Field的东西;创建一个Document的时候需要创建一个或多个Field,Field可是有很多类型的,比如专门用来检索的,有的专门用来存储检索数据。在创建索引的时候,你就可以创建一个索引字段,再创建一个内容字段;在查询的时候,你就可以根据索引字段得到这一个Document,然后根据获取内容字段,就可以得到你想要的值啦!可以有多个索引字段和内容字段的。
C 分析并建索
将Document(包括Field)创建完毕之后,我们就需要建立一个IndexWriter对象,看名字就知道是用来创建索引的,指定好索引文件所在的位置以及创建索引用的分析器,就可以将Document写入索引了。就好比IndexWriter创建了一个数据库的表(索引文件),再向这个表里插入行数据(Document),这里分析器可以有不同的类型,咂用俺还不会…………