内容简介:Elasticsearch入门教程:索引和文档操作
Elasticsearch 是一个高伸缩的开源全文搜索和分析引擎。它可以快速地、近实时的存储,搜索和分析大规模的数据。一般被用作底层引擎/技术,为具有复杂搜索功能和要求的应用提供强有力的支撑。
Elasticsearch 能够被用在这些地方:
- 假设有一个在线的商店网站,为了让客户搜索到销售的产品。在这种情况下,可以使用 Elasticsearch 来存储你的整个产品目录和库存,并提供搜索以及自动给他们一些建议。
- 假设想要收集日志或者交易数据,通过分析、挖掘来寻找趋势,统计,总结或异常。在这种情况下,可以使用 LogStash ( Elasticsearch/Logstash/Kibana 栈的一部分)去收集、汇总并解析你的数据,然后通过 LogStash 把这些数据递交给 Elasticsearch 。一旦 Elasticsearch 取得了数据,你就可以进行搜索并且聚合你感兴趣的信息。
- 假设运行一个价格提醒平台,让价格精明的客户指定一个规则,如“我有兴趣购买一个特定的电子小配件,如果下个月内,有卖家的价格低于$x,我想得到通知”。在这种情况下,你可以把卖家的价格递交到 Elasticsearch ,使用反向搜索(过滤器),将价格变动与客户查询进行匹配,一旦发现匹配结果,则通知客户。
- 假设有分析(商业智能)需求,希望快速调查,分析,可视化和在大量(考虑百万或十亿条记录)的数据中查找一个特设的问题。在这种情况下,你可以使用 Elasticsearch 储存数据,然后使用 Kibana ( Elasticsearch 栈的一部分)构建自定义仪表板,以便可视化对你重要的数据。另外,你可以使用 Elasticsearch 聚合功能,依靠数据执行复杂的商业智能查询。
对于本教程的其余部分,会通过 Elasticsearch 的启动和运行过程指导你初步认识它,并展示一些基本的操作,比如:索引,搜索和修改数据。本教程的结束后,你将会对 Elasticsearch 是什么以及它的工作原理有了较深的认识。希望你能受到启发,既能使用它建立复杂的搜索应用程序又能从你的数据中发掘有用的东西。
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
Elasticsearch 版本:5.4
基本概念( Basic Concepts)
有一些概念是 Elasticsearch 的核心 。 从一开始就理解这些概念将大大有助于以后的学习。
近实时( NRT)
Elasticsearch 是一个接近实时的搜索平台。这意味着从将文档索引的时间到变得可搜索的时间只有轻微的延迟(通常为1秒)。
集群( Cluster)
集群是一个或多个节点(服务器)的集合,它们联合起来保存所有的数据,并且可以在所有的节点上进行索引和搜索操作。集群由唯一的名称标识,默认是"elasticsearch"。由于一个节点仅仅可以属于一个集群,并根据集群名称加入集群。所以该名字很重要。
不要在不同的环境中使用一样的集群名字,否则可能会导致加入错误的集群。例如,你可以分别在开发,过渡,生产环境中使用集群名称, logging-dev , logging-stage 和 logging-prod 。
注意,只有一个节点的集群是有效和完美的。也可以拥有多个独立的集群,每个集群都有自己独特的集群名称。
节点( Node)
节点是一个单一的服务器,是集群的一部分,存储数据,并参与集群的索引和搜索。和集群一样,节点也是通过唯一的名字去区分,默认名字是一个随机的UUID(Universally Unique IDentifier),当服务器启动的时候就会设置到该节点。如果不想使用默认值,你也可以自定义节点的名称。名称对管理员来说十分重要,它可以帮助你区分出集群中的各个服务器和哪些节点相对应。
节点通过配置集群的名称,就可以加入到指定的集群。默认情况下,节点都加入一个叫 elasticsearch 的集群,这意味着如果你在网络中启动了大量的节点并且假如他们都能互相通讯的话,那么他们将会被自动的加入一个名字叫 elasticsearch 的集群。
索引(Index)
索引 是具有某种相似特征的文档的集合。例如,客户数据索引,产品目录索引,以及订单数据索引。索引由名称(必须全部为小写)标识,此名称用于在对文档进行索引、搜索、更新和删除操作时使用。在单个集群中,您可以根据需要定义任意数量的索引。
类型(Type)
一个索引可以定义一个或多个类型。类型是索引的逻辑类别/分区,你怎么理解都行。通常,为具有一组公共字段的文档定义一种类型。例如,一个博客平台,假如将所有数据存储在单个索引中。在此索引中,可以定义用户数据类型,博客数据类型以及评论数据类型。
文档(document)
文档是可以被索引的基本单位。例如,用一个文档保存某个客户的数据,或者保存单个产品的数据,或者保存单个订单的数据。文档使用JSON表示。在索引/类型中可以存储大量文档。值得注意的是,尽管文档本质上是存放在索引中,但实际上是被索引/分配到索引中的一个类型中。
分片和副本(shards & replicas)
一个索引可能存储海量数据,有可能超过单个节点的硬盘容量。例如,某个索引存储了10亿个文档,占用1TB的硬盘空间,单个节点的硬盘有可能不足以存储那么大的数据量,就算可以存储下,但是可能会降低服务器处理搜索请求的速度。
为了解决这个问题, elasticsearch 提供了分片功能,即将索引细分。创建索引时,可以简单地定义所需的分片数。每个分片本身就具备索引的全部功能,可以存放在集群中的任何一个节点。
分片很重要,主要原因有两个:
- 它允许您水平分割/缩放您的内容量
- 它允许你并行地分发操作到多个节点的分片上,从而可以提升性能或吞吐量。
碎片分发的机制,以及它的文档如何汇总回到搜索请求中完全由Elasticsearch管理,并且对用户来说是透明的。
在网络/云环境中,任何时候都可能发生故障,分片会 非常有用,并强烈建议使用故障转移机制,以防止分片/节点脱机或消失。 为此, elasticsearch 允许您将索引的分片复制一份或多份,也就是所谓的复制分片,或简写为副本。
副本很重要,主要原因有两个:
- 如果分片/节点出现故障,则可提供高可用性。 因此,要注意,副本与其复制的原始/主分片不能分配在同一节点上。
- 它允许您扩展搜索量/吞吐量,因为可以对所有副本并行执行搜索。
总而言之,每个索引可以分为多个分片。每个 索引也可以被复制零次(意味着没有副本)或多次。 一旦复制,每个索引将具有主分片(复制的原始分片)和副分片(主分片的副本)。 可以在创建索引时根据索引定义碎片和副本的数量。 创建索引后,您可以随时动态更改副本数,但不能更改事后的分片数。
默认情况下,每个索引都会被分配5个主分片和1一个复制分片,这意味着如果你的集群中有两个节点,你的索引将会有5个主分片和5个复制分片,总共有10个分片。
每个 elasticsearch 分片是一个 Lucene index ,一个 Lucene 索引中可以有很多的文档,截至 LUCENE-5843 ,最多2,147,483,519(= Integer.MAX_VALUE - 128) 个文档. 可以使用 _cat/shards api监视分片大小。
更多详情见请继续阅读下一页的精彩内容 : http://www.linuxidc.com/Linux/2017-06/144694p2.htm
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++数据结构与算法
[美]乔兹德克(Adam Drozdek) / 徐丹、吴伟敏 / 清华大学出版社 / 2014-10-1 / 63.00元
本书全面系统地介绍了数据结构,并以C++语言实现相关的算法。书中主要强调了数据结构和算法之间的联系,使用面向对象的方法介绍数据结构,其内容包括算法的复杂度分析、链表、栈、队列、递归、二叉树、图、排序和散列。书中还清晰地阐述了同类教材中较少提到的内存管理、数据压缩和字符串匹配等主题。书中包含大量的示例分析和图形,便于读者进一步理解和巩固所学的知识。一起来看看 《C++数据结构与算法》 这本书的介绍吧!