基于Solr的搜索引擎研究与实现.docx

上传人:b****1 文档编号:15259827 上传时间:2023-07-02 格式:DOCX 页数:56 大小:522.75KB
下载 相关 举报
基于Solr的搜索引擎研究与实现.docx_第1页
第1页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第2页
第2页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第3页
第3页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第4页
第4页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第5页
第5页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第6页
第6页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第7页
第7页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第8页
第8页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第9页
第9页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第10页
第10页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第11页
第11页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第12页
第12页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第13页
第13页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第14页
第14页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第15页
第15页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第16页
第16页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第17页
第17页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第18页
第18页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第19页
第19页 / 共56页
基于Solr的搜索引擎研究与实现.docx_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于Solr的搜索引擎研究与实现.docx

《基于Solr的搜索引擎研究与实现.docx》由会员分享,可在线阅读,更多相关《基于Solr的搜索引擎研究与实现.docx(56页珍藏版)》请在冰点文库上搜索。

基于Solr的搜索引擎研究与实现.docx

基于Solr的搜索引擎研究与实现

 

摘要

随着信息时代的来临,人们的生活、学习、工作和娱乐已经与信息技术充分的融为一体。

随着群众对互联网参与度的增加和企事业单位信息化的逐步深入,信息量也成倍地增长,如何能更好地从浩如烟海的数字信息中快速、精准地查找到需要的信息,成为全国人民的迫切需求。

尤其是处于信息化建设道路上的中小企业,如何快速且廉价地开放自己的信息检索系统,对于企业的成长至关重要。

本文介绍了搜索引擎的基本原理,对搜索引擎的一些核心技术进行了介绍与深入的分析;介绍了Lucene搜索引擎工具包的架构及其基本使用;对基于开源搜索引擎包Lucene的搜索框架Solr进行架构、代码、配置等方面的研究;最后设计并实现了一个基于Solr1.3的简单可用的多库搜索引擎。

整个设计过程致力于提高管理维护的方便性和可扩展性。

 

关键词:

Lucene;Solr;搜索引擎;爬虫;中文分词

 

Abstract

Withtheadventoftheinformationera,people'slives,study,workandentertainmenthavebeenfullyintegratedwithinformationtechnology.WiththeparticipationofthemassesontheInternetandincreaseinthenumberofinformation-basedenterprises,theamountofinformationhasbecomeseveraltimesasbefore.Howtogetusefulinformationquicklyandaccuratelyhasbecomeanimportantthingtoeveryone.Forthesmallandmedium-sizedenterprises,howtodevelopitsownmessageretrievalsystemquicklyandcheaplyisessentialforthegrowthofenterprises.

Inthispaper,weintroducethebasicprinciplesofsearchengineandanalysesanumberofcoretechnologies.IalsointroduceLucenesearchenginetools,itsbasicframeworkandhowtouseit.WeanalysesSolr,whichisanopensourcesearchenginebasedonLucene,anditsarchitecture,code,configuration.Atlast,wedesignandimplementasimplemulti-databasesearchenginebasedonSolr1.3.

 

Keywords:

Lucene;Solr;SearchEngine;Spider;ChineseWordSegmentation

目录

第一章前言5

1.1绪论5

1.2开源搜索引擎研究的意义和现状7

第二章中文搜索引擎关键技术8

2.1搜索引擎基本结构8

2.2中文分词10

2.3相关排序13

2.4搜索引擎响应速度17

2.5网络蜘蛛18

第三章开源搜索引擎Solr20

3.1搜索引擎包Lucene20

3.1.1Lucene简介20

3.1.2Lucene与Solr的关系20

3.1.3Lucene的结构21

3.1.4Lucene的使用22

3.1.5Lucene的评分公式26

3.1.6Lucene的搜索结果排序27

3.2Solr的介绍28

3.2.1Solr的特点与优势28

3.2.2Solr1.3的新特性29

3.3Solr的配置和使用29

3.3.1Solr1.3服务器的部署29

3.3.2Solr1.3体系结构图30

3.3.3solr.xml配置文件31

3.3.4schema.xml配置文件31

3.3.5solrconfig.xml配置文件33

3.3.6查询HTTP接口参数36

3.4Solr1.3的核心机制36

3.4.1内核调用机制36

3.4.2分库机制37

3.4.3缓存机制37

第四章基于Solr的搜索引擎总体设计39

4.1设计背景和原则39

4.2整体结构与模块关系39

第五章基于Solr的搜索引擎详细设计与实现41

5.1网络蜘蛛模块的设计与实现41

5.2NewAPI模块的设计与实现42

5.3管理模块的设计与实现43

5.4配置文件的配置43

5.5分词模块的设计与实现44

5.6查询模块的设计与实现45

第六章结论47

参考文献48

致谢49

第一章前言

2

2.1

1.1绪论

随着信息技术的不断发展和人民对信息技术需求的不断增加,世界各国都在经历着前所未有的信息革命。

国家的发展离不开信息化,企业的发展离不开信息化,个人的工作、生活、学习和娱乐更是离不开信息化。

今日的中国也在跟随时代的步伐向着信息时代迈进,而且呈现出巨大的生机与活力,这是一个庞大的市场。

信息革命的深入必然带来信息的爆炸性增长。

据中国互联网信息中心(CNNIC)统计,截止2008年12月31日,中国已有网民数量2.98亿,网站287.8万个[18]。

如此巨大的信息聚集必然导致有效信息获取的难度增强和垃圾信息量增加。

于是,快速精准地获取有用信息的工具应运而生。

通用的搜索技术有数据库技术和搜索引擎技术,文献3[3]中比较了两者的差别。

搜索引擎是信息检索的工具,因此对搜索引擎的研究应属于信息检索的分支。

搜索引擎是帮助用户快速精准地从庞大的信息体中搜索到所需信息的工具,其诞生至今不过10多年的时间而已,不过其发展却非常迅速。

表1-1总结搜索引擎发展历史上一些具有里程碑意义的事件,以求从整体上了解搜索引擎的发展历史。

表1-1搜索引擎发展大事记

1990年

麦吉尔大学学生发明Archie

只是一个可以搜索的FTP文件名列表,用户通过输入精确的文件名来查询哪个FTP站点可以获得该文件

1993年

MartinKoster发明了ALIWEB

Archie的HTTP版本,靠主动提交信息来建立链接索引,类似Yahoo!

1993年

斯坦福大学学生发明Excite

分析字词关系,以对互联网上信息做更有效的搜索

1997年

卡耐基梅隆大学的MichaelMauldin创建了Lycos

第一次在索引程序中接入了spider程序;除相关度排序外,还提供了前缀匹配和字符相近限制;第一次使用了网页自动摘要

 

1998年

 

Google诞生

Google在Pagerank、动态摘要、网页快照、DailyRefresh、多文档格式支持、地图、股票、词典、寻人等集成搜索、多语言支持、用户界面等功能上带来革新

国内搜索引擎的研究相对国外较晚,不过搜索引擎在国内仍然取得了不少成绩。

研究领域,北京大学开发出北京大学天网搜索引擎,并提出中文搜索引擎研发的许多方法和思想(文献8[8]有相关介绍)。

在商业领域,XX已经成为了世界上使用人数最多的中文搜索引擎。

有学者认为:

现代搜索引擎建立在互联网和诸多计算机技术之上,所以很难将搜索引擎的缘起与哪个具体的产品对应起来[1]。

而且,在搜索引擎的发展演化过程中,出现过许多不同种类的搜索引擎,谢新洲主编的《网络信息检索技术与案例》[2]一书中按照信息组织方式将搜索引擎分成如下三类。

(1)目录式搜索引擎

目录式搜索引擎依靠人工发现信息,并依靠标引人员自身的知识对信息进行分类、提取主题词、建立关键字索引和目录分类体系。

用户可以通过两种方式来使用。

一种是浏览查询,从最高层目录开始,顺着目录树逐层深入,直到找到所需信息为止;另一种是通过关键词检索。

这类搜索引擎具有检索效率高的有点,但索引建立的效率却比较低,信息更新也比较慢。

目录式搜索引擎的例子有Yahoo和新浪分类目录。

(2)索引式搜索引擎

索引式搜索引擎依靠一个被称作蜘蛛(Spider)或机器人(Robot)的程序,根据特定网络协议和原则,自动地从互联网上获取信息来建立索引。

并采用一定得方法对索引库进行更新,以确保索引库与互联网上信息的实时对应。

这类搜索引擎主要依靠程序自动地搜集和维护信息,从而将标引人员解放出来,同时索引库可以比较大,实时性也更强。

著名的索引式搜索引擎有Google,XX等。

(3)元搜索引擎

元搜索引擎也叫集合式搜索引擎,它将多个搜索引擎集中起来,提供统一的检索界面给用户。

因此元搜索引擎可以理解为一个经过包装的搜索引擎群体。

元搜索引擎有两种工作方式,一种是并行式元搜索引擎,另外一种是串行式元搜索引擎。

并行式元搜索引擎在用户提交查询词后,同时将查询请求发往多个搜索引擎,在接收到各个搜索引擎返回的结果后,根据一定得排序算法重新排序后返回给用户。

串行式元搜索引擎仅提供一个搜索引擎的列表,由用户选择使用哪个搜索引擎来进行查询,因此它可以说是“搜索引擎的搜索引擎”[2],帮助用户进行搜索引擎的选择。

尽管搜索引擎分类众多,但其基本思想是一致的。

图1-1展示了搜索引擎的基本思想。

首先搜集目标信息,然后将信息进行分析处理,并按照一定得数据结构进行存储,最后用户从这些被存储的数据中检索出有用的信息。

 

1.2开源搜索引擎研究的意义和现状

开源搜索引擎的研究具有极其重大的意义。

首先,由于只有很少的人能够接触大型商业搜索引擎,所以大部分人游离在专业搜索引擎技术之外,开源搜索引擎无疑为人们学习和研究搜索引擎技术提供了极好的途径。

再者,开源搜索引擎能够吸引更多人贡献自己的才智,这必将会推动搜索引擎技术的进步。

从市场的角度来说,越来越多的企业对搜索技术有迫切的需求,这些需求有极强的差异,例如,有的需要的是对文档的搜索,有的需要对网页的搜索等等。

这些企业中,大部分是中小企业,他们无力组建自己的开发团队来开发搜索引擎,同时也不可能花巨资购买专业化的搜索引擎,他们只希望花最少的钱来满足自己的需要。

这时候,开源的搜索引擎既帮了企业的忙,也帮了开发人员的忙,开发人员可以通过开源搜索引擎快速地开发出廉价的个性化的搜索引擎,这样的搜索引擎无疑会得到企业更多的青睐。

开源搜索引擎在开源的潮流和搜索引擎迫切的需求中诞生,经过多年的发展,已经取得了许多成绩。

这一领域最为流行的是Lucene家族,它以Lucene库为基础派生出许多知名的搜索引擎:

Nutch、Solr、Compass、LIUS等。

其中Nutch是以Lucene为基础的Web搜索引擎,利用它可以快速地搭建像Google一样的搜索引擎;Solr是Lucene基础上的一个搜索引擎框架,通过对其配置,可以实现许多强大的功能,而且索引和查询的效率都极高,利用它开发个性化的搜索引擎是不错的选择;Compass也是一个以Lucene为基础的搜索引擎架构,它提供比Lucene更加简洁的API,使用它与Hibernate、Spring等进行集成是个很好的选择;LIUS(LuceneIndexUpdateandSearch)也包装Lucene的一个库,它是一个针对文本索引的框架,可以对MSWORD、PDF、MSEXCEL、TXT等文本进行处理。

第二章

中文搜索引擎关键技术

2.1搜索引擎基本结构

不同的搜索引擎会有差异,但是其基本的功能模块是一样的。

图2-1展示了一个可以实现网页和文档的全文检索的中文搜索引擎的基本结构。

索引库是信息存储的地方,这里的信息已经变成倒排结构。

所谓倒排就是通过将文档(Document)→词语(Word)的原始结构(如图2-2所示)变为词语(Word)→文档(Document)的倒排结构(如图2-3所示)[3]。

倒排结构的好处就是可以根据对词语的搜索快速定位到文档,例如:

当搜索“我们”的时候,结果中应该出现“文档1”和“文档2”。

索引器(Indexer)是生成索引的模块,我们将处理过后的信息包装成文档交给索引器,索引器会在索引库中建立该文档的索引(也就是倒排结构)。

检索器(Searcher)是信息查询的模块。

当用户提交查询词后,检索器会对查询词进行分词等处理,并生成查询请求(Query),然后在索引库中进行查询,并将查询所得结果以一定得格式呈现给用户。

索引库、索引器、检索器是搜索引擎的三大核心。

完全可以利用这三大模块建立一个简单的搜索引擎(Lucene库的直接调用就属于这个层次),不过这样的搜索引擎只有开发人员才能使用,用户使用将非常吃力,而且不能方便地对各种现存的文件(MSWord、MSExcel、HTML等)进行处理,所以真正完善的搜索引擎还需要其他模块的支持。

图2-1中文搜索引擎基本结构

文档解析模块用于解析特定的文件,提取出文字信息并建立文档对象,然后交给索引器进行处理。

网页处理模块用于对“网络蜘蛛”(Spider)获取的网页进行解析,提取出文字信息,建立文档对象后交给索引器处理。

用户界面是面向最终用户的,它从用户角度出发,提供方便的查询界面,并将查询结果按照用户的需求予以显示。

2.2中文分词

所谓分词就是指将一个完整的句子划分成一个个词条(Token)的过程。

由于索引库中数据是一种索引结构,因此需要有一组固定的索引键(Key),又因为索引库是词语→文档的倒排结构,所以这组索引键应该是词语。

这就需要将句子进行切分,以获得单个的词语。

尽管每种语言都要进行分词,但是英文可以利用空格来作为天然的分隔符。

然而对于中文来说,分词的情况要复杂得多。

中文分词在中文搜索引擎领域极其重要。

首先,中文分词影响查询的效率。

假设有如下文档:

doc1(中国在亚洲)

doc2(心中有梦想)

doc3(中国在发展)

doc4(中心大街)

我们分别使用单字分词(如图2-4所示)和非单字分词(如图2-5所示)来建立索引。

当用户输入“中国”作为查询词时,对于单字分词将经历以下过程。

(1)“中国”分词为“中”和“国”。

(2)查索引表得包含“中”字的文档集合为A(doc1、doc2、doc3、doc4),包含“国”字的文档有B(doc1、doc3)。

(3)将A与B相与得包含“中国”的文档集合为C(doc1、doc3)。

而采用非单字的分词方式一步就可以查得结果,可见,中文分词方式将影响到查询的效率。

图2-4单字分词效果

图2-5非单字分词效果

其次,分词效果还影响到查询结果与用户期望的匹配程度。

例如,用户查询“和服”是想找到关于日本和服的相关信息,但是分词效果不佳的搜索引擎可能会返回包含“化妆和服装”[11]的文档。

中文分词有如下三类方法[4]:

(1)基于字符串匹配的分词方法

基于字符串匹配的分词方法也叫机械分词法[5],他将待分析的汉字串与词典进行匹配,若匹配成功,则分出一个词。

机械分词法又分为正向最大匹配法、逆向最大匹配法和最小切分法(每句话切分的词数最少)。

正向最大匹配算法以从左到右的顺序,从第一个字开始进行切分,尽量切分出一个包含字数最多的词,然后将该词后边剩下的汉字串继续按照上面方法进行切分。

逆向最大匹配算法与正向最大匹配算法相反,从右边第一个字开始,尽量切分出包含字数最多的词,然后将该词左边剩下的汉字串按照上面的方法继续切分。

正向最大匹配算法和逆向最大匹配算法的效果如图2-6所示(假设最大词长为4)。

注意对同一句话,两种方法可能得出不同的结果。

图2-6正(逆)向最大匹配算法分词效果

(2)基于理解的分词方法

基于理解的分词方法模拟人对语言的理解来进行分词。

其基本思想是在分词的同时引入句法信息和语义信息来处理歧义。

这是一种理想的分词方法,这一分词方法的发展水平直接反应机器语言理解技术的发展水平,不过由于汉语的语义的复杂性和汉语句法的多变性,该方法目前尚处于研究阶段。

(3)基于统计的分词方法

基于统计的分词方法也叫统计取词方法或无词典分词方法。

它基于这样一个思想:

在上下文中,两个(或多个)字相邻出现的频率越高,那么他们成词的概率就越高。

例如,对多篇文章进行统计时发现“未”和“来”相邻的频率远远高于“未”和“完”(例如,未完成)相邻的频率,那么“未来”成词的可信度就要高于“未完”成词的可信度。

不过这样的分词方式有其弱点,有许多字相邻频率很高,但是未必成词,例如“我的”。

所以基于统计的分词方法更多地用于新词识别,以作为词典分词方法的补充。

由于各种分词方法有其优点和缺点,所以目前大多数性能优越的搜索引擎都使用多种分词方法来相互补充,这种方法被称为“复合分词法”。

2.3相关排序

相关排序(relevanceranking)是指信息检索系统返回结果的排序[4],排序结果反应了文档与查询的相关程度。

在搜索引擎领域,相关排序不仅仅考虑查询与文档的相关程度,还应该考虑链接间的相互关系(主要指Web搜索引擎)与网站的重要程度等等。

同时,电子科技大学的汪文勇提出:

研究搜索引擎的页面优先度算法,需要从客观和主观两方面进行研究。

客观上,从网页页面本身的信息和链接情况分析,提高信息量大、链接度高的网页页面的优先度排序;主观上,从互联网用户使用搜索引擎的行为模式分析,提高用户点击率高和浏览时间长的网页页面的优先度排序[16]。

2.3.1向量空间模型(VSM)

向量空间模型(vectorspacemodel,VSM)由GeraldSalton提出,该模型用于计算文档与查询的相关程度,仅仅实用于普通文本。

对于网页与查询的相关度需引入新的方法来计算。

假设词典包含N个词语,那么词典集合T可以表示为

T={t1,t2,…,tN}

其中ti为词项,即每个词。

这时文档d和查询q可以表示为

d=

q=

其中mi为T中词项ti在d中的出现频率(即词频),ni为T中词项ti在q中出现频率。

这样,文档与查询的相关度就可以表示为d与q的“相似程度”,通常d与q的夹角越小,表示两个向量越相近,所以d与q的相似度R(d,q)为

R(d,q)=cos(d,q)

下面使用2维词典空间(即N为2)来直观地看看如何用向量空间模型来比较文档与查询相关度。

假设词典空间

T={足球,爱好}

d1、d2、q为

d1=<2,2>

d2=<4,2>

q=<1,2>

即文档d1、d2、q中“足球”分别出现2、4、1次,爱好分别出现2、2、2次。

d1、d2、q在词典空间中的曲线如图2-7所示。

由于d1与q的夹角小于d2和q的夹角,我们可因认为对于q,d1的相关度高于d2。

图2-7二维词典空间中d,q关系

向量空间模型很容易从直观上理解,但是在实际使用过程中还要在此基础上作出更多的处理。

词频通常不直接用该词出现的次数进行表示,而将所有原始词频(既词数)除以一个共同的分母,将词频约束到一个范围内(如大于0小于1),这叫词频的规格化处理。

这样d=可以变为

d=

其中wi=mi/∑mj,也就是将所有词频除以所有词频的和,得到规格化的词频。

这个经过规格化的词频必定在0和1之间。

有些词(如“我”,“是”等)可能在多个文档中多次出现,尽管词频比较高,但是它对文档的区分能力不是很强,所以还应该将上面所得词频乘以一个权值以得最终词频。

通常这个权值取文档倒置频率(IDF)

IDFi=lg(M/ki)

其中ki为文档集合D中包含词项ti的文档的个数,M为文档集合D的大小,直观上理解就是ti涉及的文档数越少,该词越重要,权值就应该越大。

2.3.1Web搜索引擎的结果排序

对于web搜索引擎,搜索结果排序不仅仅考虑查询词与文档之间的关系,还需要考虑查询词在网页文件中的显示位置、显示状态以及链接和被连接关系。

(1)我们知道HTML页面有丰富的标签,这些标签有的是表明主题的(如),有的是表明布局、大小、是否粗体的。</p><p>一个网页的主题词肯定比其他词重要,它应该被重视;字号较大的字应该比字号较小的字更加重要;粗体字应该比非粗体字更加重要。</p><p>基于上述原则,我们设计出不同标签表示的字的权值表(如表2-1[4]所示),这些权值可以在建立索引的时候反应到词语所在域(field)上。</p><p>这里主要说明一种思路,因此并不包含全部标签,同时这里的权重已经规格化,实际实现中,我们可以暂时不规格化,等到加入词频,链接权重等因素后再规格化。</p><p>表2-1HTML标签权重表</p><p>标签</p><p>wt</p><p>标签</p><p>wt</p><p><TITLE></p><p>0.4</p><p><B></p><p>0.04</p><p><STRONG></p><p>0.04</p><p><BIG></p><p>0.04</p><p><H1></p><p>0.12</p><p><FONTSIZE=7></p><p>0.16</p><p><H2></p><p>0.08</p><p><FONTSIZE=6></p><p>0.12</p><p><H3></p><p>0.04</p><p><FONTSIZE=5></p><p>0.08</p><p><H4></p><p>0.02</p><p><FONTSIZE=4></p><p>0.04</p><p><H5></p><p>0.01</p><p><FONTSIZE=3></p><p>0.02</p><p>(2)基于“优秀网页链接过来的网页,必定是优秀的网页”这种思想,网页的重要性与链接该网页的网页的重要性有关。</p><p>Google的PageRank算法就是基于这样的思想。</p><p>网页的出度是指有该网页发出至其它网页的链接的数目,网页的入度是指指向该网页的网页的数目。</p><p>PageRank算法认为,其它网页对本网页的链接是其它网页对本网页的“投票”,某个网页的入度越大(也就是被链接次数多),票数也就越多,则该网页就越重要;同时,高质量的网页投来的票对本网页质量的肯定作用较大,其对本网页重要性影响权重也应更大些。</p><p>公式2-1用于计算页面j的PageRank值。</p><p>Wj=(1-d)+d∑li,jWi/ni(2-1)</p><p>其中Wj表示页面j的PageRank值,li,j表示页面i到页面j是否有链接(有链接为1,否则为0),ni代表页面i的出度,d为沿着链接访问网页的概率。</p><p>图2-8PageRank算法示意图</p><p>图2-8直观地展示了PageRank算法,这里d取为1。</p><p>Page1的PR值为100,出度为2,所以由Page1发出的每个链接获得PR为50,同理Page3每个链接获得PR值为3。</p><p>Page2的入度为2,两个链接分别带来PR值为50和3,所以Page2的PR值为53,同理Page4的PR值为3。</p><p>现实环境中PR值的计算没有这样简单,由于网络链接情况极其复杂,每个网页首先获得一个默认的PR,然后根据链接关系,递归地使用PageRank算法进行修改。</p><p>2.4搜索引擎响应速度</p><p>搜索引擎查询结果的相关性固然重要,但响应速度也是必须要考虑的问题,毕竟没有人愿意花一天的时间去等待一个最佳答案。</p><p>目前的商用搜索引擎中,Google返回的结果量和相关度都高于XX,但XX的响应速度高于Google。</p><p>可以通过对查询结果的预处理来获得较高的响应速度,我们可以使用缓存技术将一些经常被查询的词的查询结果保存在内存中,当用户输入包含多</p> </div> <div class="readmore" onclick="showmore()" style="background-color:transparent; height:auto; margin:0px 0px; padding:20px 0px 0px 0px;"><span class="btn-readmore" style="background-color:transparent;"><em style=" font-style:normal">展开</em>阅读全文<i></i></span></div> <script> function showmore() { $(".readmore").hide(); $(".detail-article").css({ "height":"auto", "overflow": "hidden" }); } $(document).ready(function() { var dh = $(".detail-article").height(); if(dh >100) { $(".detail-article").css({ "height":"100px", "overflow": "hidden" }); } else { $(".readmore").hide(); } }); </script> </div> <script> var defaultShowPage = parseInt("20"); var id = "15259827"; var total_page = "56"; var mfull = false; var mshow = false; function DownLoad() { window.location.href='https://m.bingdoc.com/d-15259827.html'; } function relate() { var reltop = $('#relate').offset().top-50; $("html,body").animate({ scrollTop: reltop }, 500); } </script> <div id="relate" class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">相关资源</div> <div id="relatelist" style="padding-left:5px;"> <ul> <li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-7257702.html" title="基于spritekit引擎ios平台某游戏的设计与实现开题报告毕业论文.docx">基于spritekit引擎ios平台某游戏的设计与实现开题报告毕业论文.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-8357183.html" title="基于spritekit引擎ios平台某游戏的设计与实现开题报告毕业论文文档格式.docx">基于spritekit引擎ios平台某游戏的设计与实现开题报告毕业论文文档格式.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-15627283.html" title="基于内容的图片搜索引擎.docx">基于内容的图片搜索引擎.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-16824797.html" title="基于web搜索引擎的与实现.docx">基于web搜索引擎的与实现.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-2120919.html" title="基于 mahout 构建社会化推荐引擎.docx">基于 mahout 构建社会化推荐引擎.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-9753731.html" title="基于mahout构建社会化推荐引擎.docx">基于mahout构建社会化推荐引擎.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-7353067.html" title="Delphi1031基于RDBMS的轻量级流程引擎2.docx">Delphi1031基于RDBMS的轻量级流程引擎2.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-3949430.html" title="基于ANSYS的轿车引擎盖有限元分析.docx">基于ANSYS的轿车引擎盖有限元分析.docx</a> </li><li><em class="docx"/></em><a target="_parent" href="https://m.bingdoc.com/p-12937788.html" title="基于Unity3d引擎的ACT游戏设计与实现.docx">基于Unity3d引擎的ACT游戏设计与实现.docx</a> </li> </ul> </div> </div> <div class="container" style="padding:0px 0px 15px 0px; margin-top:20px; border:solid 1px #dceef8"> <div style=" font-size: 16px; background-color:#e5f0f7; margin-bottom:5px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px;">猜你喜欢</div> <div id="relatelist" style="padding-left:5px;"> <ul> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605281.html" target="_parent" title="前期物业管理方案.docx">前期物业管理方案.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605282.html" target="_parent" title="交通局国防教育工作计划与交通局基础建设工作计划汇编.docx">交通局国防教育工作计划与交通局基础建设工作计划汇编.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605283.html" target="_parent" title="人教版初三物理单元测试题及答案 全册.docx">人教版初三物理单元测试题及答案 全册.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605284.html" target="_parent" title="届云南省红河州建水县高三四校联考卷四历史试题解析版.docx">届云南省红河州建水县高三四校联考卷四历史试题解析版.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605285.html" target="_parent" title="强烈推荐猕猴桃专业合作社项目创业计划书.docx">强烈推荐猕猴桃专业合作社项目创业计划书.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605286.html" target="_parent" title="墙地面砖施工方案.docx">墙地面砖施工方案.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605287.html" target="_parent" title="教师个人工作德能勤绩总结多篇范文.docx">教师个人工作德能勤绩总结多篇范文.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605288.html" target="_parent" title="金融工程的个人简历模板.docx">金融工程的个人简历模板.docx</a></li> <li><em class="docx"></em> <a href="https://m.bingdoc.com/p-12605289.html" target="_parent" title="人教版临沂市九年级Unit6课文详解.docx">人教版临沂市九年级Unit6课文详解.docx</a></li> </ul> </div> </div> <div style=" font-size: 16px; background-color:#e5f0f7; margin-top:20px; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;"> 相关搜索</div> <div class="widget-box pt0" style="border: none; padding:0px 5px;"> <ul class="taglist--inline multi"> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bingdoc.com/search.html?q=%e5%9f%ba%e4%ba%8e">基于</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bingdoc.com/search.html?q=Solr">Solr</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bingdoc.com/search.html?q=%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e">搜索引擎</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bingdoc.com/search.html?q=%e7%a0%94%e7%a9%b6">研究</a></li> <li class="tagPopup"><a target="_parent" class="tag tagsearch" rel="nofollow" href="https://m.bingdoc.com/search.html?q=%e5%ae%9e%e7%8e%b0">实现</a></li> </ul> </div> <div style=" font-size: 16px; background-color:#e5f0f7; font-weight: bold; text-indent:10px; line-height: 40px; height:40px; padding-bottom: 0px; margin-bottom:10px;"> 资源标签</div> <div class="widget-box pt0" style="border: none; padding:0px 5px;"> <ul class="taglist--inline multi"> <li class="tagPopup"><a class="tag tag0" href="https://m.bingdoc.com/mark/jiyuspritekityinqingios.html" >基于spritekit引擎ios</a></li><li class="tagPopup"><a class="tag tag1" href="https://m.bingdoc.com/mark/sousuoyanjiu.html" >搜索研究</a></li> <li class="tagPopup"><a target="_parent" class="tag tag1" href="https://m.bingdoc.com/mark/biyeshejilunwenqianyinsvc.html">毕业设计论文牵引svc</a></li> <li class="tagPopup"><a target="_parent" class="tag tag2" href="https://m.bingdoc.com/mark/jiyuiospingtailingshi.html">基于IOS平台零食</a></li> <li class="tagPopup"><a target="_parent" class="tag tag3" href="https://m.bingdoc.com/mark/biyeshejijiyuiosyizhe.html">毕业设计基于iOS一折</a></li> <li class="tagPopup"><a target="_parent" class="tag tag4" href="https://m.bingdoc.com/mark/shoujiyouxiyinqingsheji.html">手机游戏引擎设计</a></li> <li class="tagPopup"><a target="_parent" class="tag tag0" href="https://m.bingdoc.com/mark/jiyuiospingtaiyouxi.html">基于IOS平台游戏</a></li> <li class="tagPopup"><a target="_parent" class="tag tag1" href="https://m.bingdoc.com/mark/jiyuniosiideyouxipingtaikaifashejibiyeshejilunwendisanbanjiyu.html">基于NIOSII的游戏平台开发设计毕业设计论文第三版基于</a></li> <li class="tagPopup"><a target="_parent" class="tag tag2" href="https://m.bingdoc.com/mark/jiyulianlianyouxikaiti.html">基于连连游戏开题</a></li> </ul> </div> <br /> <div > 当前位置:<a target="_parent" href="https://m.bingdoc.com/">首页</a> > <a href="https://m.bingdoc.com/booklist-00002.html">经管营销</a><span> > </span><a href="https://m.bingdoc.com/booklist-0000200001.html">经济市场</a> </div> <br /> <div class="cssnone"> <iframe title="来源" src="https://m.bingdoc.com/BookRead.aspx?id=ZxOksgUtTVimYBmrtGz%7c1Q%3d%3d" frameborder="0" style="width: 0px; height: 0px"> </iframe> </div> <span id="LabelScript"></span> <script src="https://mstatic.bingdoc.com/JS/bootstrap-collapse.js"></script> </form> <div class="siteInner_bg" style="margin-top: 40px; border: solid 0px red; margin-left: 0px; margin-right: 0px;"> <div class="siteInner"> <p style="text-align: center;">copyright@ 2008-2023 冰点文库 网站版权所有</p><p style="text-align: center;">经营许可证编号:<a href="http://beian.miit.gov.cn/" target="_blank">鄂ICP备19020893号-</a>2</p><script>var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f82ede2a6dd69d4ed35205d3eb25b840"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();</script> </div> </div> <div class="trnav clearfix" id="navcontent" style="display: none; background-color:#3a71b1; "> <div class="trlogoside" id="navlogo" style="display: none;"> <a href="https://m.bingdoc.com/" title="冰点文库"><img src="https://www.bingdoc.com/images/logo_bd.png" alt="冰点文库"></a> <div class="trnavclose" id="navclose"> <span></span> </div> </div> <div class="navcontainer"> <div class="row"> <ul class="nav navbar-nav trnavul headercontent" id="navigation" style="margin:20px 0 0px;"> <li><a target="_parent"href="https://m.bingdoc.com/login.aspx">登录</a></li> <li><a target="_parent"href="https://m.bingdoc.com/">首页 </a></li> <li><a target="_parent"href="https://m.bingdoc.com/booklist-0.html">资源分类 </a></li> <li><a target="_parent"href="https://m.bingdoc.com/UserManage/Recharge.aspx?f=0"><img src="https://m.bingdoc.com/images/s.gif" alt="new" class="hottip1">升级会员 <img src="https://www.bingdoc.com/FileUpload/Images/48520fea-bc98-41ae-b183-84689c7075c9.gif" alt="new" class="hottip"></a></li> <li><a target="_parent"href="https://m.bingdoc.com/newslist.html">通知公告 </a></li> <li><a target="_parent"href="https://m.bingdoc.com/h-0.html">帮助中心 </a></li> </ul> </div> </div> </div> <script type="text/javascript"> function stopPropagation(e) { var ev = e || window.event; if (ev.stopPropagation) { ev.stopPropagation(); } else if (window.event) { window.event.cancelBubble = true;//兼容IE } } $("#navmore").click(function (e) { $("#navcontent").show(); $("#navlogo").show(); stopPropagation(e); var navcontentwidth = $("#navcontent").width(); $('#navcontent').css({ 'right': '-' + navcontentwidth + 'px' }); $("#navcontent").show().animate({ "right": 0 }, 300); }); $(document).bind('click', function () { var navcontentwidth = $("#navcontent").width(); $("#navcontent").animate({ 'right': '-' + navcontentwidth + 'px' }, 300, function () { $("#navcontent").hide(); }); $("#navlogo").fadeOut(300); }); $("#navcontent").click(function (e) { stopPropagation(e); }); $("#navclose").click(function (e) { var navcontentwidth = $("#navcontent").width(); $("#navcontent").animate({ 'right': '-' + navcontentwidth + 'px' }, 300, function () { $("#navcontent").hide(); }); $("#navlogo").fadeOut(300); }); </script> <script> function BaseShare(title, desc, imgUrl) { var link = "https://m.bingdoc.com/p-15259827.html"; if (wx) { wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wx3a9604896163fa38', // 必填,公众号的唯一标识 timestamp: '1717348690', // 必填,生成签名的时间戳 nonceStr: 'BE3159AD04564BFB90DB9E32851EBF9C', // 必填,生成签名的随机串 signature: '3e9089cfb5e5eddb716812df50af929a36a60cb3',// 必填,签名,见附录1 jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'updateAppMessageShareData', 'updateTimelineShareData', 'hideMenuItems'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 //openTagList: ["wx-open-launch-weapp"]//H5打开小程序 }); wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.hideMenuItems({// 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 menuList: ['menuItem:share:qq', 'menuItem:favorite', 'menuItem:share:QZone', 'menuItem:share:email', 'menuItem:originPage', 'menuItem:readMode', 'menuItem:delete', 'menuItem:editTag', 'menuItem:share:facebook', 'menuItem:share:weiboApp', 'menuItem:share:brand'] }); var shareData = { title: title, // 分享标题 desc: desc,//这里请特别注意是要去除html link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: imgUrl, // 分享图标 }; wx.updateAppMessageShareData(shareData);//1.4 分享到朋友 wx.updateTimelineShareData(shareData);//1.4分享到朋友圈 }); } } function BaseShare(title, desc, imgUrl, link) { if (link=="") link = "https://m.bingdoc.com/p-15259827.html"; if (wx) { wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: 'wx3a9604896163fa38', // 必填,公众号的唯一标识 timestamp: '1717348690', // 必填,生成签名的时间戳 nonceStr: 'BE3159AD04564BFB90DB9E32851EBF9C', // 必填,生成签名的随机串 signature: '3e9089cfb5e5eddb716812df50af929a36a60cb3',// 必填,签名,见附录1 jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'updateAppMessageShareData', 'updateTimelineShareData', 'hideMenuItems'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 //openTagList: ["wx-open-launch-weapp"]//H5打开小程序 }); wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.hideMenuItems({// 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 menuList: ['menuItem:share:qq', 'menuItem:favorite', 'menuItem:share:QZone', 'menuItem:share:email', 'menuItem:originPage', 'menuItem:readMode', 'menuItem:delete', 'menuItem:editTag', 'menuItem:share:facebook', 'menuItem:share:weiboApp', 'menuItem:share:brand'] }); var shareData = { title: title, // 分享标题 desc: desc,//这里请特别注意是要去除html link: link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: imgUrl, // 分享图标 }; wx.updateAppMessageShareData(shareData);//1.4 分享到朋友 wx.updateTimelineShareData(shareData);//1.4分享到朋友圈 }); } } </script> <script> $(document).ready(function () { var arr = $(".headercontent"); for (var i = 0; i < arr.length; i++) { (function (index) { var url = "https://m.bingdoc.com/header.aspx"; $.get(url + "?t=" + (new Date()).valueOf(), function (d) { try { arr.eq(index).empty().html(d); } catch (e) { } try { arr.html(d); } catch (e) { } }); })(i); } }); </script> <script src="https://mstatic.bingdoc.com/js/jquery.lazyload.js"></script> <script charset="utf-8"> $("img.lazys").lazyload({ threshold: 200, effect: "fadeIn" }); </script> </body> </html>