搜索引擎 (一)全文资源检索框架Lucene

      今天来写写搜索,现在做的这个项目中涉及到了很多的搜索大部分是我做的,有次经理问我有没有用过luence这个搜索引擎,这个还真没有用过只是听说过有这么个搜索工具包,一直没有接触过,利用做项目空闲的时间也在逐渐了解搜索方面的东西,对搜索也重新认识了一下觉得搜索方向还是很值得我们研究和应用的。

      在学习方面有时选择好一个正确的学习方向是比较重要的,在我们学的过程中米老师给我指明了方向所以你不会迷茫,也知道下一步将要学习什么,但慢慢的你需要自己确定学习什么,转变角色,互联网这么发达信息量如海一般在你面前呈现,平时上个网点击这里点击那里感觉永远没有尽头,网上的信息也特别特别的多,找一个不错的方向学习是很值得的事情,想想无论是PC应用还是手机都有搜索功能,现在是大数据的时代数据都是以T为单位,怎么样才会快速搜出用户想要的东西越来越值得关注。

      大数据定义:

      大数据是一个包括一切的术语,指的是数据集很大很复杂,他们需要特别设计的硬件和软件工具。数据集通常是 T 或者更大级别。这些数据集从各种各样的来源创建,包括传感器,收集气象信息,公开可用的信息,如杂志、报纸、文章。还包括购买交易记录、网络日志、医疗记录、军事侦察、视频和图像档案和大规模的电子商务等等。

      luence你可以这样定位:它可以说是搜索的代名词一提到搜索一般都会想到luence,除了它还有很多类似的搜索工具想看的文章后面有链接,可以自己去看看。

      Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。 Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

      特性:

  • 索引过程:
    • 在现在流行的硬件平台上每个小时可处理超过 150GB 的数据
    • 内存占用小,只需 1MB 的堆内存
    • 增量索引和批量索引速度一样快
    • 索引大小约为文本索引的 20-30% 大小
    • 静态索引修剪
  • 搜索算法:
    • 范围搜索 - 优先返回最佳结果
    • 很多强大的查询类型:短语查询、通配符查询、近似查询、范围查询等
    • 可单独针对某个字段查询
    • 可单独根据某个字段排序
    • 多索引搜索并合并搜索结果
    • 允许同步更新索引和搜索
    • 灵活的门面搜索、高亮显示、结果集的联合和分组
    • 快速,低内存占用和容错
    • 可插入式排名模型,包括 VSM 和 Okapi MB25
    • 可配置的存储引擎
  • 跨平台解决方案
    • 100% 纯 Java
    • 其他语言提供索引兼容的实现

      作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。

      例如大家所熟知的OSChina、Eclipse、MyEclipse、JForum等等都是使用了luence未做搜索框架来实现自己的搜索部分内容,在我们自己的项目中很有必要加入他的搜索能力,可以大大提高我们开发系统的搜索体验度。

       延伸阅读:

       在luence扩展的另一个开放源码以及没有保密内容的搜索是Nutch,现在很多搜索引擎其实并不是网站访问量高就会搜到你,很多是付费搜索你给的价钱高我就会让我的搜索搜到你。

     Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

     尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降. 并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益.这显然 不利于广大Internet用户.

     Nutch为我们提供了这样一个不同的选择. 相对于那些商用的搜索引擎, Nutch作为开放源代码 搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置. 除此之外, 有的搜索引擎依照网站所付的 费用, 而不是根据它们本身的价值进行排序. 与它们不同, Nucth没有什么需要隐瞒, 也没有 动机去扭曲搜索的结果. Nutch将尽自己最大的努力为用户提供最好的搜索结果.

     Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须能够做到:

  • 每个月取几十亿网页
  • 为这些网页维护一个索引
  • 对索引文件进行每秒上千次的搜索
  • 提供高质量的搜索结果
  • 以最小的成本运作

     luence和应用程序之间的关系



原理分析

      索引是现代搜索引擎的核心,建立索引的过程就是把源数据处理成非常方便查询的索引文件的过程。为什么索引这么重要呢,试想你现在要在大量的文档中搜索含有某个关键词的文档,那么如果不建立索引的话你就需要把这些文档顺序的读入内存,然后检查这个文章中是不是含有要查找的关键词,这样的话就会耗费非常多的时间,想想搜索引擎可是在毫秒级的时间内查找出要搜索的结果的。这就是由于建立了索引的原因,你可以把索引想象成这样一种数据结构,他能够使你快速的随机访问存储在索引中的关键词,进而找到该关键词所关联的文档。Lucene 采用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词 / 短语表,对于这个表中的每个词 / 短语,都有一个链表描述了有哪些文档包含了这个词 / 短语。这样在用户输入查询条件的时候,就能非常快的得到搜索结果。我们将在本系列文章的第二部分详细介绍 Lucene 的索引机制,由于 Lucene 提供了简单易用的 API,所以即使读者刚开始对全文本进行索引的机制并不太了解,也可以非常容易的使用 Lucene 对你的文档实现索引。


      对文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。


原文地址:https://www.cnblogs.com/lilongsheng1125/p/4978519.html