基于golang的分布式全文检索系统研究与实现
【摘要】:近年来,随着城轨线网规模的扩大,城市轨道交通系统中每天产生的数据量也急剧增长,如何从日积月累的海量数据中快速地获取工作人员所需的信息成为一大挑战。全文检索不同于传统的数据库信息管理技术,其处理的对象是非结构化数据,用户可以通过内容关键字来检索相关的文档,从而高效,多维度的利用信息资源。互联网上蓬勃发展的搜索引擎其核心技术也是全文检索技术,但是出于企业商业信息的安全性等方面来考虑,在互联网上应用良好的搜索引擎比如谷歌、百度、bing等并不能直接应用于企业环境之中,因此需要针对特定的行业建设一套垂直领域的检索系统。本文以城轨线网为背景,针对单机检索系统在处理海量数据时出现的性能瓶颈问题,基于nginx、Flask、wukong等工具和框架,用golang语言设计了一套适用于城轨线网领域的分布式全文检索系统,重点研究了分布式全文检索系统中的字符串哈希算法、中文分词技术、权值问题。本文的主要工作如下:(1)对常用的字符串哈希算法进行了分析和对比后,根据系统应用场景哈希字符串长度短的特点,选用mumurhash3字符串哈希算法来实现分布式检索模型,用于解决单机检索系统性能上的瓶颈。(2)分析对比了几类常见的分词算法,并重点研究了基于统计的分词算法模型:隐马尔可夫模型和条件随机场模型,在此基础上实现了一种基于隐马尔科夫模型加字典的组合分词算法,实验结果表明该分词算法有着良好的切分性能和分词效果。(3)在上述研究的基础上,利用nginx作代理服务器,Flask作为web框架,wukong作为检索引擎,搭建了一套分布式全文检索系统。实验结果表明,该全文检索系统具有良好的性能,在检索方面有着较高的查全率和查准率,并且能够准确及时地为用户提供所需的结果。