Apache
最初,Apache基金会的开发爱好者开发并维护一个叫Apache的HTTP服务器,后来,Apache服务器越来越火,就启动了更多的项目,比如PHP、Java Apache以及更多的子项目。比如Jakarta。
Jakarta
Jakarta是为了发展Java容器而启动的Java Apache的项目。后来随着Java的火爆而成为了囊括了众多基于Java语言开源软件子项目的项目。比如从这里孵化出了Tomcat、ant、Struts、Lucene。
Lucene
Lucene是Apache软件基金会4 jakarta项目的子项目。它是一个开源的全文检索引擎工具包。但它并不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
常见的开源搜索引擎
基于Lucene的搜索引擎,java开发,包括:
- Lucene 它只是一个类库,有足够的定制和优化空间
- Solr 支持添加多种格式的索引
- elasticsearch
- katta
- compass
基于C++开发的:
- Sphinx 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒)
高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒)
可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可 处理100 M 文档)
提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法
支持分布式搜索
支持短语搜索
提供文档摘要生成
可作为MySQL的存储引擎提供搜索服务
支持布尔、短语、词语相似度等多种检索模式
文档支持多个全文检索字段(最大不超过32个)
文档支持多个额外的属性信息(例如:分组信息,时间戳等)
支持断词
Elasticsearch
优点:
- 分布式:节点对外表现对等,加入节点自动均衡
- elasticsearch完全支持Apache Lucene的接近实时的搜索
- 各节点组成对等的网络结构,当某个节点出现故障时会自动分配其他节点代替期进行工作
- 横向可扩展性,如果你需要增加一台服务器,只需要做点配置,然后启动就完事了
- 高可用:提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器宕机的情况下,集群仍旧可以照常运行,并会把由于服务器宕机丢失的复制恢复到其它可用节点上;这点也类似于HDFS的复制机制(HDFS中默认是3份复制)
缺点:
- 不支持事物
- 相对吃内存
简单的描述
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据。
面向文档
关系型数据库以记录和行的形式存储数据,但是在elasticsearch中,是以文档的形式存储数据。
但区别在于,文档要比数据表的行更加灵活。因为文档可以是多层次的,它(文档)鼓励你将属于一个逻辑实体的数据保存在同一个文档中,而不是散落在各个表的不同行中。这样查询效率很高,因为我们无需连接其他的表,我们在用关系型数据库时,一定知道连表查询(尤其是连接多张表)是多么的费时吧!
国内成功案例
更多案例:https://elasticsearch.cn/slides/category-38
我的学习途径
- elasticsearch官方文档:这个比较好点,可以多多参考。
- elasticsearch博客:这个吧,看看就行
- elasticsearch社区:社区还是很好的,多转转社区。
- elasticsearch视频:包括入门视频什么的,初级学者可以。
- elasticsearch实战:该书籍的质量还是不错的,还没看过。
- elasticsearch权威指南:同样的,这个也不错,简单的瞟了下。
我采集的到数据,一个Lucene索引(也就是一个elasticsearch分片)不能处理多于21亿篇文档,或者多于2740亿的唯一词条。但达到这个极限之前,我们可能就没有足够的磁盘空间了!