美文网首页
ElasticSearch简介

ElasticSearch简介

作者: edwin1993 | 来源:发表于2018-08-16 16:34 被阅读0次

    转自:https://www.cnblogs.com/wetest/p/6709621.html
    主要转载了基础概念作为ES的简单介绍。

    简介

    ES是基于Lucenne的开源搜索引擎,Lucene是java编写的一套开源文档检索的基础库,包括词、文档、域、倒排索引、段、相关性得分等基本功能,而ES直接使用了这些库。
    ES采用JAVA编写,提供简单API。同时支持横向扩充,用于处理PB级数据。

    应用场景:

    • 海量数据分析引擎
    • 站内搜素引擎
    • 数据仓库
    重要概念
    • 集群(Cluster):ES是一个分布式的搜索引擎,由多台物理机共同构成。这些物理机通过配置相同的cluster name互相发现,从而将自己组织为一个集群。

    • 节点(Node):同一集群中的一个ES主机。

    • 主分片(Primary shard):索引的一个物理子集。同一个索引可以切为多个分片,分布到不同的结点上,其实现是Lucene中的索引。

    • 副本分片(Replica shard):每个主分片可以有一个或多个副本,个数可配置。ES将同一索引的不同分片分布到不同的节点上,提高容错。对于一个索引,只要不是所有的分片所在节点都宕机,就可以继续使用。

    每个索引默认5个分片一个副本。

    副本、节点的概念如下图:

    • 索引(Index):逻辑概念,一个可检索的文档对象的集合。类似与DB中的database概念。同一个集群中可建立多个索引。比如,生产环境常见的一种方法,对每个月产生的数据建索引,以保证单个索引的量级可控。
      索引->类型->文档,ES中的文档以这样的逻辑关系组织了起来。

    • 类型(Type):索引的下一级概念,大概相当于数据库中的table。同一个索引里可以包含多个 Type。
      可以直接就在一个索引中建一个type,在这个type下去建立文档集合和进行搜索了。

    • 文档(Document):即搜索引擎中的文档概念,也是ES中一个可以被检索的基本单位,相当于数据库中的row,一条记录。

    • 字段(Field):相当于数据库中的column。ES中,每个文档,其实是以json形式存储的。而一个文档可以被视为多个字段的集合。比如一篇文章,可能包括了主题、摘要、正文、作者、时间等信息,每个信息都是一个字段,最后被整合成一个json串,落地到磁盘。

    • 映射(Mapping):相当于数据库中的schema,用来约束字段的类型,不过 ES 的 mapping 可以不显式地指定,自动根据文档数据创建。

    ES友好的提供了RESTful(Representational State Transfer:表征性状态转移,是一种架构风格)的API,可以通过HTTP请求直接完成所有操作。

    比如下面官方的例子
    往索引twitter添加文档,type是tweet,文档的id是1

    根据user字段检索文档:

    重要配置项
    1. 索引的分片数
      分片数最好和节点数相关,单机上最好不超过两个,这样每个查询尽可能并行。ES中分片数确定了就不能调整,所以可以适度多分配。
      另一种分片思路是按照时间纬度去定义ES索引,并调整分片数。

    2. heap内存
      官方为可用内存的一半,通过启动ES的环境中,定义环境变量的方式完成。
      eg:export ES_HEAP_SIZE = 10g

    3. cluster.name
      集群的逻辑名,只有相同名的机器才能在逻辑上组成一个集群。

    4. discovery.zen.minimum_master_nodes:
      这个是用于集群的分布式决策的最少master机器个数。和常见的分布式协调算法一样,为了避免脑裂现象,建议超过一半的机器,n/2+1

    5. discovery.zen.ping.unicast.hosts:
      ES集群的机器列表。注意ES单点不用配置集群中的所有机器列表,像一个连通图一样,只要每台机器配置了其他机器,而这些配置又是互相可以连接的,那ES最终就会发现所有机器,构成集群。如['111.111.111.0','111.111.111.1','111.111.111.2']

    mapping

    mapping类似于数据库里的表结构,定义个mapping就意味着创建了一个索引。
    与数据库不同的是,一个索引并不需要显示地建立mapping,比如,上面那个在twitter索引插入文档数据的例子,如果执行的时候还没有定义索引,ES便会根据文档的字段和内容,自动创建索引和mapping。这样创建的索引字段,往往可能不是我们所需要的。所以,还是自己预先通过手动定义mapping来创建索引比较好。
    下面是创建mapping的例子,这个例子在my_index这个目录下,为user、blogpost这些type创建了mapping。其中properties下面是各种字段的定义,包括了string、数值、日期等类型的定义。

    聚合

    ES不仅能搜索,还能在搜索的结果集合上直接进行统计,目前聚合主要分两种:Metrics Aggregation(指标聚合)和Bucket Aggregation(桶聚合)。
    如官方guide的这个例子:找到交易的所有颜色的车,然后求它们的平均价格:

    结果:

    相关文章

      网友评论

          本文标题:ElasticSearch简介

          本文链接:https://www.haomeiwen.com/subject/ofhobftx.html