搜索引擎 (一)全文资源检索框架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 致力于让每一个人能非常easy, 同一时候花费非常少就行配置世界一流的Web搜索引擎. 为了完毕这一雄伟的目标, Nutch必须可以做到:
- 每一个月取几十亿网页
- 为这些网页维护一个索引
- 对索引文件进行每秒上千次的搜索
- 提供高质量的搜索结果
- 以最小的成本运作
luence和应用程序之间的关系
原理分析
索引是现代搜索引擎的核心。建立索引的过程就是把源数据处理成很方便查询的索引文件的过程。
为什么索引这么重要呢,试想你如今要在大量的文档中搜索含有某个关键词的文档。那么假设不建立索引的话你就须要把这些文档顺序的读入内存。然后检查这个文章中是不是含有要查找的关键词。这种话就会耗费许多的时间,想想搜索引擎但是在毫秒级的时间内查找出要搜索的结果的。
这就是因为建立了索引的原因,你可以把索引想象成这样一种数据结构,他可以使你高速的随机訪问存储在索引中的关键词,进而找到该关键词所关联的文档。Lucene 採用的是一种称为反向索引(inverted index)的机制。反向索引就是说我们维护了一个词 / 短语表,对于这个表中的每一个词 / 短语。都有一个链表描写叙述了有哪些文档包括了这个词 / 短语。
这样在用户输入查询条件的时候,就能很快的得到搜索结果。
我们将在本系列文章的第二部分具体介绍 Lucene 的索引机制,因为 Lucene 提供了简单易用的 API,所以即使读者刚開始对全文本进行索引的机制并不太了解。也能够很easy的使用 Lucene 对你的文档实现索引。
对文档建立好索引后,就能够在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,终于返回和用户输入的关键词相关联的文档。