预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
韩祥斌-Lucene3.6.1入门指南PAGE\*MERGEFORMAT4Lucene3.6.1入门指南简介Lucene是一个Java全文搜索,不是一个完整的搜索应用,而是一个代码库和API,可以方便地为应用提供搜索功能。实际上Lucene的功能就是将开发人员提供的若干个字符串建立索引,然后提供一个全文搜索服务,用户将搜索的关键词提供给搜索服务,搜索服务告诉用户关键词出现的各字符串。基本流程可见,lucene包含两部分:建立索引和搜索服务。建立索引是将源(本质是字符串)写入索引或者将源从索引中删除;进行搜索是向用户提供全文搜索服务,用户可以通过关键词定位源。建立索引的流程使用analyzer处理源字符串,包括:分词,即分成一个个单词;去除stopword(可选)。将源中的有效信息以不同Field的形式加入Document中,并把Document加入索引,从而在索引中记录有效的Field。将索引写入存储器(内存或磁盘)。检索的流程用户提供搜索关键词,经过analyzer处理。对处理后的关键词搜索索引找出对应的Document。用户根据需要从找到的Document中提取需要的Field。基本概念AnalyzerAnalyzer的作用是分词,并去除字符串中的无效词语。分词的目的是把字符串按某种语义规则划分为若干个词。英文中比较容易实现分词,因为英文本身就是以单词为单位,已经用空格分开;而中文则必须以某种方法将连成一片的句子划分成一个个词。无效词语,如英文中的“of”、“the”和中文中的“的”、“地”等,这些词语在文章中大量出现,但是本身不包含关键信息,去掉有利于缩小索引文件、提高命中率和执行效率。Document用户提供的源可以是文本文件、字符串或者数据库表中的一条记录等。一个源字符串经过索引之后,以一个Document的形式存储在索引文件中。搜索服务的结果也是以Document列表的形式返回。Field一个Document可以包含多个信息域,如一篇文章可以包含“标题”、“正文”、“最后修改时间”等信息域,这些信息域以Field的形式保存在Document中。Field有两个属性:存储和索引。存储属性可以控制是否对这个Field进行存储;索引属性可以控制是否对该Field进行索引。这似乎多此一举,但事实上对这两个属性的正确组合很重要,下面举例说明:一篇文章需要对标题和正文进行全文搜索,所以把这两个Field的索引属性设置为真;同时希望能直接从搜索结果中提取文章标题,所以把标题Field的存储属性设置为真;但是正文Field太大了,为了缩小索引文件,将正文Field的存储属性设置为假,需要访问时再直接读取文件正文;希望能从搜索结果中提取最后修改时间,单不需要对它进行搜索,所以把最后修改时间Field的存储属性设置为真,索引属性设置为假。Field的两个属性禁止全为假的情况,因为这对建立索引没有意义。segment建立索引时,并不是每个document都马上添加到同一个索引文件,它们首先被写入到不同的小文件,然后再合并成一个大索引文件,每个小文件都是一个segment。termterm表示文档的一个词,是搜索的最小单位。term由两部分组成:所表示的词语和这个词语所出现的field。tokentoken是term的一次出现,它包含trem文本和相应的起止偏移,以及一个类型字符串。一句话中可以出现多次相同的词语,它们都用同一个term表示,但是用不同的token,每个token标记该词语出现的位置。Lucene的组成结构Lucene包括core和sandbox两部分,其中core是lucene的核心,sandbox包含了一些附加功能,如highlighter、各种分析器等。Lucenecore包含8个包:analysis,collation,document,index,queryParser,search,store,util。analysis包Analysis提供自带的各种Analyzer,如按空白字符分词的WhitespaceAnalyzer,添加了stopword过滤的StopAnalyzer,支持中文分词的SmartChineseAnalyzer,以及最常用的StandardAnalyzer。collation包包含collationKeyFilter和collationKeyAnalyzer两个相同功能的类,将所有token转换为CollationKey,并将CollationKey与IndexableBinaryStringTools一起编码存储为一个term。document包document包中是Document相关