1.4 搜索引擎的基本技术
一个基本的搜索包括采集数据的爬虫和索引库管理,以及搜索页面展现等,本书的第2章至第6章将进行详细介绍。
1.4.1 网络爬虫
网络爬虫(Spider)又被称作网络机器人(Robot)或crawler,它的主要目的是获取在Internet上的信息。只有掌握了“吸星大法”,才能源源不断地获取信息。网络爬虫利用主页中的超文本链接遍历Web,通过URL引用从一个HTML文件爬行到另一个HTML文件。https://dmoz-odp.org 是整个互联网抓取的入口。网络爬虫收集到的信息可以有多种用途,如建立索引、验证HTML文件、验证URL链接、获取更新信息、站点镜像等。网络爬虫建立的页面数据库包含根据页面内容生成的文摘,这是一个非常重要的特色。
在抓取网页时,大部分网络机器人会遵循Robot.txt协议。
网站本身可以声明不想被搜索引擎收入的内容,有两种实现方式:第一种方式是在站点中增加一个纯文本文件,http://www.lietu.com/robots.txt;第二种方式是直接在HTML页面中使用robots的<meta>标签。
1.4.2 全文索引结构
为了根据词快速定位文件,需要为文件建立全文索引。图1-2所示是一个全文索引示例。
图1-2 全文索引示例
例如,有如下两个文件。
Doc1:When in Rome,do as the Romans do.
Doc2:When do you come back from Rome?
文件经过如下停用词表的过滤:
in,as,the,from
在Lucene中形成的索引结构如图1-3所示。
图1-3 在Lucene中形成的索引结构
在Lucene的索引文件中,以.tis为后缀的文件中包含了term信息,以.frq为后缀的文件记录包含term的文件编号和在文件中出现的频率信息,以.prx为后缀的文件中包含了term出现的位置。
折半查找Term。对于特别大的顺序集合可以用插值查找提高查找速度。
1.4.3 Solr全文检索引擎
Lucene是一个开放源代码的全文索引库。Solr是以Lucene为核心构建的全文搜索服务器。经过十多年的发展,Lucene/Solr拥有了大量的用户和活跃的开发团队。它最初是用 Java 语言开发的,后来有了 C#语言等移植版本。Lucene/Solr 的官方网站地址是http://lucene.apache.org。
Solr 客户端支持多种开发语言。Solr 返回的数据格式通常是 javabin,也支持返回JSON、XML格式的数据。Solr客户端列表如表1-1所示。
表1-1 Solr客户端列表
1.4.4 Nutch网络搜索软件
Nutch是构架于Lucene索引库基础之上的网络搜索引擎。按照Nutch的设计,它搜索的范围可以是本地的局域网、Intranet、垂直的行业信息或整个互联网。抓取和搜索是Nutch的基本组成部分。Nutch的基本结构如图1-4所示。
Nutch从0.8版本开始,把分布式计算处理部分独立出来,命名为Hadoop。Hadoop 主要包括分布式文件系统(分布式文件系统的实现在org.apache.hadoop.dfs中)和MapReduce分布式数据处理器(MapReduce的实现在org.apache.hadoop.mapred中)。
图1-4 Nutch的基本结构
1.4.5 用户界面
搜索用户界面一般由搜索首页、搜索结果显示页和高级搜索页组成。图 1-5 所示的搜索首页包含一个搜索输入提示的效果。
图1-5 搜索首页
图1-6所示是一个搜索结果页面。
在搜索输入框下面会给出相关搜索词列表。如果用户搜索错误,那么在搜索输入框下面会给出可能的查询词提示“您是不是要找:×××”,如图1-7所示。
图1-6 搜索结果页面
图1-7 查询词提示
图1-8所示是一个高级搜索页面。
图1-8 高级搜索页面
如图 1-8 所示,界面中包含对“标题”、“内容”、“作者名称”和“发布日期”多个字段的联合查询,它们之间是“与”的逻辑关系。