《信息检索》课程大作业 实现一个本地搜索引擎

本文档详细介绍了使用Larbin网络爬虫和Xunsearch搜索引擎构建一个名为‘先锋检索’的系统的过程。系统从指定的种子网页抓取数据,经过BeautifulSoup4解析,存储到数据库,然后通过Xunsearch进行索引和搜索。讨论了Larbin的高效抓取、Xunsearch的特性以及网页解析的实现。项目已部署在Linux环境下,并提供了完整的源代码和设计文档。

《先锋检索》——开发文档

也是本人的第一篇博客


这篇博客是本人《信息检索》课程大作业的开发文档,使用了larbin(网络爬虫)+xunsearch(搜索引擎解决方案)的解决方案。事实上,或许有更多更简单/更高超的方案,但是我使用的这个方案,一方面,相比一些需要较高技术的方案节省了大量的时间;另一方面,相对于一些现成的代码实际上仍然需要一些简单的操作,有利于进一步加强对“信息检索”实现过程的理解。

注意:本系统需要在Linux下部署运行,本人曾尝试使用Ubuntu18.0 /Centos 7.0部署,均获得成功。可能需要使用虚拟机,有关教程请自行搜索,相信你一定行。

第一部分主要介绍一些理论上的内容;实操性的内容从第二部分设计文档开始。

文末附有本项目的仓库链接。

一些细节,如文件应该放在那个文件夹下、命令行应该在哪个文件夹中运行,可能没有显式地指出,希望读者可以从附图中得到有关信息,或自行尝试。

项目地址:https://gitee.com/CHH12/IR-project-pioneer-search

仓库中含有完整设计文档。

(由于选题原因,一些图片不能展示,敬请移步仓库下载PDF原版)


目录

(一)系统说明

一、系统架构

二、模块介绍

1.网络爬虫——Larbin

2.前端+搜索引擎:Xunsearch(迅搜)& Xapian

3.网页解析与数据存储:Parser.py(BeautifulSoup4)

(二)设计文档

一、运行环境

二、总体设计流程

三、各模块设计细节

1.网络爬虫模块

2.解析器模块

3.搜索引擎模块

四、网站页面一览


本搜索引擎主要收录与 红色 有关的网页文档,基于这一描述,我决定将本搜索引擎命名为“先锋检索”。

本搜索引擎系统主要架构如上图所示。

检索的源文档由网络爬虫从给定的种子网页开始爬取,爬取到本地后利用Python中的BeautifulSoup4模块进行网页的解析,并写入数据库中,完成网页文档数据的获取。

之后利用搜索引擎解决方案Xunsearch(迅搜)构建搜索引擎,利用索引器Indexer对文档数据进行索引,并构建基于Xapian的后端搜索服务器与前端的搜索应用,向用户展示出搜索功能。

Larbin是一种开源的网络爬虫,由法国人Sébastien Ailleret独立开发,用c++语言实现。

Larbin设计简单,具有高度的可配置性,能够配置抓取深度、间隔、并发度、代理,并支持通过后缀名对抓取网页进行过滤。

Larbin具有非常高的效率,一个简单的larbin的爬虫可以每天获取500万的网页,可以轻易的获取/确定单个网站的所有联结,还可以镜像一个网站。Larbin能够跟踪从给定的种子页面出发,进行自动扩展url的页面抓取与保存,从而为搜索引擎提供广泛的数据来源。

美中不足的是,Larbin只是一个爬虫,只抓取网页,并不负责网页的解析、数据库的存储以及索引的建立,也不支持分布式系统。另外,Larbin已经较长时间不再更新,因而不支持https协议,这在今天很大程度上造成了网页页面的局限性。

这里采用由国人在基于原版Larbin2.6.3版本上继续开发并发布于GitHub的Larbin2.6.5版本进行搜索引擎系统的构建。

项目网址:https://github.com/ictxiangxin/larbin

2.前端+搜索引擎:Xunsearch(迅搜)& Xapian

(1)Xunsearch

Xunsearch(迅搜)是一以 GPL 协议开源发布的高性能、全功能的全文检索解决方案,并针对中文深度优化和处理,用于帮助开发者针对海量数据快速建立搜索引擎。

Xunsearch 采用结构化分层设计,包含后端服务器和前端开发包两大部分。后端是用 C/C++ 基于 Xapian搜索库、SCWS 中文分词、libevent 等开源库开发,借鉴了 nginx 的多进程多线程混合工作方式,是一个可承载高并发的高性能服务端。前端则是使用流行的脚本语言编写了开发工具包(SDK)。

Xunsearch具有以下特点:

  1. 海量数据下高速搜索响应。单库最多支持 40 亿条数据,在 500 万张网页1.5TB 数据中,非缓存检索时间约 0.5 秒。
  2. 为搜索而自主开发 scws 中文分词库,支持复合分词、自定义补充词库,保障查全率、准确率。
  3. 拥有健壮稳定的后端守护程序、内置缓存池与线程池用于保障性能。
  4. 索引接口齐全,索引添加简便,支持实时搜索,支持多种数据源 ( SQL, JSON, CSV等)。
  5. 开发难度较低,具备规范的中文文档、示范代码,以及非常实用的辅助工具。
  6. 除通用搜索引擎功能外,还内置支持拼音检索、分面搜索、相关搜索、同义词搜索、搜索纠错建议等专业功能。
  7. 与 Lucene/Sphinx 等相比,xunsearch 提供了更丰富且必需的功能。

在开发的过程中,正是得益于xunsearch所提供的多种方便的工具,才能够让我在短时间内得以顺利地开发完成本项目。

特别注意到,Xunsearch中的索引有如下特点:

  1. Xunsearch 每个搜索项目的索引数据是分开单独存放的,索引本质上是一系列预设计文件, 内部都是特别设计的 Tree 结构。
  2. 包含 2 个主要索引数据库,分别是db 默认的主索引数据库,存放各种检索数据;log_db 搜索日志数据库,用于存放搜索日志相关,用于实现相关搜索、搜索建议、拼音搜索等。
  3. 索引操作(包含添加、删除、修改文档)均是异步的行为,以达到性能优化设计。

(2)Xapian

Xunsearch基于Xapian搜索引擎库开发,也正是在Xapian的支持下xunsearch才能有前文所述的高速搜索响应。

在Xapian的文档中,官方称 Xapian是一个“允许开发人员轻易地添加高级索引和搜索功能到他们的应用系统的高度可修改的工具,它在支持概率论检索模型的同时也支持布尔型操作查询集”。

实际上Xapian与Lucene有许多相似之处,如二者都有Term、Value、Posting、Position和Document这些概念。

当然,而二者也有许多不同:Xapian基于C++进行开发,可以绑定到多种语言,可移植性高;Xapian采用BM-25模型,具有较好的检索效果;Xapian的检索性能远远高于Lucene。

Xapian提供了多种查询机制,包括:概率性搜索排名、相关度反馈、邻近搜索、布尔搜索、词干提取、通配符查询、别名查询、拼写纠正等,为开发者提供了丰富的功能。

Xpian的主要功能点总结如下:

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值