scrapy+Lucene搭建小型搜索引擎(现代信息检索大作业)

简介: 一、选题工程类搜索型: 定向采集 3-4 个新闻网站, 实现这些网站信息的抽取、索引和检索。网页数 目不少于 10 万条。

一、选题

工程类搜索型:

定向采集 3-4 个新闻网站, 实现这些网站信息的抽取、索引和检索。网页数 目不少于 10 万条。能按相关度、时间、热度 (需要自己定义) 等属性进行排序, 能实现相似 新闻的自动聚类。
要求: 有相关搜索推荐、snippet 生成、结果预览 (鼠标移到相关结果, 能预览) 功能

二、开发工具

  • jdk 版本:1.7
  • 服务器:Tomcat7.0
  • python:2.7
  • scrapy:1.0

三、设计方案

3.1整体思路

在实现新闻信息检索系统时首先进行了信息采集,信息采集结束之后使用 Lucene 提供的 api 构建索引库, 前端使用 jsp 接收用户查询,在后台使用 servlet 对用户查询进 行分词处理,之后到索引库中进行文档匹配, 最后把查询结果集反馈给用户并在前端页面中 展示。

3.2信息采集

Scrapy 是 Python 开发的一个快速、高层次的屏幕抓取和 web 抓取框架,用于抓取 web 站点并从页面中提取结构化的数据。我们采集了 10w+ 新闻数据, 新闻信息以 json 文件格 式保存。scrapy 采集流程:
这里写图片描述
采集到的新闻数据:
这里写图片描述
新闻格式:
这里写图片描述

3.3倒排索引构建

在索引构建模块,主要包括下面三个关键步骤: 数据预处理、新闻内容分词、构建倒排 索引。
**数据预处理:**Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象, 或者反过来。我们使用 Gson 把 json 文件转换为 News 对象
**中文分词:**IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具 包,IK 发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默 认优化实现。IK 分词采用了特有的“正向迭代最细粒度切分算法“, 支持细粒度和智能分词两 种切分模式, 并且采用了多子处理器分析模式, 支持英文字母、数字、中文词汇等分词处理, 兼容韩文、日文字符。
**构建倒排索引:**Lucene 提供了构建倒排索引的方法,步骤如下图所示:
这里写图片描述
Luke 是一个用于 Lucene 搜索引擎的,方便开发和诊断的第三方工具,它可以访问
现有 Lucene 的索引. 使用 luke 打开索引目录,可以看到新闻信息被存储到索引库中。
这里写图片描述

3.4索引查询

索引创建好以后,查询可分为以下几个步骤:
1. 设置查询索引的目录 (这里就是上面创建索引的目录).
2. 创建 indexSearcher.
3. 设置 query 的分词方式
4. 设置查询域, 比如查询域为 news title, 那么就到新闻标题域去比对 5. 设置查询字符串,也就是要查询的关键词.
6. 返回结果是一个文档集合,放在 TopDocs 中,通过循环 TopDocs 数组输出查询结果. 用户一般只看前几页的数据,为了加快前端的数据展示, 返回前 1000 条数据到前台。

3.5关键字高亮

检索结果高亮对于用户的体验度和友好度非常重要,可以快速标记出用户检索对关键 词。Lucene 的 Highlighter 类可以用于返回文档中的关键字高亮,通过在关键字前面添加 css 片段来实现。

3.6用户界面

使用 jsp 编写用户界面,服务器为 Tomcat 7.0, 用户输入关键词以后提交表单,后
台使用 servlet 接收用户查询, 之后把查询字符串作为搜索的 key 到索引库中搜索文档。检索效果:
这里写图片描述

3.7按时间排序和结果分页

按时间排序: 所有的新闻结果存放在一个 list 集合中,集合中的每个元素为一个 News 对象, 通过重写 Comparator 类中的 compare 方法实现按集合中每个新闻元素的 Time 排 序。
结果分页: 定义了一个 Page 类用来记录当前页、总页数、每页多少条数据、总的数据 数、每页起始数、每页终止数、是否有下一页、是否有前一页。

四、参考资料

下面列出可参考的资料:
1. lucene全文检索基础
2. lucene创建索引
3. Lucene查询索引
4. Lucene查询结果高亮
5. Lucene 查询(Query)子类
6. java操作json
7. java集合
8. servlet基础

五、总结

开源工具的使用显著提高了开 发效率,但build from ground还需要学习很多东西,继续沉淀。
欢迎批评指正。

目录
相关文章
|
26天前
|
自然语言处理 搜索推荐 算法
基于Lucene的搜索引擎的设计与实现
基于Lucene的搜索引擎的设计与实现
10 0
|
2月前
|
SQL 搜索推荐 数据库
分布式搜索引擎_学习笔记_3
分布式搜索引擎_学习笔记_3
19 1
|
8月前
|
数据采集 XML 搜索推荐
聚焦Python分布式爬虫必学框架Scrapy打造搜索引擎
聚焦Python分布式爬虫必学框架Scrapy打造搜索引擎
|
8月前
|
存储 搜索推荐 数据挖掘
深入探索Elasticsearch搜索引擎:高效搜索和分析的利器
在现代信息时代,数据量爆炸式增长,如何高效地搜索、分析和检索数据成为了一个重要的挑战。Elasticsearch作为一款分布式、实时搜索和分析引擎,为我们提供了强大的解决方案。本文将深入探讨Elasticsearch的基本概念、特点,以及如何在实际应用中应用它来实现高效的搜索和分析。
81 1
|
9月前
|
搜索推荐 数据库 Python
基于python+django的电影搜索网站-搜索引擎系统设计与实现
该项目是基于python的web类库django开发的一套web网站,给师弟做的课程设计。 本人的研究方向是一项关于搜索的研究项目。在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和更新。通过开发该项目,笔者学习和巩固了python的相关技术和框架。
142 0
|
11月前
|
分布式计算 算法 Java
白话Elasticsearch16-深度探秘搜索技术之使用原生cross-fiedls技术解决搜索弊端
白话Elasticsearch16-深度探秘搜索技术之使用原生cross-fiedls技术解决搜索弊端
71 0
|
存储 算法 搜索推荐
【GoDance搜索引擎】搜索引擎集群模块实现笔记
【GoDance搜索引擎】搜索引擎集群模块实现笔记
【GoDance搜索引擎】搜索引擎集群模块实现笔记
|
存储 自然语言处理 搜索推荐
快速上手搜索引擎的秘密武器——Lucene
这篇文章介绍下这个 Lucene,下篇写写 ElasticSearch , 然后再继续填 Spring 的坑 🕳 内容的话就很基础啦🐖,希望能帮你快速入门,了解下它
118 0
|
数据采集 消息中间件 前端开发
分布式爬虫和搜索的设计与实现
爬取网站,采用流程节点,用来处理摘要计算、关键字计算、相似度计算、热度计算。数据经过流程计算以后,落库,建立倒排索引。搜索根据关键词到倒排索引表可以快速搜索。 实现步骤 1.基础工作:收集一些网址,作为爬虫的入口。种子url表结构: { “_id” : ObjectId(“c54c4352310b3c”), “urlId” : “io563784uiodf7e96bb9i
1531 0
|
数据采集 搜索推荐 Python
24、Python快速开发分布式搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图
【百度云搜索:http://www.lqkweb.com】 【搜网盘:http://www.swpan.cn】 1、基本概念 2、反爬虫的目的 3、爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图
5986 0