1 软件概述
1.1 编写目的
随着计算机产业的迅猛发展,搜索引擎也应运而生。用户直接获得自己想要的信息其实是很简单,但是面对着简单的搜索框,很多用户都只是了解大概,要想了解的更彻底关键在于学会怎么来用。为了用户能够更快更方便的获得想要的信息,本人针对自己开发的搜索引擎包特编写了使用说明书。
1.2 搜索引擎介绍
1.2.1 搜索引擎定义
搜索引擎主要用于帮助互联网用户查询信息的搜索工具,它以一定的策略在互联网中搜集、发现信息,对信息进行理解、提取、组织及处理,并且能为用户提供检索服务,从而起到信息导航的目的因此,搜索引擎是用来在网上找资料的工具。
1.2.2 搜索引擎系统结构图
图1 系统结构图
1.2.3主要功能
本人开发的搜索引擎主要是进行信息检索,从而返回检索结果。搜索引擎将用户所产生的一些信息列入了排序因素中,具有对各大商城的网站进行抓取、建立索引、搜索比价的功能。它是网络营销中最重要的组成部分,是向终端客户传递信息的重要环节。
搜索界面如下图:
1.2.4 主要特点
1.2.4.1 快速地为搜索文件建立索引,支持追加,重建,和不同编码的搜索文件。
1.2.4.2 搜索引擎支持关键字搜索,与或非逻辑搜索,支持按需返回搜索结果。
1.2.4.3 web服务器能快速连接搜索引擎,支持用户的多样化搜索,并展示搜索结果。
2 如何编译fts
1. aclocal
2. automake --add-missing
3. autoconf
4. ./configure
5. make
编译成功以后,在../src/目录下,有index.exe, search.exe 和shutdown.exe。
2.1 index.exe
index.exe是对网络爬虫抓来的网页建立索引,-D源目录,-d索引目录,-R重建索引(只在第一次用),-c 国标或台湾
$ ./index -D /cygdrive/c/tf/src/ -d /cygdrive/c/tf/trg -R -c GB2312
Start indexing ...
Indexing /cygdrive/c/tf/src/Copy of baima.t4i
# of Files Processed : 1
# of Files Indexed : 1
Total Data Processed : 136.242 KB.
Average Processing Rate : 45.4141 KBps.
Total Time Used : 3 seconds.
Total Processor Time Used : 2.875 seconds.
CPU Usage : 95.8333%
2.2 search.exe
Search.exe 会在已建立的索引上运行一个socket服务器,可以接收多个搜索请求,默认听在端口30001。
$ ./search -d /cygdrive/c/tf/trg/
InfoAcer FTS Search Engine is running on port 30001.
搜索请求的格式是:GET3 <关键词> <WITH_HILITE> <WITH_RANKING> <WITH_ID_PATH> <WITH_SORT>
WITH_HILITE 在搜索结果中高亮关键词
WITH_RANKING 按照评分的标准
WITH_ID_PATH 返回文件路径或URL
WITH_SORT 排序
返回结果以TLV来切分多个结果。
2.3 shutdown.exe
Shutdown.exe用来安全关闭search.exe的服务。
3 如何使用
3.1 搜索引擎准备事项
3.1.1 搜索引擎软件包
图2 搜索引擎软件包
我们要用到以下两个文件:Index.exe 用来建立索引。Search.exe 用来开启搜索引擎。
3.1.2 t4i文件
t4i文件即为*.t4i文件,它是要检索的内容来源。与该搜索引擎匹配的t4i文件须有如下格式:
<1>content1<\1><2>content2<\2><3>content3<\3>.......
红色部分为详细内容。比如一手机信息的t4i文件为:
图3
现版本搜索引擎仅支持Big5和GB2312编码,所以t4i文件中应采用以上两种编码。
为支持全文搜索,强烈建议增加最后一个栏位,添加所有信息。如图中栏位<6>。
3.1.3 文件拷贝
通常,把t4i文件拷贝到search/tf/src/目录下(假定search.exe和index.exe在search/目录下),如图4所示:
图4
另在tf目录下新建文件夹trg。(缺少该步骤建索引时会报错)
3.2 建立索引并开启搜索引擎
3.2.1 建索引
index.exe是对t4i文件建立索引,-D源目录,-d索引目录,-R重建索引(只在第一次用),-c 国标或台湾 –r 遍历子目录 可用–h 查看帮助。
运行命令提示符,转到搜索引擎目录。建索引命令格式
index.exe –D tf\src –d tf\trg –R -r –c GB2312
索引建立完毕,结果如下:
3.2.2 开启搜索引擎
Search.exe 会在已建立的索引上运行一个socket服务器,可以接收多个搜索请求,默认听在端口30001。
命令如下,执行后程序便会在30001端口监听搜索请求。
3.3 使用搜索引擎
需要发送两条TCP包和接受两条TCP包来完成搜索过程。
第一步:与search.exe建立socket连接。
第二步:发送搜索请求。
QUERY VECTOR:(keyword)#Num;\n
其中keyword表示要查询的关键字,Num表示栏位号码。如想在栏位6中搜索“诺基亚”, 搜索请求命令这样写:
QUERY VECTOR:(诺基亚)#6;\n
另外,还支持多栏位搜索,可通过& | !来创建与或非逻辑表达式。如果想搜索太平洋商城的诺基亚,搜索请求命令这样写:
QUERY VECTOR:(诺基亚)#6&(太平洋)#0;\n
一般说来,搜索引擎反馈结果为OK 2 <result id> <result number>;\n
<result id>是搜索引擎内部的ID,有多少个ID就有多少个cache搜索结果。
<result number>是此次搜索共有多少个结果。
如OK 2 0 100表示搜索到100个结果。
如果接收到FAILED 2 -1 ;\n 或其他,表示本次搜索失败。通常是搜索请求命令有错。
第三步:发送接收搜索结果命令。
GET3 <result id> <start ind> <end ind> WITH_SORT WITH_HILITE WITH_ID_PATH;\n
<result id> 是从上一个OK回复得来的,同时也知道有多少个命中
<start ind> <end ind> 表示请求搜索结果的ID。可把搜索结果想象一数组,两参量表示数组下标。
WITH_HILITE是返回需要高亮的关键词(不一定和用户输入结果一致)
WITH_SORT 是对结果进行排序WITH_ID_PATH是返回原始文件本地路径
如想得到前两个结果:
GET3 <result id> 0 1 ITH_SORT WITH_HILITE WITH_ID_PATH;\n
搜索引擎响应:
OK 13 # < <file id> <path> <content> <ranking>>
content是该t4i的内容。此回复会含多个<file id> <path> <content> <.ranking>,具体数目是由<start ind> <end ind>决定的。
如果不涉及价位区间搜索,到此就该结束了。
如果要做区间,可参考下面文字(图5)。
图5
4 前期处理
图6 前期处理流程图
在网络爬虫程序把目标网页存到本地后,应该用处理程序进行初步处理,根据不同的字典来进行扫描,将html控制代码,多余的广告的无用信息去除,只保存有命中率的页面并存成纯文本格式,这样会提高索引准确率和效率。
这里提到的字典是人工创建的,开发人员应将不同类别的关键词汇放到字典文件中,由前期处理程序读取并记录每个目标页面关键词的命中率,当所有关键词的命中率为0时,此页面将被丢弃,否则转换成文本格式以便建索引。
如何建立字典?除了人们日常的词汇,开发人员应下载一些不同类别的目标页面,搜集最新关键词来丰富词典,从而提高字典的准确性。
如果想要不同的分类,比如餐饮,电子和旅游,那么就要有三个字典,分别包含餐饮,电子和旅游的关键词。
这样通过前期处理程序就会有三类文本文件,分别对应餐饮,电子和旅游这三类。也就意味着有三个分类索引,这样用户就可选择不同类别的搜索。
这样用户可以选择不同类别来搜索,可以增大命中率。当然也可以选择所有类别来搜索。
5 搜索界面
应由java语言写成,提供不同类别的搜索界面,就像雅虎的分类搜索,列出所有的类别。
用户也可以搜索所有类别,但搜索引擎就会跨越所有类别,速度和准确率都会有所下降。
6 Handler环境搭建与配置
Handler是搜索引擎与客户端的中间环节,负责向搜索引擎请求搜索数据,并把返回结果展示给客户端。该部分是基于Ruby on Rails开发的,接下来将带你一步步搭建和配置该环境,并进行测试。
步骤如下:
1) Ruby on Rails的下载与安装
2) 工程文件导入
3) 开启搜索引擎
4) 开启服务器
5) 测试,界面浏览
6.1 Ruby on Rails的下载与安装
InstantRails最新版本为2.0,下载地址是
http://rubyforge.org/frs/?group_id=904&release_id=17517。
InstantRails是绿色软件,下载完毕后解压即可使用。
6.2 工程文件导入
Rails工程文件导入
将test文件解压到%railsroot%\InstantRails-2.0-win\rails_apps下,其中%railsroot%是InstantRails的安装路径。下图为本机上的解压路径。
t4i文件导入
将t4i文件拷贝到%serchroot%\Search\tf\src下,%serchroot%是搜索引擎search所在目录。
6.3 开启搜索引擎
建立索引
运行命令提示符,进入搜索引擎search所在目录。输入命令如下:
结果如下:
启动搜索引擎
命令如下,执行后程序便会在30001端口监听搜索请求。
6.4 开启服务器
在开启服务器之前,需要针对搭建环境修改部分代码。
更改IP
如果不是本机测试,即搜索引擎和handler不在同一台机器上运行,需要修改%railsroot%\InstantRails-2.0-win\rails_app\test\app\controllers\bridge_controller.rb文件,将Line20中“127.0.0.1”改为搜索引擎所在主机的IP地址。%railsroot%是InstantRails的安装路径。本机运行跳过此步骤。
重定位资源文件目录
打开%railsroot%\InstantRails-2.0-win\rails_apps\test\app\views\bridge\search.html.erb
将Line29中的
"E:\\java\\workspace\\heritrix\\jobs\\JingDongShangCheng-20110707095841078\\mirror"替换为抓取的网页所在目录。否则浏览时不能显示图片。
启动服务器
打开%railsroot%\InstantRails-2.0-win\InstantRails.exe,点击“工”字形图标,在弹出网页中选择Rails Applications\Manage Rails Applications...
在弹出的Rails Applications页面下勾选test工程,点击Configure Startup Mode...可以配置端口,这里我使用的是3003端口。点击按钮Start with Mongrel。
服务器启动完毕效果如下:
6.5 界面浏览测试
打开IE,键入地址http://localhost:3003/bridge/index ,结果如图7所示:
图7
在图8中输入搜索关键字,如“华为”,点击“search“按钮,可搜索到商品网页。
图8
图9
如图9中的商品网页,有相关的广告栏位、分类选项、搜索结果等。
搜索结果的价格可以做比较,点击图9中的“比购一下”按钮,则会弹出各个商家的报价信息(如图10所示),通过价格比较,确保您能找到最低价的商品。
图10
点击图9中标注的“more”,则会出现商品(华为U8800手机)的详细信息,如图11。
图11
搜索结果的图片可以放大,将鼠标放在手机图片上,则会出现华为手机大图(图12)。
图12
公司网址:http://www.cxwm.cn
公司邮箱:[email protected]