赞
踩
Elasticsearch是一个分布式搜索和分析引擎,在Elastic Stack处于中心地位,Logstash和Beats能收集、聚合,丰富你的数据并将数据存储在Elastic Search中。Kibana使得你能够交互式探索数据,可视化展现,在数据中分享新的见解,管理并监控stack。Elasticsearch具备索引、搜索和分析的魔法。
Elasticsearch针对所有类型的数据提供近实时的搜索和分析,不管是结构化的数据还是非结构化的文档、数值数据还是地理空间数据,Elasticsearch能够通过有效存储、建立索引的方式来支持快速检索。你所能做的不只是简单的数据检索和信息聚合,还能够发现数据中的趋势和模型。当你的数据和查询量增长时,Elasticsearch 天生的属性支持你能够继续增长式发展。
当然,不是每个问题都是搜索问题,Elasticsearch也提供了一种快速而灵活的方式在广阔的一系列应用中操作数据:
1)应用程序或网站添加搜索框;
2)存储和分析日志、指标和安全事件数据;
3)使用机器学习针对实时行为数据进行自动建模;
4)自动化业务流将Elasticsearch作为存储引擎使用;
5)Elasticsearch能像GIS一样去管理、合并和分析空间信息;
6)Elasticsearch能像生物信息学工具一样去存储和处理基因数据;
我们持续惊讶于人们使用搜索的新奇方式,但是不管你是像上面提到的某一种方式一样简单的使用,还是使用Elasticsearch处理一个新的问题,你处理数据、文件和用Elasticsearch进行索引的方法是一致的。
Elasticsearch是分布式文档存储系统。Elasticsearch中的数据不是通过行或者列的形式进行存储,而是被序列化成JSON文档格式进行存储。在Elasticsearch集群中有多个节点,文档存储分布在多个节点上,任一节点都可以迅速访问到这些文档。
文档存储的时候创建索引并支持近实时(1s内)的全文检索。Elasticsearch使用倒排索引的数据结构支持非常快速的全文检索。倒排索引列出文档中每个单词(去重后)与文档的对应关系。
索引可以被认为是文档的最优化集合,文档是字段的集合,字段是包含key-value的键值对。默认情况下Elasticsearch针对文档的每个字段进行索引,每个字段都有专一优化的数据结构。比如说,文档类型的字段使用倒排索引,数值类型和地理空间类型字段使用BKD树。这种根据不同字段数据结构进行聚合,并返回搜索结果是Elasticsearch为什么这么快的原因。
Elasticsearch也是结构宽松的,不需要为文档的每个字段指定索引结果,Elasticsearch自动化匹配支持动态映射为新的字段添加索引。这种行为让它很容易索引和搜索你的数据-从索引文档开始,Elasticsearch会自动匹配 booleans, floating point and integer values, dates, and strings到适合的Elasticsearch结构类型。
不管怎么样,你比Elasticsearch更了解你的数据,你能够通过自定义动态字段映射或者为每个字段指定映射来控制每个字段的存储和索引方式。
通过自定义映射你能够:
1)区分那些字符串类型的字段是用于全文检索的那些不需要;
2)对特定的语言采用特定的分词器;
3)对字段进行某些特定匹配场景优化;
4)使用自定义数据结构;
4)使用一些不能被自动映射的数据类型,比如geo_point 和geo_shape类型。
因为不同的需求,我们经常采用不同的方式针对同一个字段进行索引处理。比如说,对于一个字符串类型的字段,你可能想要把它当做text字段进行全文本搜索,或者当做keyword字段对数据进行排序和聚合,也可以使用多种的语言分析引擎来处理用户输入的不同的字段内容。
这中全文本检索的分析链也应用在搜索中,当你查询全文本字段,在索引中搜索条件对查询文档进行同样的分析。
之所以你能够使用Elasticsearch进行文档存储,文档和元数据的检索,主要感谢Apache Lucene搜索引擎的搜索访问功能。
Elasticsearch提供一种简单易用的REST API用于管理集群、索引和搜索你的数据。你能够直接通过命令行或者通过开发者平台比如kibana提交查询语句。你可以在应用中使用Elasticsearch客户端,Elasticsearch支持多种语言选择,包括JAVA、JavaScript, Go, .NET, PHP, Perl, Python or Ruby等。
搜索你的数据
Elasticsearch REST APIs支持结构化搜索,全文检索和两者结合的复杂查询。结构化查询和SQL查询类似,例如,你能够在你的雇员索引中搜索性别和年龄的字段,并通过雇佣日期字段进行排序。全文搜索在所有文档中搜索查询的字符串并按照相关性排序返回结果-匹配性越高结果越前。
Elasticsearch 除了支持单个词的查询,还支持短语查询、相似度查询、前缀查询和提供自动补全建议。
你还有其他想搜索的数值型或者地理空间位置数据吗?Elasticsearch 提供非文本的索引方式,支持在最优化数据结构进行地理和数值型数据的高性能查询。
你可以使用Elasticsearch的JSON查询命令,也可以通过类SQL的查询语句搜索和聚合,JDBC 和ODBC 支持第三方应用通过SQL连接Elasticsearch。
分析
Elasticsearch的聚合功能支持你构建复杂的数据统计查询,发现数据中的关键指标、模式和趋势。这不只是大海捞针式的查询,聚合功能支持你解答以下问题:
1)海里面有多少根针?
2)针的平均长度是多少?
3)每个制造商制造的针的平均长度是多少?
4)每六个月大海新增多少针?
还可以回答以下更难的问题,比如:
1)你最喜欢那个针制造商?
2)是否有不合格或者异常的针?
因为聚合操作使用相同数据结构进行搜索,因此速度非常快,这种操作也支持你进行近实时的分析和可视化数据。报表和看板会随数据改变进行更新,因此你可以基于最新的数据进行操作。
另外,聚合操作可以和搜索操作一起使用,你可以同时在同一批数据用同一个请求进行搜索文档,过滤结果和分析等操作。因为聚合操作是通过特殊搜索统计文档,你不但可以计算所有尺寸为70的针的数量,还可以计算所有尺寸为70且符合特定条件比如不锈针的数量。
等等,还有更多
想自动分析时序数据?可以使用机器学习为数据正常行为创建识别基准线,辨别异常数据。通过机器学习,我们可以:
1)检测异常的数据、计数和频率
2)检测稀有的数据
3)检测群体中异常的成员
还有更强大的功能吗?不需要制定特殊的算法训练模型,进行数据相关的配置,你就能完成以上功能。
Elasticsearch支持根据需要进行扩容,这得益于Elasticsearch是原生支持分布式的。你可以往集群中添加节点来扩充容量,Elasticsearch会在节点中自动化分配数据和负载查询,不需要应用程序的参与,Elasticsearch会均衡多个节点的数据,提供良好的可伸展性和高可用性。节点越多,体验越好。
这是怎么运行的呢?Elasticsearch索引是包含一个或多个物理分片的逻辑组,每个分片都有自己的索引数据。Elasticsearch通过将索引的文档分割成多个分片,并且将分片划分到多个节点,实现冗余容灾,当发生磁盘损坏或者集群节点增加扩容时仍然可用。当集群扩容时,Elasticsearch自动迁移分片来重新均衡集群。
有两种类型的分片:主分片和副本分片。索引中的每个文档都有一个主分片。副本分片是主分片的复制。副本为数据提供冗余复制保证磁盘损坏和集群扩容时仍然能提供读写、搜索或者文档检索的服务。
索引中主分片的数量自索引创建以后就不能更改,但是副本分片的数量是可以随时更改的,不需要中断索引或者查询操作。
这依赖于
分片大小和索引中主分片数量有很多方面因素的考虑和权衡。分片越多,维持索引需要的消耗越大。分片越大,Elasticsearch平衡集群时迁移分片需要消耗的时间越长。
查询的分片越小,查询速度越快,但是更多的查询也意味着更多的消耗,因此有时候分片大分区少的查询可能更快。总之,根据实际来吧。
一些小小的建议:
1)分片大小控制在几GB到几十GB。时序数据的分片通常为20GB到40GB;
2)避免分片过多。节点的分片数量与可用空间成正比。一般来说,每GB的分片数应小于20.
确定分区大小和数量最好的方式是在应用场景下使用数据和查询进行测试。
容灾
为了保证良好的性能,集群的节点需要位于同一个网络环境下。因为跨数据中心迁移分片会耗费比较长的时间。但是为了高可用考虑我们也不能将鸡蛋放置在同一个篮子里面。当一个节点发生服务故障时,另一个节点需要能够及时接管。如何无感知的实现呢?使用CCR(跨集群副本功能)
CCR(跨集群副本)可以通过热备份自动同步主集群索引数据到第二集群中,如果主机群挂了,第二集群可以接管。可以使用CCR创建第二集群为近距离的用户提供只读服务。
CCR(跨集群副本)是主从服务,主机群上的索引是主索引并且处理所有写请求。第二集群的索引提供只读服务。
运维
像所有企业应用系统一样,也需要对Elasticsearch进行安全管理和监控。Elasticsearch统一的安全、监控和管理模块使得你可以使用kibana作为集群管理中心,通过数据回滚和索引中心管理帮助你更好的管理数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。