本博文将以叙事性的方式描述我的lucene学习过程,以此记录我的学习流程(也可以给读者作为参考。每周更新一次)
唠叨:2015年12月3日,到目前为止我已经学习lucene有两周多了,为什么我上周我没发《Lucene初学(二)》呢?因为我困在了lucene的实现上。我已经学习到《Lucene搜索引擎开发进阶实战》的第7章了,上周就已经学习到那。那里刚好开始讲解网站的lucene实现,所以我先是花了点时间去回忆JavaWeb。但由于一时回忆不起来,这么一周就过去了。(血淋淋的教训啊。。以后学习新技术别乱将不熟练的技术加进去,专心点)
今天讲解的内容涉及一些前置知识,未学过的,稍微跳过web实现部分吧。
前置知识:html+css+JavaScript,JQuery,Ajax,jsp,servlet,json,jdbc,MySQL,maven
开始:
今天的主题是“Lucene在web的实现”,目录如下:
1,lucene在web端的用途
2,lucene如何融入web
2.5,业务需求(自定义)
3,前期准备
4,如何安排步骤
5,经验总结
1,lucene在web端的用途
答:我是这么认为的,lucene不是一款完整的技术,他相当于一个工具盒。所以在页面提供关键字、条件等的输入,在后台利用lucene进行建立索引、搜索索引、组织信息等操作,然后将查询到的信息返回页面。如:百度、必应、google、知乎等。
2,lucene如何融入web
答:就我目前学习到的,
①可以在web创建之前,利用Indexer进行建立索引(如果时爬虫类的应用,或者更新型的,另当别论)。
②在提供关键字后,利用Searcher进行搜索索引,返回信息
2.5,业务需求(自定义)
答:
1,为数据库创建索引
2,通过网页输入关键字,将关键字传到后台分析后
3,搜索索引相关的信息
4,将信息回传到界面
5,显示多条结果
3,前期准备
答:
硬件:
1,编辑设备:联想笔记本电脑一台
软件:
1,数据库:MySQL最新版(轻量快捷)
2,开发工具:MyEclipse 2015 stable2.0,maven(带有自动下载jar包的功能)
3,使用技术:JQuery(使用最新版,暂时不考虑网页兼容性)+html+css+javascript+jsp,servlet(比较熟练),jdbc,json
4,做界面:直接用记事本Notepad++(速度快)
5,相关jar包:MySQL驱动,lucene-core,lucene-analysis,lucene-parser,org.json,servlet-api,junit
6,相关文件:jquery.js,json2.js
7,服务器:Tomcat8(目前仅有)
8,浏览器:google chrome(暂不考虑兼容性)
4,如何设计步骤
答:
-1,绘制总体格局图(从前端到后台,再到数据库)
-2,数据库准备数据
-3,制作界面
-4,后台分包
-5,分析实体,并创建相应的实体
-6,设计相关的model,util,service,servlet
-7,前端后台连接
-8,完善后台
-9,测试test
-10,发布到服务器
-11,访问
5,经验总结
答:
①别在做项目时,用自己感觉生疏的工具(适合的,才是最好的)
②先指定计划,一步一步地推进(MVC)
③给自己一个deadline。其实我上面的网站是花了1天做出来的,很简陋吧?但又很多时间都浪费在杂事上,所以要有一个deadline
下面是代码咯,我也会一步步地引导做出一个小网站,目录如下:
1,分析好上述的业务需求,最好是绘制出运作图。(以便理清思路,以及从宏观上掌握流程。我就不上图了,优快云弄不来)
2,准备好上述的“前期准备”。(打战,粮草先行)
3,界面设计与数据库的配置可以同步进行。
界面代码index.html(json2.js是一个js解析json格式数据的文件,百度一下就有):
<html>
<head>
<meta charset="UTF-8" />
<title>搜索引擎</title>
<script type="text/javascript" src="../js/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="../js/json2.js"></script>
<script type="text/javascript">
function search() {
$.ajax({
url : "../SearchServlet", //请求的url
data : {
keyword : $("#keyword").val()
}, //json格式
datatype : "text", //返回的数据类型
type : "post", //请求的方式
success : function(data) { //请求成功后执行的回调函数,data为返回的数据
$("#outcome").html("");
var outcome = JSON.parse(data);
for (i = 0; i < outcome.length; i++) {
$("#outcome").append(
"用户名: " + outcome[i].username + "<br>信息:"
+ outcome[i].content + "<br><br>");
}
if (outcome.length == 0) {
$("#outcome").append("没有结果o(╯□╰)o");
}
}
});
}
</script>
</head>
<body>
<h1>搜索引擎</h1>
<h6 style="color:red">请在下方输入关键词</h6>
<input type="text" id="keyword" />
<input type="button" value="搜索一下" οnclick="search()" />
<br>
<br>
<br>
<h3>结果:</h3>
<div id="outcome"></div>
</body>
</html>
数据库可以随意一点,在这里我设置的是:
数据库名:lucene_data
表名:t_user
表结构:
user_id:用户id,int,自增,主键
user_name:用户名,varchar
content:用户描述,varchar
当然,数据库还要插入一些数据。
4,后台设计,这里就要用到第一步时的业务逻辑图了,为了简单,我只使用了主要的三个类(其余类,我将简单描述,不作深入分析)。
Indexer:创建索引
Searcher:搜索索引
SearchServlet:主要的搜索入口
5,上面的代码都可以参照《Lucene搜索引擎开发进阶实战》,不过我的代码不是书上的,是自己写的,所以稍微有些不同。
所以,这一步主要是junit测试。
6,启动网站试一下吧!!!
下面是百度云中,我的代码:http://pan.baidu.com/s/1mhoOYzm