基于Lucene的图书全文搜索引擎

基于Lucene的图书全文搜索引擎

Baofeng Zhang@zju

转载请注明出处:

背景介绍

这是一个关于图书的多侧面,多粒度的搜索引擎。仿照“读秀”()那样的搜索方式和搜索结果呈现方式,可以根据书的一些基本属性进行关键字搜索,展现的时候还附加进行了搜索结果的统计,也可以看到相关的全文信息。多侧面,多粒度的搜索和展示都是为了给用户更好的体验,方便用户的各种搜索需求和阅读需求。

这个搜索引擎是我前段时间开发的,前后台都是由我一个人开发完成的,没有采用框架或者任何现成代码。现在也只是个可以看的demo,很多地方还需要很大的改善。下面我会介绍下采用的技术,数据的说明,功能说明和设计,开发过程中遇到的难点问题以及他的不足和改进。

主要技术

前台:采用的是html + css + javascript(包括jquery库)

后台:主要采用的是JSP和Struts2(Spring还没有使用),还有Ajax(jquery来实现)

搜索:采用lucene包完成索引的建立和查询,暂时用的是很老的2.0版本

切词:切词工具是je切词器,可能比较老,切词效果一般

数据说明

元数据

数据是1万多本的工程类图书(中途分类法中N字母及以后的那些类的图书)。每本书是一个文件夹,里面的txt目录内的所有.ok文件是OCR扫描得到的每一页的书的全文内容。

meta目录下的dc.xml文件里是书的基本信息和属性(书名,作者,id,出版时间等),Catalog.xml文件里是书的每一章及每一节的标题和页码信息。

索引

现在索引的大小是1G多。meta目录里的两个xml我都解析出来存在索引里,并对需要的部分进行切词(如书名要切词,出版时间就不切词,直接存在索引里)。txt目录下的是书的全文内容,我对所有的.ok进行读取并切词建立索引,但是文本本身不存索引,为了避免索引过大。在“设计实现”部分我会再具体说明索引的设计。

功能说明

现在的搜索都是精确匹配的搜索,即切词器切的是什么词,我就只能搜到完全一样的词,没有模糊匹配之类的搜索。而且只限于中文搜索,英文没有进行切词,不能进行搜索。

书名搜索

输入关键字,得到书名中带有该关键字的图书,在中间显示,现在的搜索结果是全部展示的,也可以设置只显示前10条。其实对搜索来说是一样的,总是返回所有符合的书的,所以这样对速度没有拖累。

作者搜索

输入作者全名,得到该作者的书。这个搜索不太好用,没有实现好,因为xml里的元数据的作者就很杂乱。

内容搜索

这是基于全文的检索。和之前不同的地方在于。在本书目录的部分出现了一些文字,这些文字是本书含有这个关键字的页里的第一个页里的内容。我好像截取了从关键字开始的后200个字,所以有的书没有显示出来,是因为之后可能没有200个字了,这个地方我处理的不是很好。

左栏多了一个“相关数目列表”,点击之后可以看到这本书里含有这个关键字的每一页的全文内容。并且也是有加亮的,也只是显示了前几百个字。

目录搜索

能检索到每本书中的所有章节目录里含有该搜索关键字的目录全文信息,显示在每本书下面。

左栏统计

左侧是对分类,出版时间,作者,出版社的统计。只显示top 5。

右栏结果

右侧是百度里前五条搜索结果。(直接爬了过来)

其他

当“出版时间”的统计结果多于五条时, 可以通过“展开”,“收起”动态选择查看全部或者前五条。

对于返回的记录总数和搜索时间,可以在搜索框下面看到。

其他还有分类浏览的功能,

是按照中图分类法来做的。只是这部分实现的不是很好,而且涉及到数据库,就不展示了,这里贴张图。会列出一级分类,二级分类,三级分类以及某一分类下的符合的图书。

设计实现

我尽量把设计实现介绍地简单,到位,因为过多的表述可能没有必要。

索引建立

以前我是个爱仰望天空的人,苍蓝的天空总是给我求生的勇气,

基于Lucene的图书全文搜索引擎

相关文章:

你感兴趣的文章:

标签云: