问题

现在给出很多份文档,现在对某个搜索词感兴趣,想找到相关的文档。

简单搜索

一种简单粗暴的做法是:

1、读取每个文档;
2、找到其中含有搜索词的文档;
3、对找到的文档中搜索词出现的次数统计;
4、根据搜索词统计次数对文档按降序排序。

这称之为信息获取(Information Retrieval, IR),也叫简单搜索

普通IR方案存在的问题:
    文档的体积增大或者数量增多,算法效率会下降
   
改进搜索的方案

Lucene项目对文档进行索引来快速搜索。

问题又来了:
仅有索引仍不够,还有:

链接分析(PageRank)

用户点击分析

自然语言处理

无链接文档的排序,

这些技术能增强搜索功能。

搜索的过程

通过爬虫从互联网中搜集数文档
用Lucene来分析、索引并搜索搜集的文档。

搜索的基本过程:加载、索引、搜索。

FetchAndProcessCrawler类

快速读取和存储网页的类FetchAndProcessCrawler(还可从互联网读取数据),
采集数据并解析,处理结果放在一个目录中。
每一组处理过的文档,都有四个相应的子目录:fetched、knownurls、pagelinks和processed。
分开了网页的元数据和核心内容,取出网页的链接(外链,outlink)。

LuceneIndexer类

LuceneIndexer类(对LuceneIndexBuilder的包装)
对以处理过的数据进行索引
Lucene用IndexWriter类创建索引,其构造函数的三个参数为:
1、存放索引的目录
2、所使用的分析器
3、布尔变量,决定是否覆盖已有的目录

爬去的文档是按组分类的:
第一组是初始URL的文档
第二组是第一组文档链接指向的文档
第三组是第二组中文档中链接所指向的文档

indexDocument方法索引每组中各个文档的内容,Lucene的类Document类封装了所采集的文档,
从而能将它们添加到索引中,这个类不仅能用来封装网页,还能将所以可以解析并能转换成纯文本的文档。

每一个Document类的实例都是一个由若干个域组成的虚拟文档。
用分解的方法处理所采集的文档,从而为每个文档创建若干个Field实例。
content域:文本文档的内容,删除了格式化标签和其他注释
url域:用于获取文件的URL
docid域:文档独一无二的标识符
title域:文件的标题
doctype域:文件的类型

每个文档的content域都会被索引,但是不会存放在索引文件中;
其他域都会存放在索引文件中,但不会被索引。
尽管是对文档内容进行查询,但是也需要从索引文件中获得文档的URL、ID和标题。

这中常用的做法在索引文件中只需存放一些能识别搜索结果的指针,如果没有特别的原因
(例如随时获得部分内容,而原始来源不能直接访问),不需要直接把内容放在索引文件中。

MySearcher类

MySearcher类搜索新建的索引
构造方法为索引所在目录。
使用search方法进行搜索,有两个参数:
需要在索引中查询的字符串;
想要获取的文档数量的上限。

search方法的步骤:

1、使用Lucene的IndexSearcher类的实例打开要搜索的索引;

2、创建一个Lucene的QueryParser类的实例,参数是要搜索的域和分析查询文本所必需的分词器;

3、用QueryParser的parse方法将人类语言查询转换成一个Lucene能理解的Query实例;

4、搜索索引,结果以Lucene的Hits对象的形式返回;

5、遍历前n个结果,放在SearchResult对象中。Lucene的Hits对象中只含有指向文档的引用。用这些引用收集所需的域;

6、记录每个文档的相关性分数,在0~1之间。

用Lucene对文档进行索引搜索的更多相关文章

  1. ElasticSearch入门系列(三)文档,索引,搜索和聚合

    一.文档 在实际使用中的对象往往拥有复杂的数据结构 Elasticsearch是面向文档的,这意味着他可以存储整个对象或文档,然而他不仅仅是存储,还会索引每个文档的内容使之可以被搜索,在Elastic ...

  2. 有关Lucene的问题(4):影响Lucene对文档打分的四种方式

    原文出自:http://forfuture1978.iteye.com/blog/591804点击打开链接 在索引阶段设置Document Boost和Field Boost,存储在(.nrm)文件中 ...

  3. elasticsearch——海量文档高性能索引系统

    elasticsearch elasticsearch是一个高性能高扩展性的索引系统,底层基于apache lucene. 可结合kibana工具进行可视化. 概念: index 索引: 类似SQL中 ...

  4. ES 文档与索引介绍

    在之前的文章中,介绍了 ES 整体的架构和内容,这篇主要针对 ES 最小的存储单位 - 文档以及由文档组成的索引进行详细介绍. 会涉及到如下的内容: 文档的 CURD 操作. Dynamic Mapp ...

  5. Elasticsearch 7.x 之文档、索引和 REST API 【基础入门篇】

    前几天写过一篇<Elasticsearch 7.x 最详细安装及配置>,今天继续最新版基础入门内容.这一篇简单总结了 Elasticsearch 7.x 之文档.索引和 REST API. ...

  6. jdk1.8帮助文档中文可搜索

    jdk1.8帮助文档中文可搜索 链接:https://pan.baidu.com/s/11beeZLpEIhciOd14WkCpdg 提取码:t4lw

  7. 使用requests爬取梨视频、bilibili视频、汽车之家,bs4遍历文档树、搜索文档树,css选择器

    今日内容概要 使用requests爬取梨视频 requests+bs4爬取汽车之家 bs4遍历文档树 bs4搜索文档树 css选择器 内容详细 1.使用requests爬取梨视频 # 模拟发送http ...

  8. Lucene 对文档打分的规则整理记录

    摘引自:http://www.cnblogs.com/forfuture1978/archive/2010/02/08/1666137.html Lucene的搜索结果默认按相关度排序,这个相关度排序 ...

  9. glib 文档 代码 索引 编译

    ./configure --prefix=/opt/glib-2.28.8 --enable-staticmakemake install linux下载 WIN32下载 代码索引 文档索引 GLib ...

随机推荐

  1. HDUOJ---三角形(组合数学)

    http://acm.hdu.edu.cn/showproblem.php?pid=1249 三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  2. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  3. XP和Win 7双系统安装说明和注意事项

    安装前说明: 1.先装XP,再装Windows 7,最好不要反过来,不然XP不会把Windows 7的启动管理器给覆盖掉,会麻烦些.总之遵循“旧版本到新版本”安装原则. 2.如果分区不够大,请用以下软 ...

  4. EF GroupBy 分组 取某条的 总数

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. Python学习笔记016——面向对象

    面向对象是指用类来描述一个对象(实例),用类来建立实例与实例的关联关系 对象 : object     实例 : instance 1 类 1.1 什么是类 类是用来描述对象的工具,用类可以创建一个或 ...

  6. 《JAVA与模式》之参考资料

    1.书籍 <JHead First 设计模式(中文版)> <JAVA与模式> <大话设计模式> 2.连接地址 http://blog.csdn.net/jason0 ...

  7. STL之内存处理

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! STL中与内存配置相关的类是allocator类,头文件为:#include<alllocator>这是一个模板类,用于内存的分配.对象 ...

  8. 使用Htmlhelper,创建文本框TextBox

    下面通过HtmlHelper帮助类,创建文本框. 首先新建一个实体类,做为下面的例子: using System; using System.Collections.Generic; using Sy ...

  9. hive sql 修改列名

    ALTER TABLE dev.dev_jypt_jiadian_cate3_pred_20181109 CHANGE utem_third_cate_name item_third_cate_nam ...

  10. HTML: < 和 > 是何方神圣

    懂HTML的,都知道 < 表示 <,> 表示 >,那还有什么好写呢? 知道是知道,记不记得住是另外一回事,今天用到这两家伙,又给忘记了,还要特意查了下. 缩写不好记,如果能知道 ...