Elasticsearch是什么?

Elasticsearch是什么?

数据:文档和索引

Elasticsearch是一个分布式文档存储。Elasticsearch存储的是序列化为JSON文档的复杂数据结构,而不是以列行数据的形式存储信息。当集群中有多个Elasticsearch节点时,存储的文档分布在整个集群中,可以立即从任何节点访问。

当存储文档时,它几乎是实时的——在1秒内就可以被索引和完全搜索。Elasticsearch使用了一种名为反向索引的数据结构,它支持非常快速的全文搜索。反向索引列出任何文档中出现的每个惟一单词,并标识每个单词出现的所有文档。

可以将索引看作是文档的优化集合,每个文档是字段的集合,这些字段是包含数据的键值对。默认情况下,Elasticsearch对每个字段中的所有数据进行索引,每个索引字段都有一个专用的、优化的数据结构。例如,文本字段存储在倒排索引中,数字和地理字段存储在BKD树中。使用每个字段的数据结构来组装和返回搜索结果的能力是Elasticsearch如此快速的原因

Elasticsearch还具有无模式的能力,这意味着可以对文档进行索引,而不必显式地指定如何处理文档中可能出现的每个不同字段。当动态映射被启用时,Elasticsearch会自动检测并向索引添加新的字段。这种默认行为使得创建索引和浏览数据变得很容易——只要开始创建索引文档,Elasticsearch就会检测布尔值、浮点值和整数值、日期和字符串,并将它们映射到合适的Elasticsearch数据类型。

但是,最终,您比Elasticsearch更了解您的数据以及您想如何使用它。您可以定义规则来控制动态映射,并显式地定义映射来完全控制字段的存储和索引方式。

定义您自己的映射使您能够:

区分全文字符串字段和精确值字符串字段
执行特定于语言的文本分析
为部分匹配优化字段
使用自定义日期格式
使用geo_point和geo_shape等不能自动检测的数据类型

为不同的目的以不同的方式为同一个字段建立索引通常是很有用的。例如,您可能希望将字符串字段索引为全文搜索的文本字段和用于排序或聚合数据的关键字字段。或者,您可以选择使用多个语言分析器来处理包含用户输入的字符串字段的内容

在索引期间应用于全文字段的分析链也在搜索时使用。当查询全文字段时,在索引中查找术语之前,查询文本会进行相同的分析。

信息输出:搜索和分析

虽然您可以使用Elasticsearch作为文档存储和检索文档及其元数据,但它的真正强大之处在于能够轻松访问构建在Apache Lucene搜索引擎库上的全套搜索功能。

Elasticsearch提供了一个简单、一致的REST API,用于管理集群、索引和搜索数据。出于测试目的,您可以直接从命令行或通过Kibana中的Developer Console轻松地提交请求。在应用程序中,您可以使用Elasticsearch客户端来选择语言:Java、JavaScript、Go、. net、PHP、Perl、Python或Ruby。

搜索你的数据

Elasticsearch REST api支持结构化查询、全文查询和结合这两种查询的复杂查询。结构化查询类似于您可以在SQL中构造的查询类型。例如,您可以在雇员索引中搜索性别和年龄字段,并根据hire_date字段对匹配项进行排序。全文查询查找与查询字符串匹配的所有文档,并根据相关度(它们与搜索词的匹配程度)返回它们。

除了搜索单个术语外,您还可以执行短语搜索、相似度搜索和前缀搜索,并获得自动补全建议。

是否有想要搜索的地理空间数据或其他数字数据?Elasticsearch在优化的数据结构中对非文本数据进行索引,支持高性能的地理和数字查询。

您可以使用Elasticsearch的全面的json风格的查询语言(query DSL)访问所有这些搜索功能。您还可以构造SQL风格的查询来在Elasticsearch内部本地搜索和聚合数据,JDBC和ODBC驱动程序允许许多第三方应用程序通过SQL与Elasticsearch交互。

分析你的数据

Elasticsearch聚合使您能够构建复杂的数据总结,并洞察关键指标、模式和趋势。不只是寻找众所周知的“大海捞针”,聚合使您能够回答这样的问题:

How many needles are in the haystack?
What is the average length of the needles?
What is the median length of the needles, broken down by manufacturer?
How many needles were added to the haystack in each of the last six months?

您还可以使用聚合来回答更微妙的问题,例如

What are your most popular needle manufacturers?
Are there any unusual or anomalous clumps of needles?

因为聚合利用了用于搜索的相同数据结构,所以它们也非常快。这使您能够实时分析和可视化数据。您的报告和仪表板会随着数据的更改而更新,因此您可以根据最新的信息采取行动。

What’s more, aggregations operate alongside search requests. You can search documents, filter results, and perform analytics at the same time, on the same data, in a single request. And because aggregations are calculated in the context of a particular search, you’re not just displaying a count of all size 70 needles, you’re displaying a count of the size 70 needles that match your users' search criteria—for example, all size 70 non-stick embroidery needles

可伸缩性和弹性: 集群、节点和分片

Elasticsearch始终可用,并可根据您的需求进行扩展。它通过自然分配来做到这一点。您可以将服务器(节点)添加到集群中以增加容量,Elasticsearch会自动将您的数据和查询负载分布到所有可用的节点上。Elasticsearch不需要彻底检查应用程序,它知道如何平衡多节点集群以提供规模化和高可用性。节点越多越快乐

这是如何工作的呢?实际上,Elasticsearch索引只是一个或多个物理碎片的逻辑分组,其中每个碎片实际上是一个自包含的索引。通过将索引中的文档分布到多个分片上,并将这些分片分布到多个节点上,Elasticsearch可以确保冗余,既可以防止硬件故障,又可以随着节点添加到集群中而增加查询容量。随着集群的增长(或收缩),Elasticsearch会自动迁移碎片来重新平衡集群

有两种类型的分片:基本分片和复制分片。索引中的每个文档都属于一个主分片。复制分片是主分片的副本。副本提供数据的冗余副本,以防止硬件故障,并增加服务读取请求(如搜索或检索文档)的容量。

索引中主分片的数量在索引创建时是固定的,但是复制分片的数量可以在不中断索引或查询操作的情况下随时改变。

取决于

关于分片大小和为索引配置的主分片数量,有许多性能方面的考虑和权衡。碎片越多,维护这些索引的开销就越大。碎片的大小越大,当Elasticsearch需要重新平衡集群时,移动碎片所需的时间就越长。

查询大量的小分片可以使每个分片的处理速度更快,但是查询越多意味着开销越大,因此查询少量的大分片可能会更快。总之,这要看情况。

作为起点:
目标是将平均碎片大小保持在几GB到几十GB之间。对于基于时间的数据的用例,通常会看到20GB到 40GB范围的分片。
避免大量碎片的问题。一个节点可以容纳的分片数量与可用堆空间成正比。作为一般规则,每GB堆空间的碎片数量应该小于20个。

为您的用例确定最佳配置的最佳方法是通过使用您自己的数据和查询进行测试。

万一发生灾难

出于性能原因,集群内的节点需要位于同一个网络上。在不同数据中心的节点之间平衡集群中的分片花费的时间太长了。但是高可用性架构要求您避免把所有鸡蛋放在一个篮子里。当一个位置发生重大故障时,另一个位置的服务器需要能够接管。无缝。答案吗?Cross-cluster复制(CCR)。

CCR提供了一种从主集群自动同步索引到可作为热备份的辅助远程集群的方法。如果主集群故障,辅助集群可以接管。您还可以使用CCR创建辅助集群,以服务于与用户地理位置相近的读请求。

跨集群复制是主备复制。主集群上的索引是活动领导索引,并处理所有写请求。复制到次要集群的索引是只读的追随者。

护理和喂养

与任何企业系统一样,您需要工具来保护、管理和监视您的Elasticsearch集群。安全、监控和管理特性集成到Elasticsearch中,使您能够使用Kibana作为管理集群的控制中心。数据汇总和索引生命周期管理等特性可以帮助您随着时间的推移智能地管理数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271