微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 主题搜索引擎的探究

主题搜索引擎的探究

时间:06-05 来源:互联网 点击:

搜索引擎是本上世纪90年代兴起的信息检索技术,经过十多年的发展,它已经渗透到了人们生活的各个领域。然而,传统的搜索引擎,也即通用搜索引擎,考虑了所有人的需求,即不管用户是希望找计算机论文方面的信息还是要找篮球运动的信息都一致对待,这样的搜索引擎需要耗费巨大的资源而速度较慢。并且,由于通用搜索引擎所面向的领域太广泛,某些利于用户提高检索精度和查全率的技术,比如自动分类,在其中的应用效果不理想。

在Lucene API的基础上开发面向主题的搜索引擎[1]是一种有效、低成本的选择,因为Lucene全文数据库采用倒排文件索引技术[2],所以查询速度优于关系型数据库,而且可以免费下载。基于Lucene的优势已有很多企业将其应用到自己的搜索引擎中,如Eclipse开发环境的内部搜索引擎就是用Lucene构建的。但由于Lucene自带的中文分词只能将中文切成单字不能实现词语的切分,因此,符合需求的中文分词器有待人们去开发,并将其加入中文分词模块来实现更高效的检索。

1 全文检索引擎Lucene

1.1 Lucene简介

Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

Lucene是一个高性能、可伸缩的信息搜索(IR)库。它使你可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的成熟的、免费的开源项目,是着名的ApacheJakarta大家庭的一员,并且基于在Apache软件许可[ASF,License].同样,Lucene是当前与近几年内非常流行的免费的Java信息搜索(IR)库。

1.2 Lucene系统结构

Lucene系统结构[2]如图1所示。从图1中可以看到,Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中,直接操作索引文件的索引核心又是系统的重点。Lucene将所有源码分为7个模块(在Java语言中以包来表示),各个模块所表示的系统部分见图1.需要说明的是:org.apache.lucene.queryPaser是org.apache.lucene.search的语法解析器,不被系统之外实际调用,因此没有当作对外接口看待。从面向对象的观点来考虑,Lucene应用了最基本的一条程序设计准则:引入额外的抽象层以降低耦合性。首先,引入对索引文件的操作org.apache.lucene.STore的封装,然后将索引部分的实现建立在org.apache.lucene.index之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口org.apache.lucene.search及org.apache.lucene.analysis.

Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。

1.3 Lucene程序运行机制

Lucene系统功能强大,实现复杂,但从根本上主要包括2个主要功能:(1)建立索引库[4],也就是将待索引的纯文本内容经切分词后索引入库;(2)检索索引库,即根据查询条件从索引库中找出符合条件的文档。

在研究建立索引库时首先要知道如图2所示的Lucene索引机制的架构。

从图2可以看出,Lucene索引过程分为3个主要操作阶段:将数据转换成文本;分析文本;将分析过的文本保存到索引库中。首先,Lucene使用各种解析器对各种不同类型的文档进行解析,如对于HTML文档,HTML解析器会做一些预处理的工作,过滤文档中的HTML标签等,然后输出文本内容,接着Lucene的分词器从文本内容中提取出索引项以及相关信息。

检索索引库的运行逻辑如下:

(1)输入查询条件,如用户希望查询到含有词编程和入门但不含词Java的记录,则输入条件为编程+入门-Java;查询条件输入搜索器(lucene.search),搜索器里有1个查询解析器(lucene.queryParser),搜索器调用这个查询解析器来解析查询条件。

(2)查询条件编程+入门-Java被传送到查询解析器中,解析器将对编程+入门-Java进行分析,首先分析器解析字符串的连接符,即加号和减号,然后调用语言解析器(lucene.analysis)对每个词进行切词,一般英文将按空格来切词,最后得到的查询条件表示为:编程AND入门AND NOTJava.

(3)查询器根据查询条件检索事先已建立好的索

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top