1 概述
随着移动互联网的出现和发展,海量动态数据的出现使得搜索引擎具有了很大的市场空间.移动终端软硬件技术的发展迅速,移动终端中存储的数据种类和数量以及终端 CPU 的计算能力都在不断增强,因此,研究移动终端上用户快速准确搜索数据将是未来的一个热点.
主流的搜索算法包括回溯算法、深度搜索与广度搜索、A* 算法[1,2].然而这些算法都比较旧,不适应于现时的大数据搜索问题.Lucene[3-5]是 apache 软件基金会中的一个源代码开放的全文检索引擎工具包子项目,它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了一个完整的查询引擎和索引引擎,以及文本分析引擎的一部分(包括英文与德文两种西方语言).作为一个开源项目,Lucene 出现后,开源社区引发了巨大的反响,也逐渐成为研究的重点.虽然 Lucene 有上述提到的多种优点,但对于移动终端而言,它具有一定的局限性.Lucene的源代码是用 JAVA 编译的,可移植性相对较差;由于Lucene 是建立在 PC 终端上的,它的搜索大而全面,但如果移植到移动终端上,会导致代码效率低下,速度不能满足用户需要.因此,本文的目标就是重新设计一个新的搜索引擎体系.
2 索引策略设计
对于本文设计的搜索引擎,索引策略主要是批量索引与增量索引相结合,批量索引是通过 SQL 数据库的事务功能,把先缓存于内存里的索引一次性写入外存,主要运用在初始化的时候,而增量索引就是不缓存索引项直接存入外存里,一般运用在有新的索引加入或者是一两条的索引更变上.
下面介绍一下批量索引的索引策略:我们会设定一个阈值,这个可以根据移动终端的一个硬件条件来设计,然后当缓存的索引项的数量达到了阈值后,就一次性存入外存里,同时,我们会设定一个时间限制,即使索引项数量没有达到阈值,但如果时间已经超过了我们所设定的限制后,也会存入外存,这样子既可以节省了资源的消耗,有能保证索引建立的效率.
索引策略的总体流程图如图 1.
3 索引策略设计
设计的引擎的查询策略主要为按匹配模式分阶段返回与定量分阶段返回相结合的模式.匹配模式分阶段返回的意思是,按照精确匹配模式和前缀匹配模式来分阶段的返回,精确匹配模式就是查找跟查询语句一模一样的关键字,而前缀匹配模式就是查找以查询语句为前缀的关键字.
定量分阶段返回的意思是,设定一个阈值,当搜索的结果超过这个阈值的时候,就返回一次结果.这样做的好处是,例如有些关键字的结果很多,如果需要等它所有结果都查找出来在一次返回,那样子会有两个缺点,一是可能需要等待一段时间,二是一次返回的结果太多,造成阅读不方便,而当使用定量分阶段返回以后,例如设定了一个阈值为 10,那样当他搜索了 10 个结果以后,就返回一次结果,这样既可以减少用户等待的时间,并且用户一次只需要看 10 个结果,减少了用户的阅读量,提升了用户体验.搜索引擎的搜索策略大体流程,如下流程图 2.
4 结束语
在计算机终端上,Lucene 有着优秀的框架架构,但是,移动终端有着它与计算机终端不一样的硬件特点,因而,Lucene 并不适合用于移动终端上.参照了 Lucene 优良的框架,重新设计了核心的索引策略与搜索策略,使其可以更加适应移动终端的硬件条件,让搜索引擎在一定的条件下能够更加有效率的查找用户需要的信息.