




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、石河子大学毕业论文(设计)选题指南信息科学与技术 学院 计科 专业 2010 年级指导教师曹传东职称系统分析师、高工填报时间2013-11-6课题名称使用Lucene和Solr进行位置感知搜索课题来源1科研题目 2生产现场 3自拟题目课题类型1论文型 2设计型 完成课题所需时间12周14周所需学生人数1实习(考察)地点论文(设计)地点本院网络工程实验室立题依据不管是通过支持GPS的智能手机查找距离最近的餐馆,还是通过社交站点查找附近的朋友,或是查看特定城市中运输某种商品的所有货车,越来越多的人和企业都会使用位置感知的搜索服务。那么,如何构建基于位置感知的搜索服务呢?好在Apache的开源搜索引
2、擎框架项目Lucene和搜索服务器Solr项目最近添加了空间位置功能。本课题拟研究如何通过Apache的Lucene和Solr、利用空间数据来改进搜索应用程序。为什么要使用搜索引擎而不是那些优秀(甚至免费)的GIS工具呢?原因是将应用程序构建在搜索引擎的基础上能够提供若干更为强大的功能,而这是其他传统途径所无法实现的。搜索引擎在合并结构化和非结构化数据方面非常强劲,它支持用户输入自由形式的查询,比如在搜索免费文本的描述和标题的同时,根据地理位置数据限制或修改结果。例如,旅游站点可实现如下的特性:让用户能够在几秒之内,找到某个城市内的所有提供24小时服务且配有舒适大床的四星级宾馆。有些搜索系统(
3、如Solr)还提供对结果集进行分类、突出显示和拼写检查等功能,从而能够帮助用户高效地查找与位置相关的那些结果。先来看看一个普通的全文搜索引擎都应当包含些什么。由于文本搜索引擎的工作流程一般分三步:从互联网抓取网页创建抓取网页的索引库从索引库中进行搜索。因此首先需要设计实现一个能访问网络的爬虫器程序,依据URL之间的关联性自动爬行整个互联网,并对爬行过的网页进行抓取收集。当网页被收集回来后,采用索引分析程序进行网页信息的分析,依据一定的相关度算法(如超链接算法)进行大量计算,创建倒排序的索引库。索引库建好后,用户就可以通过提供的查询界面提交关键词进行搜索,依据特定的排序算法返回搜索结果。因此,搜
4、索引擎并不是对互联网进行直接搜索,而是对已抓取网页索引库的搜索,这也是能快速返回搜索结果的原因,索引在其中扮演了最为重要的角色,索引算法的效率直接影响搜索引擎的效率,是评测搜索引擎是否高效的关键因素。网页爬行器、索引器、查询器共同构成了文本搜索引擎的重要组成单元。但是,针对特定的语言,如中文、日文、韩文等,并不像英文那样可简单地识别出关键词来(因为英语的一句话是用空格分割词语的),因此,在索引器创建索引之前,以及查询器处理用户输入的关键词时,还需要分词器对某种语言的文本进行分词。一般情况下,分词器将一段文本拆分成多个词后,还需要进一步进行过滤处理,如去掉一些敏感词、转换大小写和单复数等,也就是
5、说,除了上面所说的3个关键组件之外,由分词器和过滤器一起构成的所谓文本分析器,也是搜索引擎应当包含的一个重要组件。使用开源搜索引擎项目实现上面的基本组件,不仅可以大大缩短构建搜索应用服务器的周期,并可根据应用需求,进一步构建符合特定需求的搜索引擎系统。开放源代码的搜索引擎可为用户提供更大的透明性,开放的源代码、公开的排序算法、随意的可定制性,相比于商业搜索引擎而言,更为开发者和用户所需要。由于目前国内外已经有一些开放源代码的搜索引擎项目,主要集在中搜索引擎开发工具包与架构、Web搜索引擎、文件搜索引擎几个方面,因此,本课题将采用当前一个比较流行且相对比较成熟的搜索引擎开源项目Lucene。Lu
6、cene可以说是目前最为流行的开放源代码全文搜索引擎工具包,隶属于Apache基金会,由资深全文索引/检索专家Doug Cutting所发起,并以其妻子的中间名作为项目的名称,放在SourceForge的网站上提供下载。2001年9月,Lucene作为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。随着每个版本的发布,这个项目得到了明显的增强,目前Lucene的最新版本为。基于Lucene在索引及搜索方面的优秀表现,虽然由Java编写的Lucene具有天生的跨平台性,但仍被改编为许多其他语言的版本:Python(PyLucene)、C+(CLucene)、.Net
7、(Lucenenet)等。Lucene不是一个具有完整特征的搜索应用程序,而是一个全文搜索引擎的架构,提供了完整的查询引擎和索引引擎,以及部分的文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便其在目标系统中实现全文检索的功能,或者是以此为基础,建立起完整的全文检索引擎。因此,同其他开源搜索引擎相比,Lucene具有非常好的架构,能够方便地在其基础上进行研究与开发,添加新功能或者开发新系统。尽管Lucene本身只支持文本文件及少量语种的索引,并且不具备爬虫功能,但这又恰是Lucene的魅力所在,通过Lucene提供的丰富接口,我们可以根据
8、自身的需要,在其上添加具体语言的分词器,针对具体文档的文本分析器等,而这些具体的功能实现,都可以借助于一些已有的相关开源软件项目、甚至是商业软件来完成,这也保证了Lucene在索引及搜索方面的专注性。目前,通过在Lucene的基础上加入爬行器、文本分析器等也形成了一些新的开源项目,如Heritrix、Nutch、Solr等。并且Lucene的索引数据结构已经成了一种事实上的标准,为许多搜索引擎所采用。例如,Apache软件基金会的网站就使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse的2.1版本中,也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件We
9、b Sphere中也采用了Lucene。Lucene的架构和工作流程如图2所示,图中,创建索引的过程分为下述4个主要的步骤:(1) 有一系列被索引文件(这里是Web爬虫器抓取下载的一系列结果文件)(2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。(3) 经过索引创建形成词典和反向索引表(倒排表)。(4) 通过索引存储将索引写入硬盘。查询的过程为:(a) 用户输入查询语句。(b) 对查询语句经过语法分析和语言分析处理得到一系列词(Term)。(c) 通过语法分析得到一个查询树。(d) 通过索引存储将索引读入到内存。(e) 利用查询树搜索索引,从而得到每个词(Term)的文档链表,
10、对文档链表进行交,差,并得到结果文档。(f) 将搜索到的结果文档对查询的相关性进行排序。(g) 返回查询结果给用户。图2 Lucene的架构和工作流程图对应于图2的全文检索流程的Lucene实现的包结构如图3所示,其中: Lucene的analysis模块主要负责词法分析及语言处理而形成Term。 Lucene的index模块主要负责索引的创建,里面有IndexWriter。 Lucene的store模块主要负责索引的读写。 Lucene的QueryParser主要负责语法分析。 Lucene的search模块主要负责对索引的搜索。 Lucene的similarity模块主要负责对相关性打分的
11、实现。基于Lucene的Java编码文件中共有7个包需要导入:analysis,document,index,queryParser,search,store,util。图3 Lucene的实现包结构Apache Solr则是一个使用Lucene的上述优秀的面向对象的体系架构、通过HTTP来提供搜索、分类等功能的搜索服务器。尽管Solr是基于Lucene的,但Solr采用Java5开发,同时对其进行了重要扩展,提供了比Lucene更为丰富的查询语言,同时实现了高性能、可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款支持群集技术的更为优秀的全文搜索引擎。文档通过Ht
12、tp利用XML加到一个搜索集合中。查询该集合也是通过http收到一个XML/JSON响应来实现。Solr支持高效、灵活的缓存功能和垂直搜索功能,可高亮显示搜索结果,支持通过索引复制来提高可用性,同时提供一套强大Data Schema来定义字段,类型和设置文本分析。借助Lucene在表达用户查询方面的丰富功能,Solr通过应用其多种对空间搜索非常重要的过滤器机制来实现限制空间范围的查询条件。换言之,Lucene和Solr的范围查询和范围过滤器是实现限制空间的关键机制。在范围查询(或过滤器)中,用户声明需要将所有搜索到的文档限制在使用自然排序的两个值之间。例如:通常使用范围查询来查找发生在过去一年
13、或上一个月的所有文档。在处理过程中,Lucene必须枚举文档中的词汇以识别在这个范围之内的所有文档。借助这一功能,构建空间搜索应用程序只需要识别需要添加到应用程序中的、以某种编码方式文本化的空间数据。这些数据需要以地理编码的形式出现,如纬度、经度和海拔,或以邮政编码、街道地址的形式出现。编码系统的格式越规范,它在Lucene和Solr中的识别和利用就越容易。Grant Ingersoll在其“使用Apache Lucene和Solr进行位置感知搜索”一文中,给出了一个名为j-spatial的地理搜索源码实例(),其中就使用了纬度和经度(缩写为lat/lon,通常用与位于英国的格林威治本初子午线
14、相距的度、分和秒来表示一个地理位置点,该地理数据通常需要用double或更高的精度表示。如在该例子中,美国纽约州的Syracuse市的经度为东经76.150026(如果没有指定东方,则为-76.150026)和北纬 43.049648。Lucene词汇(Term)中的纬度和经度通常表示为两个不同的double型字段,但是这在一些应用程序中可能会显著影响性能。编码每个纬度和经度可能导致索引大量唯一的词汇,这不仅显著增大了索引文件的尺寸,而且会显著减慢搜索速度。这个问题可以通过使用Geohash编码的方法解决,即通过hash散列码的方式将纬度/经度压缩编码到一个String中。Geohash的额外
15、好处是能够通过切去散列码末尾的字符来实现任意的精度。因为在许多情况下,相邻的位置通常有相同的前缀。例如,在 中输入 Syracuse, NY(美国纽约州的Syracuse市)将生成散列码dr9ughxjkrt4b,而输入Syracuse的郊区Cicero, NY生成散列码dr9veggs4ptd3,可见它们的共同前缀都是dr9。一旦在Lucene的索引中添加了地理数据(将空间数据和文本合并处理)之后,搜索应用程序就可以在与用户界面交互时至少实现下述5种基本需求: 距离计算:根据给定点计算它到其他点的距离。 限定框过滤器:查找某些特定区域内所有匹配项(文档)。 排序:根据到
16、固定点的距离对搜索结果进行排序。 相关度改进:使用距离作为搜索结果排序的增强因素,同时允许其他因素发挥作用。 查询解析:在给出位置的地址或其他一些用户限定条件时,创建可用于根据索引数据进行搜索的编码表示。上述5个要素中,排序和相关度改进仅使用距离计算,因此重点是实现距离计算、限定框过滤器和查询解析这3个方面。距离计算在GIS应用中就是计算大圆弧长(球面两点之间的最短距离),因此距离计算主要的问题是精度。当两点之间的距离相隔很远,或者要求较高的准确度时,需要使用椭圆的地球球面模型和 Vincenty公式来获取高度精确的距离(可精确到0.5毫米),但通常的本地搜索程序,仅仅是计算在城市中行走的某段
17、距离而已(例如在一辆出租车中穿越纽约城的曼哈顿区有多远),因此并不一定都要使用平面地球模型和大圆弧长距离来表示距离。限定框过滤器的作用是缩小文档集的范围。如果待索引文档中仅存储了纬经度数据,那么缩小文档集的首选方法是传入包含指定位置的周边区域的范围(如矩形区域的界限点数据)。如果待索引文档中还包含了GIS的分层信息或Geohash编码,那么可以利用这些值来更好地缩小需要搜索的文档的范围。因此,至关重要的是查询解析功能的实现。查询解析功能需要确定查询的哪个部分包含所搜索的关键字,哪个部分包含位置信息。后者即被称为地理编码(geocoding)。因此,如何将地名和其他空间资源通过规范化的表示(比如
18、GeoNames)转换成位置信息是一个关键因素。这里面存在着国家地理信息数据规范化的问题,地名词汇的表示顺序(如中国是从国家省市县街区/乡镇从大到小的顺序,而英美等西方国家则正好相反),规范化地名缩写,以及拼写错误、语言歧义和不良脏数据等的影响。虽然地理编码问题很复杂,但是目前可以使用Web服务来将地址转换成位置。两种常用的服务为 Google Maps公共API和GeoNames(不幸的是,使用这些Web服务尽管是免费下载的,但必须遵循其使用条款,通常是带有某些限制并产生流量计费问题的)。因此可能需要自己编码实现这一功能。最好从基础开始(如城市的街道地址、基础地形测量数据),然后再添加旅游景
19、点名称等,以及保障系统健壮性的异常处理等。要运行Grant Ingersoll给出的j-spatial地理搜索样例代码,需要安装JDK 1.5 或更高版本和Ant 1.7 或更高版本。安装步骤为:Step1. unzip j-spatial.zipStep2. cd geospatial-examples Step3. ant install Step4. 启动Solr:ant start-solr(以后要停止Solr的话就运行ant stop-solr)Step5. 在浏览器地址栏中访问http:/localhost:8983/solr/admin 并确认Solr正常运行。如果安装正常的话,
20、应该能看到一个带有查询框的基础管理员界面。总之,使用Lucene和Solr基于点的位置模型是可以实现搜索、排序和过滤文本文档功能的。如果要构建一个可靠的位置感知搜索应用程序,用于合并基于点的位置的结构和非结构化文本,那么使用Lucene 和Solr是可行的。因此,本课题拟利用开源项目Lucene和Solr,基于Eclipse Java IDE/MyEclipse集成开发环境,设计实现一个能够基于点的位置信息进行地理信息查询的搜索引擎系统。这是对学生的Java编程开发技能和利用软件工程的分析设计思想和相关技术实现项目开发目标的动手能力进行的一次较全面深入的考察。通过本课题,学生可以进一步了解基于
21、面向对象的分析设计思想,结合设计模式和纯面向对象编程Java语言工具,参考j-spatial地理搜索样例代码,分析设计与实现一个具有基本搜索引擎框架和流程、模块功能完整的位置感知搜索引擎系统的全过程,学生可基于课题的成果开展互联网创业或就业,并且更进一步理解和掌握软件工程的方法论,深入熟悉和掌握面向对象的编程高级语言Java以及基于Eclipse Java IDE/MyEclipse集成开发环境,同时对Lucene、Solr、地理编码(Geocoding)和地理名称服务(GeoNames)、Ant等流行开源项目或空间信息技术的实现细节会有一个深入的了解和综合应用。具体在本课题中,建议使用如下的
22、解决方案:1、操作系统平台采用Windows或Linux系统平台;2、Web服务器采用Tomcat v5.5以上版本;(下载地址:/tomcat/tomcat-5/),Ant建议采用v1.7以上版本,下载地址:http:/pan.solr.cc/share/link?shareid=181778&uk=352829242#dir/ path=%2Fwww.solr.cc%E5%85%B1%E4%BA%AB%E8%B5%84%E6%BA%90;若采用Eclipse Java IDE集成开发环境的话,还需要下载并安装Eclipse的Tomcat
23、 插件TomcatPlugin;(下载地址:/eclipse/index.jsp)3、数据库采用MySQL v5.0以上版本;(下载地址:)若使用Java连接到MySQL数据库,还需要用到MySQL Connector/J即MySQL的JDBC连接驱动包;(下载地址:4、JDK建议采用至少v_07或以上版本;(下载地址:/download.html)5、集成开发环境建议采用Eclipse或MyEclipse;(下载地址:)注:若需要Eclipse支持中文界面,则需要另下载Eclipse SDK的2个语言包: http:/downloa
24、/eclipse/downloads/;此外,建议下载安装使用如下Eclipse插件:Eclipse插件ResourceBundleEditor v ,下载地址:Eclipse插件MyEclipse v 6、全文搜索引擎框架平台Lucene建议使用v2.9及其以上版本(目前最新为v4.6.0版,下载地址:,Lucene的官方网站为:;对应中文站点:7、地理信息搜索引擎建议采用开源项目Solr版本v2.0及其以上,目前最新版本为v4.6.0。下载地址:http:/pan.solr.cc/share/link?shareid=
25、181778&uk=352829242#dir/path=%2Fwww.solr.cc%E5% 85% B1%E4%BA%AB%E8%B5%84%E6%BA%90注:Solr需要用到如下大量的工具类库(均需要单独下载安装在./lib/目录下)ant-1.7.2.jarcommons-httpclient-.jarjsp-api-1.4.jarservlet-api-2.4.jar8、使用点位置经纬度坐标和GeoNames Web服务的地理搜索源码实例j-spatial,下载地址: dw/java/j-spatial.zip。需要参考该样本例子中的Geospatial-examples源
26、码,该实例需要包含下述类库:geonames-java5.jarlucene-spatial-.jarspatial-ex.jar9、由于Lucene不带中文文本分析器不支持中文,需要选用一个第三方的中文分词软件。目前支持Lucene的几个主要的中文分词器工具有:paoding、imdict、mmseg4j、ik、JE:(1) paoding:Lucene中文分词“庖丁解牛”(Paoding Analysis),由qieqie.wang提交在google code上,最后一次代码提交时间为2008年06月12日。速度上,paoding在PIII 1G内存的PC上,1秒可准确分词100万个汉字,
27、支持不限个数的用户自定义词库,纯文本格式,一行一词,并使用后台线程检测词库的更新,其源码目录一共1.3M,有6个properties文件,48个Java文件,6895行,切分算法不是很复杂。(2) imdict:imdict智能词典所采用的智能中文分词程序,由XiaoPingGao最后一次提交在2009-07-24(要进入lucene contribute,lucene trunk 中contrib/analyzers/smartcn/)。速度大约是259517(汉字/秒),暂时不支持用户自定义词库(但中科院原版ICTCLAS支持)。词库约6.7M大小(这个词库是必须的),源码src目录约15
28、2KB,20个Java文件,2399行。它使用ICTCLAS HHMM隐马尔科夫模型,“利用大量语料库的训练来统计汉语词汇的词频和跳转概率,从而根据这些统计结果对整个汉语句子计算最似然(likelihood)的切分”。由于是利用词库分词,每个被分出来的词都可同时被赋予相应词性标记,划分结果因而相当准确。不过美中不足的是它常出现代码运行异常的情况。(3) mmseg4j:使用Chih-Hao Tsai的MMSeg算法实现的中文分词器,由chenlb2008提交在google code上,最后一次代码上传时间为2009-08-03。mmseg4j自带sogou词库,支持名为wordsxxx.dic
29、,utf8文本格式的用户自定义词库,一行一词。不支持自动检测。速度方面,对于复杂句子切分大约1200kb/s左右,svn src目录一共132k,23个Java文件,2089行。MMSeg算法较复杂。(4) ik:采用特有的“正向迭代最细粒度切分算法”的多子处理器分析模式。由linliangyi2005提交在google code上,最后上传维护代码为2009-07-31,支持API级的用户词库加载,具有50万字/秒的高速处理能力,svn src目录一共6.6M(词典文件也在里面),22个Java文件,4217行。切分算法采用多子处理器分析模式,跟paoding类似。(5) JE(je ana
30、lysis):支持Lucene的另一个Java开源项目JE分词器,采用简单的正向二分法切分,提供API添加新词,切分效果不如以上的工具好(下载地址:)。建议选用目前国内在Solr中使用较多的mmseg4j中文分词工具。本课题预期目标(含:本课题应完成的工作,课题预期目标和课题价值估计)利用开源项目Lucene和Solr,基于Eclipse Java IDE/MyEclipse集成开发环境,设计实现一个能够基于点的位置信息进行地理信息查询的搜索引擎系统。这是对学生的Java编程开发技能和利用软件工程的分析设计思想和相关技术实现项目开发目标的动手能力进行的一次较全面深入的考察。通过本课题,学生可以
31、进一步了解基于面向对象的分析设计思想,结合设计模式和纯面向对象编程Java语言工具,参考j-spatial地理搜索样例代码,分析设计与实现一个具有基本搜索引擎框架和流程、模块功能完整的位置感知搜索引擎系统的全过程,学生可基于课题的成果开展互联网创业或就业,并且更进一步理解和掌握软件工程的方法论,深入熟悉和掌握面向对象的编程高级语言Java以及基于Eclipse Java IDE/MyEclipse集成开发环境,同时对Lucene、Solr、地理编码(Geocoding)和地理名称服务(GeoNames)、Ant等流行开源项目或空间信息技术的实现细节会有一个深入的了解和综合应用。课题要求完成:必
32、要的文档阅读、资料整理工作;(指导教师有特定要求)必要的系统需求分析和架构设计;(分析部分的成果文档需要有大量的对于Lucene和Solr的源码阅读整理工作,建议Java语言程度较好的学生完成该项工作)可能的数据库分析设计工作;参考地理搜索源码实例j-spatial,设计实现一个基于位置点的经纬度坐标和Geonames地名服务的地理搜索引擎系统,系统应至少支持距离计算、限定框过滤器、排序(根据到固定点的距离对搜索结果进行排序)和查询解析功能;必要的前端界面编程实现、后台配置及系统管理维护等功能。提供的外部条件可利用1台已接入互联网的PC构建开发及应用环境。建议使用Windows系统平台,具体配
33、置不限。集成开发环境限Eclipse Java IDE或MyEclipse,具体的组件请参考“立题依据”中的解决方案。主要参考资料 有关Lucene和Solr的学习,请首先阅读下述文章或参考书籍:1Grant Ingersoll,使用Apache Lucene和Solr进行位置感知搜索EB/OL. /software/dw/java/j-spatial.zip,2010-02-222Erik Hatcher,Otis Gospodnetic,Michael McCandless. Lucene实战(Lucene In Action,第2版)M.北京:人民邮电出版社,2011 3 David S
34、miley, Faceting in Solr 1.4 Enterprise Search ServerM.NY: Packt Publishing,20094吴众欣,沈家立. Lucene分析与应用M.北京: 机械工业出版社,2008更多有关Solr的问题,请重点参考其官方主页上的资源。推荐首先阅读官网上的电子版Solr开发手册()。若仍有开发编码方面的细节问题,可访问国内人气旺旺的Solr中国社区()。有关Geography和GIS方面的学习,请访问这个Wikipedia页面并了解关于GIS、地理信息编码、Geohash、距离计算、限定框方面的入门信息:。有关公共地理编码服务,请访问Google Maps( services.html#Geocoding)和GeoNames()。有关J2EE设计模式、JDK类库、Java Web开发编码方面的参考资料,请参考如下书籍:1克劳福
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论