es_es6 - CSDN
es 订阅
ES即etamsports ,全名上海英模特制衣有限公司,是法国Etam集团在中国的分支企业,创立于1994年底。ES的服装适合出游、朋友聚会、晚间娱乐、校园生活等各种轻松的休闲场合。ES为所有生活在世界各大都市的独立、 自由、追求时尚和品质敏感的现代女性设计。代表年轻人活力,有趣的生活方式,充满动感和浓厚的时代气息。 展开全文
ES即etamsports ,全名上海英模特制衣有限公司,是法国Etam集团在中国的分支企业,创立于1994年底。ES的服装适合出游、朋友聚会、晚间娱乐、校园生活等各种轻松的休闲场合。ES为所有生活在世界各大都市的独立、 自由、追求时尚和品质敏感的现代女性设计。代表年轻人活力,有趣的生活方式,充满动感和浓厚的时代气息。
信息
所属公司
上海英模特制衣有限公司
所属行业
服饰
中文名称
ES服饰
创立时间
1994
英文名称
etamsports
ES品牌介绍
ES即etamsports ,可以说ES是艾格的一个分支 跟etam weekend 和etam的关系一样
收起全文
精华内容
参与话题
  • 1、ElasticSearch下载安装(window以及linux下安装) 2、集群环境搭建 3、客户端Kibana安装与使用 4、集群管理插件head安装使用 5、java api 操作 ES 6、电商项目实战应用等等 ...
  • Elasticsearch学习,请先看这一篇!

    万次阅读 多人点赞 2018-05-25 22:49:55
    题记:Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识、原理从初学者认知、学习的角度,从以下9个方面进行详细梳理。欢迎讨论……0. 带着问题上路——ES是如何产生的?(1)思考:大规模数据如何...

    题记:

    Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识、原理从初学者认知、学习的角度,从以下9个方面进行详细梳理。欢迎讨论……

    0. 带着问题上路——ES是如何产生的?

    (1)思考:大规模数据如何检索?

    如:当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题:
    1)用什么数据库好?(mysql、sybase、oracle、达梦、神通、mongodb、hbase…)
    2)如何解决单点故障;(lvs、F5、A10、Zookeep、MQ)
    3)如何保证数据安全性;(热备、冷备、异地多活)
    4)如何解决检索难题;(数据库代理中间件:mysql-proxy、Cobar、MaxScale等;)
    5)如何解决统计分析问题;(离线、近实时)

    (2)传统数据库的应对解决方案

    对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写入瓶颈:
    解决要点:
    1)通过主从备份解决数据安全性问题;
    2)通过数据库代理中间件心跳监测,解决单点故障问题;
    3)通过代理中间件将查询语句分发到各个slave节点进行查询,并汇总结果
    这里写图片描述

    (3)非关系型数据库的解决方案

    对于Nosql数据库,以mongodb为例,其它原理类似:
    解决要点:
    1)通过副本备份保证数据安全性;
    2)通过节点竞选机制解决单点问题;
    3)先从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果
    这里写图片描述

    另辟蹊径——完全把数据放入内存怎么样?

    我们知道,完全把数据放在内存中是不可靠的,实际上也不太现实,当我们的数据达到PB级别时,按照每个节点96G内存计算,在内存完全装满的数据情况下,我们需要的机器是:1PB=1024T=1048576G
    节点数=1048576/96=10922个
    实际上,考虑到数据备份,节点数往往在2.5万台左右。成本巨大决定了其不现实!

    从前面讨论我们了解到,把数据放在内存也好,不放在内存也好,都不能完完全全解决问题。
    全部放在内存速度问题是解决了,但成本问题上来了。
    为解决以上问题,从源头着手分析,通常会从以下方式来寻找方法:
    1、存储数据时按有序存储;
    2、将数据和索引分离;
    3、压缩数据;
    这就引出了Elasticsearch。

    1. ES 基础一网打尽

    1.1 ES定义

    ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
    Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

    1.2 Lucene与ES关系?

    1)Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

    2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

    1.3 ES主要解决问题:

    1)检索相关数据;
    2)返回统计结果;
    3)速度要快。

    1.4 ES工作原理

    当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。这个过程如下图所示:
    这里写图片描述

    1.5 ES核心概念

    1)Cluster:集群。

    ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

    2)Node:节点。

    形成集群的每个服务器称为节点。

    3)Shard:分片。

    当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
    当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

    4)Replia:副本。

    为提高查询吞吐量或实现高可用性,可以使用分片副本。
    副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
    当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

    5)全文检索。

    全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。
    全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

    1.6 ES数据架构的主要概念(与关系数据库Mysql对比)

    这里写图片描述
    (1)关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
    (2)一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type),
    (3)一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
    (4)在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
    (5)在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.

    1.7 ELK是什么?

    ELK=elasticsearch+Logstash+kibana
    elasticsearch:后台分布式存储以及全文检索
    logstash: 日志加工、“搬运工”
    kibana:数据可视化展示。
    ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

    2. ES特点和优势

    1)分布式实时文件存储,可将每一个字段存入索引,使其可以被检索到。
    2)实时分析的分布式搜索引擎。
    分布式:索引分拆成多个分片,每个分片可有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作;
    负载再平衡和路由在大多数情况下自动完成。
    3)可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。也可以运行在单台PC上(已测试)
    4)支持插件机制,分词插件、同步插件、Hadoop插件、可视化插件等。

    3、ES性能

    3.1 性能结果展示

    (1)硬件配置:
    CPU 16核 AuthenticAMD
    内存 总量:32GB
    硬盘 总量:500GB 非SSD

    (2)在上述硬件指标的基础上测试性能如下:
    1)平均索引吞吐量: 12307docs/s(每个文档大小:40B/docs)
    2)平均CPU使用率: 887.7%(16核,平均每核:55.48%)
    3)构建索引大小: 3.30111 GB
    4)总写入量: 20.2123 GB
    5)测试总耗时: 28m 54s.

    3.2 性能esrally工具(推荐)

    使用参考:http://blog.csdn.net/laoyang360/article/details/52155481

    4、为什么要用ES?

    4.1 ES国内外使用优秀案例

    1) 2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。 “GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码”。

    2)维基百科:启动以elasticsearch为基础的核心搜索架构。
    3)SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”。
    4)百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据。

    4.2 我们也需要

    实际项目开发实战中,几乎每个系统都会有一个搜索的功能,当搜索做到一定程度时,维护和扩展起来难度就会慢慢变大,所以很多公司都会把搜索单独独立出一个模块,用ElasticSearch等来实现。

    近年ElasticSearch发展迅猛,已经超越了其最初的纯搜索引擎的角色,现在已经增加了数据聚合分析(aggregation)和可视化的特性,如果你有数百万的文档需要通过关键词进行定位时,ElasticSearch肯定是最佳选择。当然,如果你的文档是JSON的,你也可以把ElasticSearch当作一种“NoSQL数据库”, 应用ElasticSearch数据聚合分析(aggregation)的特性,针对数据进行多维度的分析。

    【知乎:热酷架构师潘飞】ES在某些场景下替代传统DB
    个人以为Elasticsearch作为内部存储来说还是不错的,效率也基本能够满足,在某些方面替代传统DB也是可以的,前提是你的业务不对操作的事性务有特殊要求;而权限管理也不用那么细,因为ES的权限这块还不完善。
    由于我们对ES的应用场景仅仅是在于对某段时间内的数据聚合操作,没有大量的单文档请求(比如通过userid来找到一个用户的文档,类似于NoSQL的应用场景),所以能否替代NoSQL还需要各位自己的测试。
    如果让我选择的话,我会尝试使用ES来替代传统的NoSQL,因为它的横向扩展机制太方便了。

    5. ES的应用场景是怎样的?

    通常我们面临问题有两个:

    1)新系统开发尝试使用ES作为存储和检索服务器;
    2)现有系统升级需要支持全文检索服务,需要使用ES。
    以上两种架构的使用,以下链接进行详细阐述。
    http://blog.csdn.net/laoyang360/article/details/52227541

    一线公司ES使用场景:

    1)新浪ES 如何分析处理32亿条实时日志 http://dockone.io/article/505
    2)阿里ES 构建挖财自己的日志采集和分析体系 http://afoo.me/columns/tec/logging-platform-spec.html
    3)有赞ES 业务日志处理 http://tech.youzan.com/you-zan-tong-ri-zhi-ping-tai-chu-tan/
    4)ES实现站内搜索 http://www.wtoutiao.com/p/13bkqiZ.html

    6. 如何部署ES?

    6.1 ES部署(无需安装)

    1)零配置,开箱即用
    2)没有繁琐的安装配置
    3)java版本要求:最低1.7
    我使用的1.8
    [root@laoyang config_lhy]# echo $JAVA_HOME
    /opt/jdk1.8.0_91
    4)下载地址:
    https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/zip/elasticsearch/2.3.5/elasticsearch-2.3.5.zip
    5)启动
    cd /usr/local/elasticsearch-2.3.5
    ./bin/elasticsearch
    bin/elasticsearch -d(后台运行)

    6.2 ES必要的插件

    必要的Head、kibana、IK(中文分词)、graph等插件的详细安装和使用。
    http://blog.csdn.net/column/details/deep-elasticsearch.html

    6.3 ES windows下一键安装

    自写bat脚本实现windows下一键安装。
    1)一键安装ES及必要插件(head、kibana、IK、logstash等)
    2)安装后以服务形式运行ES。
    3)比自己摸索安装节省至少2小时时间,效率非常高。
    脚本说明:
    http://blog.csdn.net/laoyang360/article/details/51900235

    7. ES对外接口(开发人员关注)

    1)JAVA API接口

    http://www.ibm.com/developerworks/library/j-use-elasticsearch-java-apps/index.html

    2)RESTful API接口

    常见的增、删、改、查操作实现:
    http://blog.csdn.net/laoyang360/article/details/51931981

    8.ES遇到问题怎么办?

    1)国外:https://discuss.elastic.co/
    2)国内:http://elasticsearch.cn/

    参考:

    [1] http://www.tuicool.com/articles/7fueUbb
    [2] http://zhaoyanblog.com/archives/495.html
    [3]《Elasticsearch服务器开发》
    [4]《实战Elasticsearch、Logstash、Kibana》
    [5]《Elasticsearch In Action》
    [6]《某ES大牛PPT》

    9、还有吗?

    《死磕 Elasticsearch 方法论》:普通程序员高效精进的 10 大狠招!(免费完整版)
    https://blog.csdn.net/laoyang360/article/details/79293493
    ——————————————————————————————————
    更多ES相关实战干货经验分享,请扫描下方【铭毅天下】微信公众号二维码关注。
    (每周至少更新一篇!)

    这里写图片描述
    和你一起,死磕Elasticsearch
    ——————————————————————————————————

    2016-08-18 21:10 思于家中床前

    作者:铭毅天下
    转载请标明出处,原文地址:
    http://blog.csdn.net/laoyang360/article/details/52244917
    如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

    展开全文
  • ES基本介绍

    万次阅读 多人点赞 2019-06-28 16:11:13
    ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。 同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储...

    简介

    ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。

    同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。

    可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。

    ES就是为高可用和可扩展而生的。一方面可以通过升级硬件来完成系统扩展,称为垂直或向上扩展(Vertical Scale/Scaling Up)。

    另一方面,增加更多的服务器来完成系统扩展,称为水平扩展或者向外扩展(Horizontal Scale/Scaling Out)。尽管ES能够利用更强劲的硬件,但是垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展,通过向集群中添加更多的节点来分担负载,增加可靠性。ES天生就是分布式的,它知道如何管理多个节点来完成扩展和实现高可用性。意味应用不需要做任何的改动。

    Gateway,代表ES索引的持久化存储方式。在Gateway中,ES默认先把索引存储在内存中,然后当内存满的时候,再持久化到Gateway里。当ES集群关闭或重启的时候,它就会从Gateway里去读取索引数据。比如LocalFileSystem和HDFS、AS3等。

    DistributedLucene Directory,它是Lucene里的一些列索引文件组成的目录。它负责管理这些索引文件。包括数据的读取、写入,以及索引的添加和合并等。

    River,代表是数据源。是以插件的形式存在于ES中。 

    Mapping,映射的意思,非常类似于静态语言中的数据类型。比如我们声明一个int类型的变量,那以后这个变量只能存储int类型的数据。比如我们声明一个double类型的mapping字段,则只能存储double类型的数据。

    Mapping不仅是告诉ES,哪个字段是哪种类型。还能告诉ES如何来索引数据,以及数据是否被索引到等。

    Search Moudle,搜索模块,支持搜索的一些常用操作

    Index Moudle,索引模块,支持索引的一些常用操作

    Disvcovery,主要是负责集群的master节点发现。比如某个节点突然离开或进来的情况,进行一个分片重新分片等。这里有个发现机制。

    发现机制默认的实现方式是单播和多播的形式,即Zen,同时也支持点对点的实现。另外一种是以插件的形式,即EC2。

    Scripting,即脚本语言。包括很多,这里不多赘述。如mvel、js、python等。   

    Transport,代表ES内部节点,代表跟集群的客户端交互。包括 Thrift、Memcached、Http等协议

    RESTful Style API,通过RESTful方式来实现API编程。

    3rd plugins,代表第三方插件。

    Java(Netty),是开发框架。

    JMX,是监控。

    使用案例

    1、将ES作为网站的主要后端系统

    比如现在搭建一个博客系统,对于博客帖子的数据可以直接在ES上存储,并且使用ES来进行检索,统计。ES提供了持久化的存储、统计和很多其他数据存储的特性。

    注意:但是像其他的NOSQL数据存储一样,ES是不支持事务的,如果要事务机制,还是考虑使用其他的数据库做真实库。

    2、将ES添加到现有系统

    有些时候不需要ES提供所有数据的存储功能,只是想在一个数据存储的基础之上使用ES。比如已经有一个复杂的系统在运行,但是现在想加一个搜索的功能,就可以使用该方案。

    3、将ES作为现有解决方案的后端部分

    因为ES是开源的系统,提供了直接的HTTP接口,并且现在有一个大型的生态系统在支持他。比如现在我们想部署大规模的日志框架、用于存储、搜索和分析海量的事件,考虑到现有的工具可以写入和读取ES,可以不需要进行任何开发,配置这些工具就可以去运作。

    设计结构

    1、逻辑设计

    文档

    文档是可以被索引的信息的基本单位,它包含几个重要的属性:

    1. 是自我包含的。一篇文档同时包含字段和他们的取值。
    2. 是层次型的。文档中还可以包含新的文档,一个字段的取值可以是简单的,例如location字段的取值可以是字符串,还可以包含其他字段和取值,比如可以同时包含城市和街道地址。
    3. 拥有灵活的结构。文档不依赖于预先定义的模式。也就是说并非所有的文档都需要拥有相同的字段,并不受限于同一个模式

    {

      "name":"meeting",

      "location":"office",

      "organizer":"yanping"

    }

    {

      "name":"meeting",

      "location":{

        "name":"sheshouzuo",

           "date":"2019-6-28"

      },

      "memebers":["leio","shiyi"]

    }

    类型

    类型是文档的逻辑容器,类似于表格是行的容器。在不同的类型中,最好放入不同的结构的文档。

    字段

    ES中,每个文档,其实是以json形式存储的。而一个文档可以被视为多个字段的集合。

    映射

    每个类型中字段的定义称为映射。例如,name字段映射为String。

    索引

    索引是映射类型的容器一个ES的索引非常像关系型世界中的数据库,是独立的大量文档集合。

     

    关系型数据库与ES的结构上的对比

    2、物理设计

    节点

    一个节点是一个ES的实例,在服务器上启动ES之后,就拥有了一个节点,如果在另一个服务器上启动ES,这就是另一个节点。甚至可以在一台服务器上启动多个ES进程,在一台服务器上拥有多个节点。多个节点可以加入同一个集群。

    当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接。这个过程如下图所示:

    节点主要有3种类型,第一种类型是client_node,主要是起到请求分发的作用,类似路由。第二种类型是master_node,是主的节点,所有的新增,删除,数据分片都是由主节点操作(elasticsearch底层是没有更新数据操作的,上层对外提供的更新实际上是删除了再新增),当然也能承担搜索操作。第三种类型是date_node,该类型的节点只能做搜索操作,具体会分配到哪个date_node,就是由client_node决定,而data_node的数据都是从master_node同步过来的

    分片

    一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。

     

    为了解决这个问题,ES提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

    分片之所以重要,主要有两方面的原因:

     

    1、允许你水平分割/扩展你的内容容量

    允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量

    至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由ES管理的,对于作为用户的你来说,这些都是透明的。

     

    2、在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了。这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,ES允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。

    复制之所以重要,主要有两方面的原因:

    (1)在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。

    (2)扩展你的搜索量/吞吐量,因为搜索可以在所有的复制上并行运行

    总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制数量,但是不能改变分片的数量。

     

    默认情况下,ES中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。一个索引的多个分片可以存放在集群中的一台主机上,也可以存放在多台主机上,这取决于你的集群机器数量。主分片和复制分片的具体位置是由ES内在的策略所决定的。

    3、插件HEAD

    elasticsearch-head是一个界面化的集群操作和管理工具

    ● node:即一个 Elasticsearch 的运行实例,使用多播或单播方式发现 cluster 并加入。

    ● cluster:包含一个或多个拥有相同集群名称的 node,其中包含一个master node。

    ● index:类比关系型数据库里的DB,是一个逻辑命名空间。

    ● alias:可以给 index 添加零个或多个alias,通过 alias 使用index 和根据index name 访问index一样,但是,alias给我们提供了一种切换index的能力,比如重建了index,取名● customer_online_v2,这时,有了alias,我要访问新 index,只需要把 alias 添加到新 index 即可,并把alias从旧的 index 删除。不用修改代码。

    ● type:类比关系数据库里的Table。其中,一个index可以定义多个type,但一般使用习惯仅配一个type。

    ● mapping:类比关系型数据库中的 schema 概念,mapping 定义了 index 中的 type。mapping 可以显示的定义,也可以在 document 被索引时自动生成,如果有新的 field,Elasticsearch 会自动推测出 field 的type并加到mapping中。

    ● document:类比关系数据库里的一行记录(record),document 是 Elasticsearch 里的一个 JSON 对象,包括零个或多个field。

    ● field:类比关系数据库里的field,每个field 都有自己的字段类型。

    ● shard:是一个Lucene 实例。Elasticsearch 基于 Lucene,shard 是一个 Lucene 实例,被 Elasticsearch 自动管理。之前提到,index 是一个逻辑命名空间,shard 是具体的物理概念,建索引、查询等都是具体的shard在工作。shard 包括primary shard 和 replica shard,写数据时,先写到primary shard,然后,同步到replica shard,查询时,primary 和 replica 充当相同的作用。replica shard 可以有多份,也可以没有,replica shard的存在有两个作用,一是容灾,如果primary shard 挂了,数据也不会丢失,集群仍然能正常工作;二是提高性能,因为replica 和 primary shard 都能处理查询。另外,如上图右侧红框所示,shard数和replica数都可以设置,但是,shard 数只能在建立index 时设置,后期不能更改,但是,replica 数可以随时更改。但是,由于 Elasticsearch 很友好的封装了这部分,在使用Elasticsearch 的过程中,我们一般仅需要关注 index 即可,不需关注shard。

     

    shard、node、cluster 在物理上构成了 Elasticsearch 集群,field、type、index 在逻辑上构成一个index的基本概念,在使用 Elasticsearch 过程中,我们一般关注到逻辑概念就好,就像我们在使用MySQL 时,我们一般就关注DB Name、Table和schema即可,而不会关注DBA维护了几个MySQL实例、master 和 slave 等怎么部署的一样。

    ES中的索引原理

    (1)传统的关系型数据库

    二叉树查找效率是logN,同时插入新的节点不必移动全部节点,所以用树型结构存储索引,能同时兼顾插入和查询的性能。因此在这个基础上,再结合磁盘的读取特性(顺序读/随机读),传统关系型数据库采用了B-Tree/B+Tree这样的数据结构做索引

    (2)ES

    采用倒排索引

    那么,倒排索引是个什么样子呢?

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127172829635-1286260863.png

    首先,来搞清楚几个概念,为此,举个例子:

    假设有个user索引,它有四个字段:分别是name,gender,age,address。画出来的话,大概是下面这个样子,跟关系型数据库一样

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127173241683-1331385372.png

    Term(单词):一段文本经过分析器分析以后就会输出一串单词,这一个一个的就叫做Term

    Term Dictionary(单词字典):顾名思义,它里面维护的是Term,可以理解为Term的集合

    Term Index(单词索引):为了更快的找到某个单词,我们为单词建立索引

    Posting List(倒排列表):倒排列表记录了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项(Posting)。根据倒排列表,即可获知哪些文档包含某个单词。(PS:实际的倒排列表中并不只是存了文档ID这么简单,还有一些其它的信息,比如:词频(Term出现的次数)、偏移量(offset)等,可以想象成是Python中的元组,或者Java中的对象)

    (PS:如果类比现代汉语词典的话,那么Term就相当于词语,Term Dictionary相当于汉语词典本身,Term Index相当于词典的目录索引)

    我们知道,每个文档都有一个ID,如果插入的时候没有指定的话,Elasticsearch会自动生成一个,因此ID字段就不多说了

    上面的例子,Elasticsearch建立的索引大致如下:

    name字段:

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127175423615-230290274.png

    age字段:

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127175627644-1013476663.png

    gender字段:

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127175809626-1224287371.png

    address字段:

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127180053644-1305820142.png

    Elasticsearch分别为每个字段都建立了一个倒排索引。比如,在上面“张三”、“北京市”、22 这些都是Term,而[1,3]就是Posting List。Posting list就是一个数组,存储了所有符合某个Term的文档ID。

    只要知道文档ID,就能快速找到文档。可是,要怎样通过我们给定的关键词快速找到这个Term呢?

    当然是建索引了,为Terms建立索引,最好的就是B-Tree索引(MySQL就是B树索引最好的例子)。

    我们查找Term的过程跟在MyISAM中记录ID的过程大致是一样的

    MyISAM中,索引和数据是分开,通过索引可以找到记录的地址,进而可以找到这条记录

    在倒排索引中,通过Term索引可以找到Term在Term Dictionary中的位置,进而找到Posting List,有了倒排列表就可以根据ID找到文档了

    (PS:可以这样理解,类比MyISAM的话,Term Index相当于索引文件,Term Dictionary相当于数据文件)

    (PS:其实,前面我们分了三步,我们可以把Term Index和Term Dictionary看成一步,就是找Term。因此,可以这样理解倒排索引:通过单词找到对应的倒排列表,根据倒排列表中的倒排项进而可以找到文档记录)

    为了更进一步理解,用两张图来具现化这一过程:

    https://img2018.cnblogs.com/blog/874963/201901/874963-20190127184959667-1135956344.pnghttps://img2018.cnblogs.com/blog/874963/201901/874963-20190127185725607-2022920549.png

    (至于里面涉及的更加高深的数据压缩技巧,以及多个field联合查询利用跳表的数据结构快速做运算来查询,这些大家有兴趣可以自己去了解)

     

    展开全文
  • ElasticSearch】(一)初识ES

    千次阅读 多人点赞 2018-07-22 11:21:25
    接触ElasticSearch一段时间了,前期调研、项目接入、数据同步、列表查询这些阶段都已经经历了,但是ES在脑海中的整体映像还是模模糊糊,做个梳理,认真地思考一下ElasticSearch中模糊的思维。  前提:  如图,...

           接触ElasticSearch一段时间了,前期调研、项目接入、数据同步、列表查询这些阶段都已经经历了,但是ES在脑海中的整体映像还是模模糊糊,做个梳理,认真地思考一下ElasticSearch中模糊的思维。

           前提:

           如图,是从github上学习到了,宏观总结阶段的流程化思考,很科学的学习习惯,我按照这个思路来总结下目前阶段我理解到的ElasticSearch.

    它是什么

    1.术语定义

          ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
          官网:https://www.elastic.co/products/elasticsearch 
          百度百科:https://baike.baidu.com/item/elasticsearch/3411206?fr=aladdin 

    2.它的历史
          出现原因:https://www.jianshu.com/p/3d43616999d9 (一个做菜谱的故事)
          历史版本:https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html(每个版本节点,做了哪些事情,有助于排解使用中的问题)
            
    3.构架

        

          如图所示,是ES的整体架构,从下往上说:
          1.Gateway是es用于存储索引的文件系统,支持多种文件类型,如图所示。
          2.Gateway往上就是分布式的Lucene框架,ES底层的API是由这一层提供的,每个节点都有一个Lucene引擎的支持。
          3.Lucene往上是Elasticsearch的模块,包括索引模块、搜索模块、映射解析模块等。River相当于第三方插件,用来导入第三方数据源,在2.x之后不再使用。
          4.ES模块之上是Discovery、Scripting和第三方插件。Discovery是ES的节点发现模块,不同机器上的ES节点要组成集群需要消息通信,集群内部选主master都是通过Discovery来做。Scripting用来支持JavaScript、Python等多语言,可以在查询语句中嵌入。
          5.再往上是传输模块和JMX。传输模块支持Thrift、Memcached、HTTP,默认HTTP传输。JMX是java的管理框架。
          6.再往上是ES提供给用户的接口,通过RESTful API和ES集群进行交互。

    4.核心概念
          1.集群
          代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

          2.节点
          一个节点是集群中的一个服务器,对于节点,最好采用被动加入的方式,不然容易产生“脑裂”现象。

          3.索引4.类型 5.文档

          这三个概念,参考与关系型DB的对比:

         

          6.分片
          es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

          7.副本
          es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。


    4.应用场景
         1.站内搜索
         用在网页信息量很大的网站,百度、github、stackoverflow,全文检索的功能,方便用户快速检索数据信息。
         2.NoSQL数据库
         Elasticsearch读写性能优于MongoDB,支持地理位置查询。
         3.日志分析
         日志分析由实时日志分析平台ELK(Elasticsearch、Logstash、Kiabana)完成,能够对日志进行集中的收集、存储、搜索、分析、监控以及可视化。

    5.同类常见技术
          Solr(全文搜索)对比es: https://blog.csdn.net/vv8086/article/details/74452178 
          Splunk(全文搜索、大数据搜索) 对比es:https://blog.csdn.net/github_39335046/article/details/73835390 

       

           从趋势上可见,近几年ES的排名也是越来靠前。

    学习前提、依赖
           RESTful API的使用
           JSON数据结构的了解。

    为什么会出现
         1.分布式
         2.全文检索
         3.近实时搜索和分析
         4.高可用
         5.模式自有
         6.RESTful API
         从这几个角度看,这似乎是es的优点,随着现在互联网项目的数据量越来越大,这恰恰是为什么es能越来越火的原因啊。

    缺陷
          换了好几个负面的关键词去搜索,抛开技术实现,从选型的角度,相比较solr,没有什么缺陷。像“深度分页”这种的,完全可以在使用的时候避免,官网给了很好的解决方案:Scroll以及from/size等方法。


    归纳整理并分享
          1.官网的Getting Started绝对是最快、最好的学习方式;
          2.安装时候,通过HEAD插件,或者googl浏览器的sense插件,自己敲一敲,多动手;

          elasticsearch辅助:
          1.head插件
          2.Kiabana

     

     脑图总结

     1.概述;2.应用;3.原理;4.QA

    展开全文
  • Elasticsearch从入门到实战

    千人学习 2020-03-11 14:33:08
    Elasticsearch是业界领先的海量搜索引擎,开箱即用的特性让其拥有最多的装机量。当前采用和使用Elasticsearch的企业越来越多。 本课程不仅会涉及Elasticsearch的基本安装和配置,更会对其基本操作进行详细的...
  • 前言ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用。 ElasticSearch 提供了一套基于restful风格的全文检索服务组件。前身...

    前言

    ElasticSearch 是一个高可用开源全文检索和分析组件。提供存储服务,搜索服务,大数据准实时分析等。一般用于提供一些提供复杂搜索的应用。
    ElasticSearch 提供了一套基于restful风格的全文检索服务组件。前身是compass,直到2010被一家公司接管进行维护,开始商业化,并提供了ElasticSearch 一些相关的产品,包括大家比较熟悉的 kibana、logstash 以及 ElasticSearch 的一些组件,比如 安全组件shield 。当前最新的EElasticSearch 版本为 5.1.1 ,比较应用广泛的为2.X,直到 2016-12 推出了5.x 版本 ,将版本号调为 5.X 。这是为了和 kibana 和 logstash 等产品版本号进行统一 ElasticSearch 。

    准实时:ElasticSearch 是一个准实时的搜索工具,在一般情况下延时少于一秒。

    特点
    支持物理上的水平扩展,并拥有一套分布式协调的管理功能

    2.操作简单
    i:单节点的ES,安装启动后,会默认创建一个名为elasticsearch的es集群。如果在局域网中存在该clustr.name,会自动加入该集群。形成一个ElasticSearch 集群 。
    ii:多节点ES,在同一个局域网内的ES服务,只需要配置为同一个clust.name 名称即可成为
    一个ES集群。集群能够将同一个索引的分片,自动分布到各个节点。并在高效的提供查询服务的同时,自动协调每个节点的下线以及上线情况。

    3.restful 风格的API

    提供了一套关于索引以及状态查看的restful风格接口。至于什么是Restful风格服务,请移步
    谈谈到底什么是rest风格架构设计?

    对比Solr

    Solr与ES都是基于java/lucence来做一套面向文档结构的Nosql结构的数据库。

    1.分布式
    solr 分布式 需要结合zookeeper 来实现,ES 自身有相关分布式协调。

    2.支持的数据结构
    solr支持 xml json html 等多种数据结构,而ES 仅支持json这种结构。

    3.性能
    solr在新建索引时是IO阻塞的,所以如果在新建索引时同时进行搜索这时候相比ES来的相对较快。所以在实时性上,ElasticSearch 相比还是更好的选择。

    对比MongoDB

    MongoDB与ES都是一种Nosql结构的处理方式,故在这里也进行一些比较

    1.分布式

    MongoDB支持副本集的集群方式,而ES同样支持分布式结构

    2.数据结构

    MongoDB支持json方式,这点与ES也是一样。MongoDB同样还支持 Grid 方式来存放多媒体文档,这点Es是不支持的。

    3.事务性

    在这点上MongoDB和ES倒是有点类似,都没有对于强事务的支持。虽然MongoDB手册中有两阶段的方式来支持多个文档的操作事务的支持,但是一般情况都好像没有使用到。
    从人的认知系统来说,总是倾向于的将一些未知和陌生的事物联系到自身已经有的知识系统上,或者实例化到实际生活中某个场景。我们会经常看到一些‘helloworld’程序结合生活中的实例来理解,也是这个道理。这里为了我们更好的理解 ElasticSearch 这样一个全文检索的工具
    联系到之前常用的关系型数据库Mysql

    基本概念

    Index

    定义:类似于mysql中的database。索引只是一个逻辑上的空间,物理上是分为多个文件来管理的。
    命名:必须全小写
    描述:因为本身ES是基于Lucene的,所以内部索引的本质上其实Lucene的索引构造方式,具体Lucene的 索
    引文件具体分为那几个文件,之前我在Lucene部分的有过介绍【http://blog.csdn.net/cfl20121314/article/details/46008203 】。
    ES中index可能被分为多个分片【对应物理上的lcenne索引】,在实践过程中每个index都会有一个相应的副
    本。主要用来在硬件出现问题时,用来回滚数据的。这也某种程序上,加剧了ES对于内存高要求。

    Type

    定义:类似于mysql中的table,根据用户需求每个index中可以新建任意数量的type。

    Document

    定义:对应mysql中的row。有点类似于MongoDB中的文档结构,每个Document是一个json格式的文本。

    Mapping

    更像是一个用来定义每个字段类型的语义规范在mysql中类似sql语句,在ES中经过包装后,都被封装为友好的Restful风格的接口进行操作。这一点也是为什么开发人员更愿意使用ES或者compass这样的框架而不是直接使用Lucene的一个原因。

    Shards & Replicas

    定义:能够为每个索引提供水平的扩展以及备份操作。
    描述:
    Shards:在单个节点中,index的存储始终是有限制,并且随着存储的增大会带来性能的问题。为了解决这个问题,ElasticSearch提供一个能够分割单个index到集群各个节点的功能。你可以在新建这个索引时,手动的定义每个索引分片的数量。
    Replicas:在每个node出现宕机或者下线的情况,Replicas能够在该节点下线的同时将副本同时自动分配到其他仍然可用的节点。而且在提供搜索的同时,允许进行扩展节点的数量,在这个期间并不会出现服务终止的情况。
    默认情况下,每个索引会分配5个分片,并且对应5个分片副本,同时会出现一个完整的副本【包括5个分配的副本数据】。

    言而总之,用一句话来总结下。ElasticSearch 是一个基于 lucence 可水平扩展的自动化近实时全文搜索服务组件。
    参考文档:

    Elasticsearch 5.X 新特性 [http://www.w2bc.com/article/188196]
    ElasticSearch官方文档 [https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html]
    索引的原理:http://blog.chinaunix.net/uid-22679909-id-1771453.html

    展开全文
  • ElasticSearch新手教程

    千次阅读 2017-12-09 22:18:06
    一.ES原理分析 1.1 全文检索的一般过程 1.2 反向索引 1.3 和nosql相比 1.4 ES的优缺点分析: 1.5 ES的特点: 二.讲讲Segment 2.1 什么是segment 2.2 segment流程图 2.3 删除和更新 2.4 实时索引 2.5更新...
  • 一 基本数据类型 1.text:被全文搜索的字符串,字段内容会被分析,在生成倒排索引之前,字符串会分析器分成词项。该类型不用于排序,很少用于聚合。 2.keyword:用于索引结构化的字段,例如:邮件地址、主机名、...
  • 全文搜索 属于最常见的需求,开源的 ElasticSearch (以下简称 Elastic)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 Elastic 的底层是开源...
  • 一 max min avg sum 二 统计某个字段有值的文档数 三 去重 四 status
  • 简述ESElasticSearch入门简介)

    万次阅读 2018-09-05 19:43:27
    根据ES的官方文档,可以简单定义以下3点: 1 .一个分布式的实施文档存储,每个字段可以被索引与搜索 2 .一个分布式实时分析搜索引擎 3 .可以胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据。 ...
  • es复合条件查询

    万次阅读 2019-07-14 13:26:26
    es中,使用组合条件查询是其作为搜索引擎检索数据的一个强大之处,在前几篇中,简单演示了es的查询语法,但基本的增删改查功能并不能很好的满足复杂的查询场景,比如说我们期望像mysql那样做到拼接复杂的条件进行...
  • 版权声明:本文为博主原创文章,欢迎转载,转载时请注明出处。欢迎留言讨论,大数据讨论qq群201011292 https://blog.csdn.net/Dante_003/article/details/76890218 &...amp;lt;/div> ...
  • **ES** 全称 **ElasticSearch** 是一种分布式全文搜索引擎,基于Lucene(全文搜索框架)开发而来。 Lucene是公认的迄今为止的最好用的搜索引擎库,但是他所提供的API对于我们使用者来说,是非常苦恼的,常要花费大量...
  • ElasticSearch停止启动

    千次阅读 2017-03-08 10:25:40
    ElasticSearch停止启动
  • elasticsearch查看所有index

    万次阅读 2016-10-17 12:18:38
    curl 'localhost:9200/_cat/indices?v'
  • elasticsearch查看所有索引

    万次阅读 2019-06-28 15:08:00
    GET _cat/indices
  • Elasticsearch之开启外网访问-yellowcong

    万次阅读 热门讨论 2017-12-07 13:14:34
    启动elastic 后,发现elastic不可以直接外网访问,需要修改elasticsearch.yml 配置文件,添加network.host 配置,才可以外方访问到
  • Elasticsearch在linux下的重启

    万次阅读 2017-09-06 14:35:05
    最近一台测试机因为磁盘空间不足,导致运行在上面的elasticsearch宕机。 下面列出的是重启过程中用到的几个命令:首先查看操作系统版本cat /proc/version使用如下命令启动down掉的服务/etc/init.d/elasticsearch ...
  • Mac 使用brew安装ElasticSearch

    万次阅读 2017-07-20 01:21:54
    Mac 使用brew安装ElasticSearch brew update brew install elasticsearch 安装完后的路径 elasticsearch: /usr/local/Cellar/elasticsearch/5.5.0 Data: /usr/local/var/elasticsearch/elasticsearch_xuchen/ Lo
1 2 3 4 5 ... 20
收藏数 422,391
精华内容 168,956
关键字:

es