elasticsearch介绍

homeros    PHP    999+ 次    2017-12-12 17:37:52


    • 是什么?
      ElasticSearch是一个基于Lucene的高可用、高可扩展的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

      Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
    • 能做什么?
      1.日志分析
      分析和挖掘这些数据,寻找趋势,统计,总结,或异常。
      日志处理

      kibana是elasticsearch的一个可视化插件。日志分析处理可用logstash+elasticsearch+kibana来进行日志的搜集、存储、分析展示,这三个软件在es官网都有提供。

      2.搜索功能
      全文检索、评分、倒排索引。可以用于电商网站、门户网站、企业IT系统等各种场景下的搜索引擎,也可以用于对海量的数据进行近实时的数据分析。
      Github:GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码。

      可适用于任何需要搜索功能的地方,代替关系行数据库like的不足。es索引是基于内存的高效处理。
      更多实际案例请看附件

      3.关系分析
      kibana插件对数据进行了基本分析,该插件的关系分析,可用于发现一些不易发现的关系图谱。
      关系分析

      4.处理地理数据
      处理地理数据

      可用于基于经纬度范围查询,电子围栏(指定图形边界坐标,查找该范围内的所有坐标点)。

    • 怎么用?

      安装、链接、使用
      1.安装

      参考官网或者另一文档
      2.使用,支持如下客户端
      支持客户端

    • 天生分布式
      a.分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中
      b.按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡
      c.复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失
      d.将集群中任一节点的请求路由到存有相关数据的节点
      e.集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复
      分片分布

      图中有一个主分片,两个副本分片,分别分布到了三个节点上。任意两个节点故障,都可以从另一个节点来进行恢复。

    • 相关概念

      1.集群(cluster
      一个集群就是由一个或多个节点组织在一起, 它们共同持有你全部的数据, 并一起提供索引和搜索功能。 一个集群由一个唯一的名字标识, 这个名字默认就是“elasticsearch”。 这个名字很重要, 因为一个节点只能通过指定某个集群的名字,来加入这个集群。在生产环境中显式地设定这个名字是一个好习惯,但是使用默认值来进行测试/开发也是不错的。
      注意,一个集群中只包含一个节点是合法的。另外,你也可以拥有多个集群,集群以名字区分。
       
      2.节点(node)
      一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。 和集群类似, 一个节点也是由一个名字来标识的, 默认情况下, 这个名字是一个随机的Marvel角色的名字,这个名字会在节点启动时分配给它。这个名字对于管理工作来说很重要,因为在这个管理过程中,你会去确定网络中的哪些 服务器对应于Elasticsearch集群中的哪些节点。
      一个节点可以通过配置集群名称的方式来加入一个指定的集群。 默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点, 并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch” 的集群中。
      在一个集群里可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的单节点集群。
      3.索引(index)
      一个索引就是一个拥有相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来 标识(必须全部是小写字母的),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,你能够创建任意多个索引。
      4.类型(type)
      在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组相同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台 并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
      5.文档(document)
      一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档、某一个产品的一个文档、某个订单的一个文档。文档以JSON格式来表示,而JSON是一个到处存在的互联网数据交互格式。
      在一个index/type里面,你可以存储任意多的文档。注意,一个文档物理上存在于一个索引之中,但文档必须被索引/赋予一个索引的type。
      6.分片和复制(shards and replicas)
      一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。
      为了解决这个问题,Elasticsearch提供了将索引划分成多片的能力,这些片叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引” 可以被放置到集群中的任何节点上。
      分片之所以重要,主要有两方面的原因:
      允许你水平分割/扩展你的内容容量
      允许你在分片(位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量
      至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的。
      在一个网络/云的环境里,失败随时都可能发生。在某个分片/节点因为某些原因处于离线状态或者消失的情况下,故障转移机制是非常有用且强烈推荐的。为此, Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。
      复制之所以重要,有两个主要原因:
      在分片/节点失败的情况下,复制提供了高可用性。复制分片不与原/主要分片置于同一节点上是非常重要的。
      因为搜索可以在所有的复制上并行运行,复制可以扩展你的搜索量/吞吐量
      总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(即没有复制) 或多次。一旦复制了,每个索引就有了主分片(作为复制源的分片)和复制分片(主分片的拷贝)。 分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你不能再改变分片的数量。
      默认情况下,Elasticsearch中的每个索引分配5个主分片和1个复制。这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样每个索引总共就有10个分片.

    • 倒排索引
      倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。 它是文档检索系统中最常用的数据结构。
    • 如何进行全文索引的
      分析器进行分析,分词
      一旦组成了词项列表,这个查询会对每个词项逐一执行底层的查询,再将结果合并,然后为每个文档生成一个最终的相关度评分。
    • 相关度评分
      文档相关度评分 _score ,这是种将 词频(term frequency,即词 quick 在相关文档的 title 字段中出现的频率)和反向文档频率(inverse document frequency,即词 quick 在所有文档的 title 字段中出现的频率),以及字段的长度(即字段越短相关度越高)相结合的计算方式
    • 分析器
      支持多种语言分析器,中文是以插件的形式来提供支持(ik分析器)。
      https://www.elastic.co/guide/cn/elasticsearch/guide/current/_controlling_analysis.html
    • 特点
      Elasticsearch ,和大多数 NoSQL 数据库类似。索引是独立文档的集合体。 文档是否匹配搜索请求取决于它是否包含所有的所需信息。
    • 快速定位存储位置
      shard = hash(routing) % number_of_primary_shards

      routing:文档id
    • es vs hbase
      1.hbase存储结构化数据
      2.es 结构化、半结构化
      3.偏分析用es,偏存储用hbase,可以用Hbase来存储数据,es建立索引分析数据。
    • 参考文档:

      https://www.elastic.co
      https://neway6655.github.io/elasticsearch/2015/09/11/elasticsearch-study-notes.html
      https://endymecy.gitbooks.io/elasticsearch-guide-chinese/content/getting-started/basic-concepts.html
      https://neway6655.github.io/elasticsearch/2015/09/11/elasticsearch-study-notes.html
      http://www.searchtech.pro/elasticsearch-users-case
      http://www.qixing318.com/article/elasticsearch-what-are-excellent-examples-at-home-and-abroad.html
      http://www.cnblogs.com/zhongshengzhen/p/elasticsearch_mysql.html
      https://zhuanlan.zhihu.com/p/25748598


上一篇: ansible 02

下一篇: elasticsearch 安装

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:481

今日UV/PV/IP:11/30/11

昨日UV/PV/IP:25/26 /25

TOP