没有合适的资源?快使用搜索试试~ 我知道了~
首页动手实践:构建你自己的搜索引擎
动手实践:构建你自己的搜索引擎
需积分: 10 20 下载量 32 浏览量
更新于2024-07-18
收藏 3.51MB PDF 举报
"高清彩版 自己动手写搜索引擎" 本书详细介绍了如何构建一个搜索引擎,旨在帮助读者理解搜索引擎的工作原理并亲自动手实践。作者首先通过讲述Google神话和搜索引擎的用户体验,激发读者的兴趣,指出任何人都有可能创建自己的搜索引擎。 在第二章,书中详细阐述了搜索引擎的基本技术,包括30分钟快速实现搜索引擎的步骤,涵盖了网络蜘蛛、全文索引结构、以及开源全文检索引擎Lucene和Nutch。此外,还讨论了商业搜索引擎的不同类型,如通用搜索、垂直搜索、站内搜索和桌面搜索,使读者对搜索引擎的多样化应用有更深入的了解。 第三章主要讲解如何获取海量数据,即通过网络蜘蛛抓取网页内容,包括对BerkeleyDB的介绍、不同类型的网页抓取(如MP3、RSS、图片和垂直行业的数据),以及如何抓取数据库内容和本地硬盘上的文件。增量抓取策略的介绍,有助于读者理解如何高效、持续地获取新数据。 第四章关注文本内容的提取,从HTML文件到非HTML文件,如TEXT、PDF、Word、Rtf、Excel和PowerPoint,甚至流媒体内容。书中提到了多种工具和方法,如HtmlParser、FireBug、NekoHTML等,用于提取和净化网页正文,并介绍了应对抓取限制的策略。 最后,在第五章,作者转向自然语言处理,特别是中文分词处理,介绍了Lucene中的中文分词技术。这部分内容对于理解搜索引擎如何理解和处理语言至关重要。 本书适合对搜索引擎技术感兴趣的读者,无论是初学者还是有一定基础的开发者,都能从中学习到实用的技术和实践经验,从而逐步构建自己的搜索引擎。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/10745288/bg10.jpg)
遍历搜索引擎技术
- 6 -
如果是在 linux 下,修改 ./catalina.sh 增加行 JAVA_OPTS=-Xmx600m
如果是在 windows 下,修改 ./catalina.bat 增加行 set JAVA_OPTS=-Xmx600m
对 catalina.bat 进行的修改,用 startup.bat 时可以生效起作用,但用 service.bat 时不起作
用。
2.1.2 编写代码(15 分钟)
搜索引擎的基础在于对全文索引库的管理,在 Lucene 中,通过 IndexWriter 来写入索引
库。下面是简单的代码:
index = new IndexWriter(new File(indexDir), new CnAnalyzer(),!incremental);
//说明 IndexWriter 是将要搜索的内容写入索引库的类。
public void go() throws Exception {
long start = System.currentTimeMillis();
// 创建索引目录或者建立增量索引
if (verbose) {
System.out.println("Creating index in: " + indexDir);
if (incremental) System.out.println(" - using incremental mode");
}
index = new IndexWriter(new File(indexDir), new StandardAnalyzer(),
!incremental);//打开或创建索引库
File dir = new File(sSourceDir);
indexDir(dir);//索引路径
![](https://csdnimg.cn/release/download_crawler_static/10745288/bg11.jpg)
遍历搜索引擎技术
- 7 -
index.optimize();//索引优化
index.close();//关闭索引库
if(verbose)
System.out.println("index complete in :"+(System.currentTimeMillis() - start)/1000);
}
实际把文件内容加到索引库是靠下面这段代码:
private void indexFile(File item) {
if (verbose) System.out.println("Adding FILE: " + item);
News news = loadFile(item);//把文件中的内容加载到 news 对象
if ( news!= null && news.body != null) {
Document doc = new Document();
//创建网址列
Field f = new Field("url", news.URL ,
Field.Store.YES, Field.Index.UN_TOKENIZED,
Field.TermVector.NO);
doc.add(f);
//创建标题列
f = new Field("title", news.title ,
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
![](https://csdnimg.cn/release/download_crawler_static/10745288/bg12.jpg)
遍历搜索引擎技术
- 8 -
doc.add(f);
//创建内容列
f = new Field("body", news.body.toString() ,
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
doc.add(f);
try{
//文档增加到索引库
index.addDocument(doc);
}
catch(Exception e)
{
e.printStackTrace();
System.exit(-1);
}
}
}
完整的代码可以在本书附带的光盘找到。
运行以后,一般会生成三个索引文件,例如:
_0.cfs
segments.gen
![](https://csdnimg.cn/release/download_crawler_static/10745288/bg13.jpg)
遍历搜索引擎技术
- 9 -
segments_2
其中任何索引库都会包括的一个文件是:segments.gen。我们可以通过判断一个路径下
是否包括这个文件来判断一个路径下是否已经存在 Lucene 索引。
2.1.3 发布运行(5 分钟)
把搜索页面 index.jsp 放到 Tomcat。
<% if (!query.equals("")) { %>
<jsp:useBean id="search" class="com.bitmechanic.spindle.Search" scope="application">
<!-- Specify the directory that stores our Lucene index created by the spindle spider -->
<% search.init("d:/index"); %>
</jsp:useBean>
<jsp:setProperty name="search" property="query"/>
<list:init name="customers" listCreator="search" max="10">
<hr>
<list:hasResults>
<list:iterate>
<TABLE width="65%">
<TR>
<TD>
<a href="<list:iterateProp property="url"/>">
<B><FONT style="FONT-SIZE:
14px"><list:iterateProp property="title"/></FONT></B></a> <FONT size=-1
color=#6f6f6f>(<list:iterateProp property="source"/>) <list:iterateProp
property="accessDate"/></FONT>
![](https://csdnimg.cn/release/download_crawler_static/10745288/bg14.jpg)
遍历搜索引擎技术
- 10 -
</TD>
</TR>
<TR>
<TD>
<FONT size=-1><list:iterateProp
property="desc"/></FONT>
</TD>
</TR>
</TABLE>
</list:iterate>
<pg:pager
url="/index.jsp"
items="<%=Integer.parseInt(listSize)%>"
maxPageItems="10"
maxIndexPages="10"
export="currentPageNumber=pageNumber"
scope="request">
<pg:param name="query" value="<%=query%>"/>
<pg:index export="totalItems=itemCount">
剩余318页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38669689
- 粉丝: 27
- 资源: 300
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 新型矿用本安直流稳压电源设计:双重保护电路
- 煤矿掘进工作面安全因素研究:结构方程模型
- 利用同位素位移探测原子内部新型力
- 钻锚机钻臂动力学仿真分析与优化
- 钻孔成像技术在巷道松动圈检测与支护设计中的应用
- 极化与非极化ep碰撞中J/ψ的Sivers与cos2φ效应:理论分析与COMPASS验证
- 新疆矿区1200m深孔钻探关键技术与实践
- 建筑行业事故预防:综合动态事故致因理论的应用
- 北斗卫星监测系统在电网塔形实时监控中的应用
- 煤层气羽状水平井数值模拟:交替隐式算法的应用
- 开放字符串T对偶与双空间坐标变换
- 煤矿瓦斯抽采半径测定新方法——瓦斯储量法
- 大倾角大采高工作面设备稳定与安全控制关键技术
- 超标违规背景下的热波动影响分析
- 中国煤矿选煤设计进展与挑战:历史、现状与未来发展
- 反演技术与RBF神经网络在移动机器人控制中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)