基于.net构建海量非结构文本与用户行为协同的搜索引擎研究

李德华 巩宇 张自锋 杨小龙
摘 要:从全文检索的原理出发,介绍搜索引擎和全文检索的索引原理和机制,通过实例讲述如何创建lucene索引、如何管理索引。通过索引的目录结构和内容结构的分析,讨论了基于.net平台如何使用lucene的索引功能创建搜索引擎。目前多数项目采用Java、C++等为开发语言,构建索引器。本文提出基于.net的索引器的设计实例分析,解决了在.net开发环境下,海量非结构文本搜索的问题。結合用户行为理论优化搜索引擎的用户体验,增加用户粘性,提高用户的忠诚度。
关键词:搜索引擎;索引器;.net;Lucene;用户行为
中图分类号:TP315 文献标识码:A
Abstract:Starting from the principle of full-text search,this paper introduces the indexing principle and mechanism of search engine and full-text search.It describes how to create a lucene index and how to manage the index through an example.Through the analysis of the index's directory structure and content structure,we discussed how to use lucene's indexing function to create a search engine based on .net platform.At present,most projects use Java,C++,etc.as the development language and build indexers.This paper presents a design example analysis of a net-based indexer and solves the problem of massive unstructured text search under .net development environment.Combining user behavior theory to optimize the user experience of search engines,increase user stickiness and increase user loyalty.
Keywords:search engine;indexer; .net;Lucene;user behavior
1 引言(Introduction)
搜索引擎技术发展迅速,各大公司相继推出自己的产品,包括百度搜索、360搜搜、搜狗搜索、google搜索、bing搜索等,各个产品之间竞争激烈,因此如何提高用户的体验,保证产品的热度,在竞争中取得更多的市场分额,这成为了许多专家和学者研究的焦点。许多专家经过研究,提出结合用户的行为理论和用户行为属性,优化数据的索引操作(Indexing),把用户的行为优化到搜索引擎索引器中。
2 搜索引擎与用户行为理论(Search engine and
user behavior theory)
搜索引擎是一项以互联网信息为基础,进行信息资源的搜集、发现、理解、提取和处理的系统工程,为用户提供信息搜索服务,并对信息进行基于多种算法的理解和解析,为用户提供个性化的信息服务,是人们获取信息的工具,搜索引擎已经成为人们进入Internet门户。用户行为理论是指用户获取、使用相关的物品或服务,所产生的各项活动,用户对使用对象的认知和使用,有一个完整的过程。那么用户行为理论与搜索引擎研究的结合,具体可以分为几个阶段,认知、熟悉、试用、使用、忠诚。具体内容如表1。
搜索引擎系统一般由搜索器(Crawler)、索引器(Indexer)、检索器(Searcher)和用户接口(UI,User Interface)四个部分组成。本文主要从索引器入手,结合用户行为理论和用户行为参考指标,进行索引的优化。
2.1 基于用户属性优化索引器
索引器对获取的网页进行深度分析与挖掘,提取其中重要的信息,包括网页的标题、关键词、生成时间等。建立网页之间的相关关系,生成倒排文档等。在建设索引器过程中,为了提高用户的满意度,将结合用户的行为理论,从用户角度出发,提取更多与用户相关的属性优化索引内容。其中包括网页的地址属性、时间属性、人物属性等。
索引模块由信息提取模块、中文分词模块、网页提纯模块和索引模块组成。按照一定的方法对网页文档进行索引,形成索引数据库。首先是提取网页的纯文本页面,去除其中的HTML页面,然后采用分词算法,实现文本内容的切分,提取网页的关键属性,其效果如图1所示。
根据文本的内容,提取其中的关键属性,结合用户的行为理论,优化索引器。当用户登录搜索界面的时候,系统获取用户的IP,进而获得用户的地址,那么用户的搜索结果,会自动根据地址的匹配,优化展示的顺序。同时根据用户的浏览结果推测用户的喜好,进而优化搜索结果的排序。
2.2 索引基本结构
以Lucene为例介绍索引的基本结构,Lucene作为一个优秀的全文检索引擎,其系统结构具有强烈的面向对象特征。Lucene是一个建立索引的框架,在这个框架下用户可以根据需要进行大量的二次开发,提高用户行为相关的各种属性的权重。Lucene定义了一个与平台无关的索引文件格式,建立用户行为相关的索引文件。
以下将讨论Lucene系统的结构组织,并给出系统结构与源码组织图,如图2所示。
说明:Lucene的最初版本是Java,经过很多技术达人的努力,开放出了的基于.net的索引器。
处理原始网页的目的是去除网页中无关的HTML标签,只取出其中有用的信息。把HtmlParser引用到搜索引擎项目中,效果如图5所示。
索引器的核心代码文件ClassIndex.cs,代码如下:
nSearch.FS.oneHtmDat newDat=nSearch.FS.ClassFSMD.GetOneDat(i);
//生成标题
nSearch.DebugShow.ClassDebugShow.WriteLineF("测试newDat:"+newDat.url.ToString()+"信息");
WebRequest geturlcontent=WebRequest.Create(newDat.url);
WebResponse getresponse=geturlcontent.GetResponse();
Stream stream1=getresponse.GetResponseStream();
StreamReader read=new StreamReader(stream1,
Encoding.GetEncoding("gb2312"));
string readcontent=read.ReadToEnd();
Match TitleMatch=Regex.Match(readcontent,"([^<]*)",RegexOptions.IgnoreCase|RegexOptions.Multiline);
string ti=TitleMatch.Groups[1].Value;
read.Dispose();
read.Close();
nSearch.DebugShow.ClassDebugShow.WriteLineF("标题"+ti.ToString());
//生成body
System.IO.Stream stream2=new
以上实现了网页代码中标题和网页主体的提取。
3.3 分词设计
中文分词[8](Chinese Word Segmentation)指的是根据一定的算法对文章中的句子、词语进行识别,切分成多个词语单元。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,句子中词语之间以空格进行区分,而中文只是字、句和段能通过明显的分界符来简单划界,词之间是没有明显划分的,虽然英文也同样存在短语的划分问题,在词的划分方面中文比之英文要复杂的多、困难的多,另外中文也有一词多意的现象,因此必须采用多种不停的算法,包括贝叶斯分类、神经网络识别等。
在提取了标题和网页内容后,必须利用分词系统进行词语的切分,然后才能用于建立倒排文档。提供分词工具的单位非常之多,有知名的研究机构也有互联网公司,根据项目的需要选择好的开发工具非常重要,本文根据需要,选择了中科院开发的c#版本分词系统,而放弃了Lucene提供的中文分词工具[9](全称是Lucene.Net.Analysis.China.dll),因为在使用Lucene的分词工具过程中,发现Lucene.Net.Analysis分词效果一般,并且已经被封装,相比中科院的分词系统缺乏灵活性,中科院的分词系统全开源,可以进行修改,特别是词典可以自由进行修改。本文采用中科院的分词系统,词典部分使用的是简化版本[10]。在分词的过程中,结合用户的行为理论,把用户相关的用户属性进行合理切分,并且作为建立倒排文档的关键词。
把分词系统导入到项目中的nSearch.Index文件中为分词系统做好准备,如图6所示。
reference library
在ClassIndex.cs建立分词的分析器,代码如下所示:
//定义分析器
Analyzer KTDAnalyzer=new KTDictSegAnalyzer(wordPath);
//PerFieldAnalyzerWrapper可以对不同的Field进行不同的分析
PerFieldAnalyzerWrapper wrapper=new PerFieldAnalyzerWrapper(KTDAnalyzer);
wrapper.AddAnalyzer("ID",KTDAnalyzer);
wrapper.AddAnalyzer("News_Url",KTDAnalyzer);
wrapper.AddAnalyzer("News_Date",KTDAnalyzer);
//创建IndexWriter
writer=new IndexWriter(indexDirectory,wrapper,true);
至此建立索引的准备工作基本完成。
3.4 索引创建
当所有的原始网页都处理好之后,就可以建立相应的索引,本实例为索引库建立了一个库E:\DATATEST\Index,用來保存全部的索引文件。索引建立流程[11]如图7所示。
首先将Lucene导入项目,效果如图8所示。
在引用了Lucene后在ClassIndex.cs中即可建立document,索引建立后会写到硬盘中,具体代码如下:
Lucene.Net.Documents.Document doc=new Lucene.Net.Documents.Document();
doc.Add(new Field("ID",i.ToString() ?? "",Field.Store.YES,Field.Index.UN_TOKENIZED));
doc.Add(new Field("News_Title",ti,Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.NO));//标题A
doc.Add(new Field("News_Body",body,Field.Store.YES,Field.Index.TOKENIZED,Field.TermVector.NO));//简要显示C
doc.Add(new Field("News_Url",newDat.url,Field.Store.YES,Field.Index.NO,Field.TermVector.NO));//url
doc.Add(new Field("News_Date",time,Field.Store.YES,Field.Index.NO,Field.TermVector.NO));//
以上就是一个索引建立的完整过程。
随着信息技术的发展和计算机深入广泛的应用,人们对全文检索的动态性要求变得十分的迫切,并且进一步还要求根据用户的需求进行个性化。应该说是全文索引的动态性是未来的一个必然的趋势。实现索引的动态更新的一个很大的难题在于更新时间复杂度非线性。动态全文数据库索引的创建效率非常高。由于倒排表模型在索引的创建效率上高于其他的模型,且应用也较为成熟,因此本设计主要也是使用倒排表模型的动态索引创建算法。在本设计中采用了一种准动态全文索引的更新的策略。
4 结论(Conclusion)
研究了全文检索索引器中涉及的几个关键技术,其中有中文分词技术,索引结构形式及其工作原理。建立了一个基于中文检索的索引器系统。在本文中系统的讨论了全文检索索引库所涉及的各种技术。在融合用户行为理论的要求下,必须对系统进行的各个模块进行深度优化,提升用户的满意度。在实际的应用中内存分配、分页管理、文件系统管理、虚拟内存技术、内存映射、cache管理等各种相关的技术都提高索引创建和更新的效率[12]。如何在这些方面对索引库进行进一步的优化,将是未来研究的工作和挑战。利用本文设计的索引器,可以应用于海量文本数据库中,建立资料的索引,提供快速的查找功能。
参考文献(References)
[1] 贾捷.基于MVC+Lucene.Net框架下的垂直搜索引擎研究与设计[D].吉林大学,2015.
[2] 孙艺珍,季小迪,张京涛.基于.Net的全文搜索引擎设计与实现[J].西安科技大学学报,2014,34(06):701-706.
[3] 王莉.基于ASP.NET搜索引擎模型的实现[J].计算机与现代化,2011(11):199-201;205.
[4] 张文生,孙永忠.ASP.NET网站搜索引擎优化方法研究[J].信息技术,2010,34(03):146-148.
[5] 蔡建超,郭一平,王亮.基于Lucene.Net校园网搜索引擎的设计与实现[U].计算机技术与发展,2006(11):73-80.
[6] 阴爱英.基于线程并行计算的Apriori算法[J].西安科技大学学报,2014,34(1):71-74.
[7] 戚艳军,龚尚福.用户角色的XML动态加密方法研究[J].西安科技大学学报,2012,32(1):101-106.
[8] 刘磊安,符志强.基于Lucene.net网络爬虫的设计与实现[J].电脑知识与设计,2010,6(8):1870-1878.
[9] 马俊.基于正则表达式技术的信息搜集引擎应用研究[D].成都:电子科技大学,2006.
[10] Otis Gospodnetic,Erik Hatcher.Lucene in action[M]Beijing: Publishing House of Electronics Industry,2007:100-105.
[11] 武毅.基于Lucene .Net的全文检索研究与应用[D].长沙:国防科学技术大学,2011.
[12] Chih-Hao Tasi.MMSEG:a word identification system formandarin Chinese text based on two variants of the maximum matching algorithm[OL].http://technology.chtsai.org/mmseg/,2013.
作者简介:
李德華(1985-),男,硕士,工程师.研究领域:电网调峰调频技术,企业信息化.
巩 宇(1982-),男,硕士,工程师.研究领域:电网调峰调频技术,企业信息化.
张自锋(1988-),男,硕士,工程师.研究领域:信息技术情报,企业信息化.
杨小龙(1982-),男,硕士,工程师.研究领域:电网调峰调频技术,企业信息化.
相关文章!
  • 融合正向建模与反求计算的车用

    崔庆佳 周兵 吴晓建 李宁 曾凡沂<br />
    摘 要:针对减振器调试过程中工程师凭借经验调试耗时耗力等局限性,引入反求的思想,开展了

  • 浅谈高校多媒体教育技术的应用

    聂森摘要:在科学技术蓬勃发展的今天,我国教育领域改革之中也逐渐引用了先进技术,如多媒体技术、网络技术等,对于提高教育教学水平有很

  • 卫星天线过顶盲区时机分析

    晁宁+罗晓英+杨新龙<br />
    摘 要: 分析直角坐标框架结构平台和极坐标框架平台结构星载天线在各自盲区状态区域附近的发散问题。通过建