关闭

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

标签: lucenescrapy搜索引擎信息检索导论现代信息检索
11703人阅读 评论(13) 收藏 举报
分类:

一、选题

工程类搜索型:

定向采集 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还需要学习很多东西,继续沉淀。
欢迎批评指正。

9
0
查看评论

Python+Lucene

Python+Lucene(pylucene) + Paoding的安装配置 pylucene让Python可以调用Lucene API实现搜索,这个项目紧跟Lucene的步调,对用惯了Python的同学来说是个福音。 pylucene是通过JCC实现的,JCC读...
  • xiaofang168
  • xiaofang168
  • 2013-07-12 14:41
  • 3051

pylucene在python2.7下的安装

安装文章,参考这篇文章:http://bendemott.blogspot.com/2013/11/installing-pylucene-4-451.html Why are we installing pylucene 4? This may be your first time u...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2015-10-14 20:01
  • 1382

使用lucene构建一个简单的搜索引擎

  • 2017-11-25 22:04
  • 5.54MB
  • 下载

lucene5.3.1+IKAnalyer 构建简单搜索引擎

项目应用场景最近需要做一个简单的信息展示系统,信息和普通新闻差不多,主要有标题和内容,信息需要能通过关键词检索到,考虑到信息比较简单,检索也很简单,主要是通过标题和内容搜索,不想用Solr搭建搜索引擎,想用的Lucene写个简的搜索,能构增加索引、删除索引,通过关键字搜索信息就可以了。项目依赖包Lu...
  • whzhaochao
  • whzhaochao
  • 2015-11-30 21:25
  • 1758

pylucence lucence的Python实现安装过程

一。JCC的安装 1. 安装gcc、make,Python27 apt-get install gcc make 2.安装setuptools 这步可以跳过 3.安装jdk 这步也可以跳过已经装好了 4.安装python2.5-dev 由于JCC在编译的时候要用到Python.h...
  • liumengni_lmn
  • liumengni_lmn
  • 2014-05-31 18:25
  • 504

python做全文检索引擎

** python做全文检索引擎** 最近一直在探索着如何用python实现像百度那样的关键词检索功能。说起关键词检索,我们会不由自主地联想到正则表达式。正则表达式是所有检索的基础,python中有个re类,是专门用于正则匹配。然而,光光是正则表达式是不能很好实现检索功能的。 pytho...
  • qq_30843221
  • qq_30843221
  • 2015-09-02 22:01
  • 4421

新闻信息检索(一)

Scrapy简介Scrapy是一个使用Python写的Crawler Framework, 简单轻巧,并且非常方便。它使用Twisted这个异步网络库来处理网络通讯,结构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。通过Zope.interface让Python支持了接口的开发方式。使用及...
  • liuguiyangnwpu
  • liuguiyangnwpu
  • 2016-01-05 11:25
  • 1459

用python写一个简单的中文搜索引擎

自己写代码实现一个简陋的中文的搜索引擎,作为一个小练习。 搜索范围限定在某个新闻网站内部,和百度site:(指定网址)的功能类似。把爬虫和解析的代码改改,也可以用于其他的搜索场合。 使用的编程语言为python。
  • ryinlovec
  • ryinlovec
  • 2016-12-09 23:10
  • 2081

Scrapy引擎

并行系统和管道系统很类似,在计算机科学中,我们用队列符号来代表队列和正被处理的元素(图1的左边部分)。排队系统的一个基础的定律就是Little定律,即系统达到平衡时,系统中元素的个数(N)等于系统的吞吐量乘以总的排队时间(S),N = T · S。 对于管道的几何问题也有一个相似的规律(...
  • Q_AN1314
  • Q_AN1314
  • 2016-04-25 14:27
  • 4757

搜索引擎数据源爬取——python scrapy

我选取的是爬取百度知道的html 作为我的搜索源数据,目前先打算做网页标题的搜索,选用了 python 的 scrapy 库来对网页进行爬取,爬取网页的标题,url,以及html,用sqlist3来对爬取的数据源进行管理。 爬取的过程是一个深度优先的过程,设定四个起始 url ,然后维护一个数据库,...
  • Virtual_Func
  • Virtual_Func
  • 2015-11-03 21:54
  • 2080
    《从Lucene到Elasticsearch:全文检索实战》
    Lucene、ES、ELK开发交流群:370734940
    Lucene、ES、ELK开发交流
    个人资料
    • 访问:935742次
    • 积分:9246
    • 等级:
    • 排名:第2379名
    • 原创:209篇
    • 转载:2篇
    • 译文:6篇
    • 评论:468条
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    博客专栏
    文章分类
    最新评论