码迷,mamicode.com
首页 > 其他好文 > 详细

Elasticsearch2.x手册 - 第1章 入门指南 - 1.1 基本概念

时间:2016-02-19 19:14:39      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:手册   教程   elasticsearch   

第1章         入门指南

Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许你存储搜索快速并接近实时地分析大数据量。它通常是作为底层引擎应用于复杂的搜索功能和需求。

这里有几个示例用例Elasticsearch可用于

  • 你运行一个网站的在线商店你让你的客户搜索你卖的产品。在这种情况下你可以使用Elasticsearch来存储你的整个产品目录和库存为他们提供搜索和自动完成的建议

  • 你想收集日志和交易数据要分析和挖掘这些数据寻找趋势统计总结或异常。在这种情况下你可以使用LogStashElasticsearch / LogStash / Kibana的一部分来收集、汇总并分析你的数据然后由Logstash将这些数据反馈到Elasticsearch。一旦数据存储在Elasticsearch你可以进行搜索和聚合你感兴趣的任何信息。

  运行一个价格预警平台允许价格敏感的客户指定的规则例如我对一个特定的电子产品感兴趣我想得到通知如果产品价格在未来一个月内任何供应商低于X。在这种情况下你可以把供应商的价格推送给Elasticsearch和使用反向搜索Percolator的能力来匹配客户查询价格走势一旦发现匹配则将警报发送到客户。

  • 你有分析/商业智能需求要迅速调查、分析、可视化和大数据要求认为数百万或数十亿条记录。在这种情况下你可以使用Elasticsearch来存储你的数据然后用KibanaElasticsearch/ LogStash / Kibana的一部分建立自定义的dashboards可以查看对于你重要的数据。此外你可以使用Elasticsearch的聚合功能来执行复杂的商业智能与数据查询。

本文档将引导你通过Elasticsearch的启动和运行过程中并进行基本操作如索引、搜索和修改你的数据对Elasticsearch有个基本了解。在本教程的最后你应该理解了Elasticsearch是什么它是如何工作的并希望你得到启发能够使用它来构建复杂的搜索应用程序或者从你的数据中挖掘信息。

1.1      基本概念

Elasticsearch有几个核心概念。从一开始理解这些概念将大大有助于理解在学习过程中

  • Near Realtime (NRT)

Elasticsearch是近实时搜索平台。这意味着有轻微的延迟通常为1秒从你建立索引直到变为可搜索的时间。

  • Cluster

一个集群是一个或多个nodesservers的集合共同存储你的整个数据并提供联合索引和搜索功能的所有节点。集群是由一个唯一的名称确认的默认为“Elasticsearch” 这个名字很重要因为一个节点只能通过设置的名称来成为集群的一部分。

确保你不同的环境中不会使用相同的群集名称否则可能最终节点会加入错误的集群。比如你可以使用logging-devlogging-stagelogging-prod来标记为研发stage和生产集群环境。

  • Node

一个节点是一个server属于群集的一部分存储你的数据并参与集群的索引和搜索功能。就如clusternode也是由一个唯一名称来确定的默认为一个随机字符在node启动时分配给节点。

一个节点可以通过配置的群集名称加入指定的集群。

  • Index

索引是有类似特性的文档集合。例如你可以有一个用户数据的索引也可以有一个产品目录的索引还可以有一个订单数据的索引。索引通过名称来定义必须全部小写

在一个集群中你可以定义多个索引。

  • Type

在索引中你可以定义一个或多个类型。类型就是索引分区。一般来说类型定义了一组有相同字段的文档。例如让我们假设你运行了一个博客平台你的所有数据存储在一个索引中。在这个索引中你可以定义一个用户数据类型博客数据类型和评论数据类型。

  • Document

一个Document就是一个可以被索引的基本信息单元。例如一个客户为一个Document一个产品为另一个Document而一个订单为另一个Document。使用JSON格式来表示Document

在一个Index/Type中你可以存储很多Document

  • Shards & Replicas

索引可以存储大量的数据可以超过单个node的硬件限制。例如十亿个Document占用磁盘空间1TB的单Index可能不适合存储在单个node的磁盘并且仅从单个节点的搜索请求服务可能太慢了。

为了解决这一问题Elasticsearch提供了将你的Index划分为多个块Shards的能力。当你创建一个索引你可以简单地定义你想要的Shards数量。每个Shards本身是一个独立的“Index”可以存储在集群中的任何节点。

分片主要有两个重要原因

  • 它允许你水平拆分/扩展

  • 它允许你分配和并行操作的Shards可能在多个节点上从而提高性能/吞吐量

Shards如何分布和搜索请求如何汇总Documents完全由Elasticsearch管理。对于用户是透明的。

复制主要有两个重要原因

  • 它在Shard/Node失败的情况下提供了高可用性。因此replica shard不会与original/primary shard分配在相同的node上。

  • 可以水平扩展你的搜索量/吞吐量因为搜索可以在所有副本上并行执行。

总结每个Index可以拆分成多个ShardsIndex也可以复制零意味着没有replicas或多次。一旦复制每个Index都会有primaryshardsreplicashards。在创建Index时可以定义每个IndexShardsreplicas数量。创建Index后你可以随时动态改变replicas的数量但不能修改Shards的数量。

默认情况下每个IndexElasticsearch上分配5primary shards1replica这意味着如果你的集群节点有两个Indexs你将拥有5primary shards5replicashards每个索引共有10 shards

技术分享

每个Elasticsearch shard都是一个Lucene Index。单个Lucene Indexdocuments最大数量限制。限制为2,147,483,519 (= Integer.MAX_VALUE -128)。你可以使用_cat/shards api来监控shard的大小


本文出自 “java架构师之路” 博客,请务必保留此出处http://eric100.blog.51cto.com/2535573/1743458

Elasticsearch2.x手册 - 第1章 入门指南 - 1.1 基本概念

标签:手册   教程   elasticsearch   

原文地址:http://eric100.blog.51cto.com/2535573/1743458

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!