首推的当然时lucene了,先介绍这个吧
lucene : 是一个文件搜索工具包,包括了完整的查询引擎和索引引擎及部分的分析引擎。为apache下的开源子项目。
特点:
1.索引文件独立于操作系统,自己定义了一套8字节为基础的索引文件格式
2.在传统倒排索引的基础上,实现了分块索引,对于新增的文件建立小索引,并能提供索引合并以提升效率。
3.强大的查询引擎。
4.设计了独立于语言和文件格式的文件分析接口,通过接收 token流解析文件,方便扩展。
倒排序算法:
传统的记录方式是 文件 --- > 关键词 的索引方式。
倒排序 关键词 --- > 文件 的索引方式
lucene 还增加了两个位置:
字符位置:在文章中出现的位置
关键词位置:是文章中的第几个关键词
针对这两种情况出现了:出现频率和出现位置。详细如下
关键词 文章号 出现频率 出现位置 。lucene的索引文件就是如下所示。
haha 1[2],2[1] 2,6,8
haha 这个关键词在文件1中出现两次,在文章2中出现1次。在文章1中出现的位置是2,6 。在文章2中出现的位置8。
以上就分出了三个文件 : 辞典文件(存放关键词,同时保存了指向频率文件和位置文件的指针,取得具体出现的频率和位置) 频率文件 位置文件
具体采用的算法是:二元搜索算法。
field : 这个概念来描述存放位置,例如标题中还是URL,还是内容中。该信息也记录在辞典文件中,一个关键词必定属于一个或是多个field.
solr:这个是基于lucene开发的一个企业级搜索应用服务器。提供web-service,restful-api ,普通http-get请求的。简化了lucene的API,是一个完整的搜索引擎框架。
nutch:一个开源的基于lucene 开发的搜索引擎,包含了所有的搜索引擎的功能。
安装分为三个层次:基于本地文件系统,基于局域网,基于internet,用户根据自己需求来选择不同的层次。
架构上分为两个部分:数据的抓取和索引的创建。有一套非常良好的数据抓取工具包。
nutch和lucene选择区别,可以简单的话,nutch除了封装了lucene的索引部分外,还提供了一套数据抓取的工作,所以若是你的数据源来源于你自己,那么完全采用lucene即可,若是你的数据源依赖于外部网络。那么采用nutch是一个很好的选择。
compass:也是一个java开源框架。包含了所有搜索引擎的基本功能,但是提供了很多特性,例如强大的O/R mapping。搜索部分也是基于lucene
可以容易同hibernate集成,并将数据进行索引。
同时支持一些分布式框架的集成,例如:terracotta
总结:
lucene:基本的搜索和索引工具。
compass:简化API,轻松的将java对象映射到搜索引擎中。
SOLR:简化API,暴露一个http服务来进行搜索和索引。
nutch:简化API,同时提供丰富的数据抓取工具。