什么是ElasticSearch
基于Apache Lucene构建的开源搜索引擎
采用Java编写,提供简单易用的RESTFul API
可轻松横向扩展,可支持PB级的结构化或非结构化数据处理
可用应用场景
海量数据分析
站内搜索引擎
数据仓库
Elasticsearch、MongoDB和Hadoop比较
如果你仅仅想要通过关键字和简单的分析,那么Elasticsearch可以完成任务;
如果你需要查询文档,并且包含更加复杂的分析过程,那么MongoDB相当适合;
如果你有一个海量的数据,需要大量不同的复杂处理和分析,那么Hadoop提供了最为广泛的工具和灵活性。
Elasticsearch和Hadoop也可以很好地一起共事的,使用Elasticsearch快速的关键词查询,Hadoop Job则能处理相当复杂的分析。
基础概念
集群和节点
索引(相当于SQL中的data base)
含有相同属性的文档集合
类型(相当于SQL中的table)
索引可以定义一个或多个类型,文档必须属于一个类型
文档(相当于SQL中的一行数据)
文档是可以被索引的基本数据单位
索引分片
每个索引都有多个分片,每个分片是一个Lucene索引
拷贝一份分片就完成了分片的备份
创建索引时默认五个分片一个备份
elasticsearch 倒排正排
当用户在主页上搜索关键词“华为手机”时,假设只存在正向索引(forward index),那么就需要扫描索引库中的所有文档,找出所有包含关键词“华为手机”的文档,再根据打分模型进行打分,排出名次后呈现给用户。因为互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。
所以,搜索引擎会将正向索引重新构建为倒排索引,即把文件ID对应到关键词的映射转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,这些文件中都出现这个关键词。
网友评论