本教程可帮助您开始使用Elasticsearch。 您将学习如何创建和删除索引,如何将数据加载到索引以及如何执行基本查询。

> Visualizing data in Kibana, image created by myself

这不仅仅是快速的操作指南。 尽管可以使用它,但我也尽力在本教程中解释一些历史以及Elasticsearch的内部原理。 我相信您值得花时间去了解产品的工作原理以及它的发展方式。 这些基础知识将帮助您做出更明智的选择,以后您将不会后悔。

在本教程中,我将使用curl命令与Elasticsearch REST API进行通信。 您可以轻松地复制和粘贴它们,但可以使用任何其他喜欢的工具。 例如,Kibana的Devtools会自动识别并转换粘贴到其窗口中的curl命令。

以防万一您对Elasticsearch不熟悉,您可能需要先阅读以下内容:

设置测试环境

另外,如果您还没有这样做,请创建一个可以安全玩耍的测试环境。 我为此写了指南,值得一看。 最后,您将获得可用的Elasticsearch安装,Kibana,Cerebro和一些测试数据:

指标

索引是Elasticsearch的基础。 您可以将其与数据库中的表进行比较。 索引具有设置和映射。 您将进一步了解有关设置和映射的更多信息。

一点历史

最近,Elasticsearch索引可能具有多种类型。 例如,twitter索引可以包含类型为tweet和user的文档。 尽管这似乎是一个不错的功能,但它引起了混乱和意外的问题。

我之所以告诉您,是因为您会在网络上找到许多基于此不赞成使用的功能的示例和教程。 认识我或阅读我其他文章的人都知道我爱Elasticsearch。 最初的创作者(Shay Bannon)在设计方面做得很出色,从一开始我就是粉丝。 但是,就像生活中的一切一样,有些选择并非最优。 每个索引创建多个类型就是其中之一,我很高兴Elasticsearch有勇气和勇气有序地弃用和删除这些功能。

创建和删除索引

好吧,让我们继续有趣的东西。 Elasticsearch之所以称其名称,部分原因是其易用性。 例如,如果您将JSON文档插入不存在的索引中,Elasticsearch不会抱怨。 相反,它将自动为您创建一个索引,分析JSON文档并尽力猜测字段类型。

这使您可以快速启动并运行,例如 如果您想将一些一次性数据加载到其中进行分析,或者只是像我们这样玩耍。 但是,我要向您展示的是创建索引的正确而明确的方法。

创建索引可以很简单:

curl -X PUT"本地主机:9200 / twitter"

Elasticsearch将回复:

{ "acknowledged":true, "shards_acknowledged":true, "index":"twitter"}

但是,您需要比这更多的控制。 因此,我们将使用更多选项再次创建它。 首先,让我们删除该索引:

curl -X删除" localhost:9200 / twitter"

Elasticsearch应该回复:{" acknowledged":true}

那就对了。 没有警告,没有要求确认。 因此,请务必三重检查您的DELETE请求。

我假设您正在本地计算机上使用测试设置,因此您可能希望索引非常小,只有一个分片,没有副本。 这可以通过以下方式完成:

如果要创建供生产使用的索引,则在此处选择正确的数字会比较棘手。 为此,您需要更多有关分片和副本的知识。

碎片和副本

Elasticsearch在内部使用一种称为Apache Lucene的技术。 Lucene是功能强大的搜索引擎软件库,可将其数据存储在文件中。 这样的文件之一就是Elasticsearch中的分片。 分片是不可拆分的实体,只能通过添加文档来扩大。 Elasticsearch封装了Lucene并通过两种方式为我们提供帮助:

· 它通过REST API使Lucene易于使用

· 它围绕Lucene构建了一个分布式系统,因此我们可以超越一个文件甚至一台计算机的限制

碎片

分片用于在多个节点上分发数据。 这就是为什么在单个节点系统上只需要一个分片的原因。 Elasticsearch拥有经过良好测试的智能算法,可以在多个节点上最佳地分配分片,然后在这些分片上分配文档。

这些算法的局限性在于创建索引后,索引的分片数不能更改。 如果您有兴趣,可以在这里的文档中了解更多信息。 就目前而言,我们只想提供足够的碎片来适应未来的增长,但又不要浪费太多资源。 因此,如果您有3个节点的群集,则可以创建6个分片以适应将来数据量和节点数量的增长。 请记住,您随时可以为数据重新编制索引,因此不必太担心。

复制品

副本是碎片的副本。 被复制的分片称为主分片,它可以有0个或多个副本。 将数据插入Elasticsearch时,数据首先存储在主碎片中,然后再存储在副本中。

副本具有两个功能:

· 首先,它用于提高故障恢复能力。 当具有主分片的节点发生故障时,其中一个副本分片将成为新的主分片,而Elasticsearch将在另一个节点上创建一个新副本。

· 其次,副本用于提高性能。 获取和搜索请求可以由主分片和副本分片处理,因此工作负载可以更均匀地分布在多个节点上。

为了选择副本的数量,如果您的集群包含至少3个节点,我建议始终使用两个副本。 您最终将获得1个主要分片和该主要分片的两个副本,因此每个分片总共3个。 事实证明,这提供了一个非常可靠的系统,可以立即承受两个节点的故障而不会丢失数据。 从统计上讲,两个以上同时发生故障的节点很少。 如果发生这种情况,通常会遇到更大的问题(停电,网络问题,洪水,龙卷风)。

如果节点较少,那么很高兴知道以后可以增加和减少副本的数量。 因此,对于两个节点的群集(由于称为"裂脑"的问题,我不推荐这样做),请使用1个副本;对于单个节点的群集,请不要使用副本。

有关所有选项,请查阅文档。

创建映射

既然您知道如何正确创建和删除索引,我们就可以继续将数据加载到该索引中。 我们已经介绍了使用设置创建索引的方法,但是还没有介绍索引映射。

索引是您存储文档的位置。 映射定义了如何存储和索引文档(以及此处的字段)。

让我们为Twitter索引定义一个非常简单的映射:

您可以在此处看到三种字段类型:日期字段,关键字字段和文本字段。 您可以在文档中查找所有字段类型的所有详细信息。 让我们检查一下我们在上面创建的三个字段。

· post_time是日期字段。 您可以自定义日期字段以允许各种格式。 默认情况下,它将接受自UNIX时代以来的毫秒数,或带有可选时间的日期。 有效值例如为" 2015-01-01T12:10:30Z"," 2015-01-01"和1420070400001。

· 用户名是一个关键字字段。 关键字字段最适合结构化内容,例如电子邮件地址,主机名,状态代码,邮政编码,标签,或者在我们的情况下为用户名。 它们是筛选(查找用户名不稳定的所有推文),排序和聚合的理想选择。 关键字字段只能按其确切值进行搜索,而不会进行分析。

· 我们的消息字段是文本类型,是全文值(例如电子邮件正文,博客文章,产品描述或推文内容)的理想选择。 将分析一个文本字段,这意味着将对单个单词进行标记和存储,从而可以对其进行搜索。

您可以将数据加载到Elasticsearch中,而无需显式创建映射。 如前所述,Elasticsearch将猜测字段类型并在此方面做得很好。 但它可能会失败。 一个示例是可以同时包含文本和数字的字段。 例如,假设我们的用户名字段也接受数字。 如果您插入的第一个用户仅包含数字,例如23481,Elasticsearch将猜测这是一个整数字段。 现在,下一个包含文本的文档将失败,并显示一个讨厌的错误,因为您尝试将文本放入整数字段。

加载数据中

现在我们有了索引和正确的映射,我们必须将一些数据输入Elasticsearch。 在下一部分中,我们将探讨4种方式。

手动地

您可以使用Index API将数据插入索引,如下所示:

Elasticsearch将回答如下:

如您所见,它自动创建了一个文档ID(_id)。 您也可以选择自己的_id。 对于所有示例和选项,最好阅读文档。

现在,我们的推特索引中有一条鸣叫,太棒了! 如果您愿意,我可以再添加一些。 这样做时,您会注意到,逐个添加推文有点麻烦。 让我们研究更有效地添加数据的方法。

以编程方式索引数据

几乎所有您可以想象的语言都有官方和非官方的客户端库。 您可以使用任何喜欢的HTTP库手动执行所需的REST调用,但是我建议您使用一个库,因为它可以节省大量时间,并且代码更简洁。

您会在网络上找到许多有关如何使用这些库的示例,因此在本文中我不会过多地研究。 提示:开始插入大量数据后,请查看批量API。

通过使用Kibana

如果您没有编程经验或不熟悉命令行,仍然可以使用多种方法将数据导入到Elasticsearch中。 一种方法是使用Kibana。 转到机器学习>数据可视化器部分,您可以在其中导入CSV,日志文件或以换行符分隔的JSON。 该工具将分析您的数据,检测字段及其格式,并建议适当的映射。

在下面的屏幕截图中,我导入了在测试机上运行的Elasticsearch创建的日志文件。 然后,我进入"设置">"索引管理",并为刚创建的索引创建了索引模式。 现在,我可以浏览日志数据了。 以后,我什至可以加载更多数据(从前几天开始)。

> You can import data using Kibana. Here, I import the Elasticsearch log file and use the discovery

通过使用Beats和Logstash

Beats是单一用途数据托运人的平台。 Beat是一小块软件,可收集数据并将其直接发送到Elasticsearch或Logstash。 Beats可以在数百甚至数千台机器和系统上运行。

> A typical workflow using Beats and Logstash (source)

节拍有很多类型,它们都有特定的用途:

· Filebeat汇总并发送日志数据(实时),例如 Web服务器日志,应用程序日志

· Metricsbeat从您的系统和服务中收集指标。 从CPU到内存,从Redis到NGINX,等等

· Packetbeat是网络数据包分析器

· Winlogbeat收集Windows事件日志

您可以在此处了解更多节拍。

我本人已使用Filebeat收集应用程序日志。 然后将这些日志发送到Logstash,在这里Logsash被正确解析(即使是那些讨厌的多行Java堆栈跟踪)并插入到Elasticsearch中。

Logstash是一款软件,可以分析和解析各种日志文件,并将数据发送到" stash"。 此存储可以是Elasticsearch,但也支持其他系统,例如HDFS接收器,Kafka,Logly,MongoDB,S3,RabbitMQ,Redis等。

查询数据

现在,对于总决赛,我们准备进行一些查询并分析我们的数据!

如果您想和我一起玩,请使用以下脚本将一堆推文文档编入我们的Twitter索引:

Elasticsearch提供了几种搜索索引的方法,因此让我们开始吧。

URI搜索

我将从最简单的URI搜索开始。 非常简单,我们可以使用常规浏览器进行查询。 在浏览器中输入以下URL(或单击链接):

本地主机:9200 / twitter / _search?q =用户名:eriky&pretty

如您所见,我们的twitter索引具有_search端点。 我们使用了两个参数:

· q参数以Lucene查询语法执行搜索查询。

· 漂亮参数使Elasticsearch输出格式正确的JSON文档。

答复将如下所示:

您可以使用布尔逻辑(AND和OR),并且有一些高级运算符,例如 执行模糊搜索。 这是一个示例(请注意我故意犯的拼写错误):

http://localhost:9200/twitter/_search?q=Elastcsearch~1&pretty

〜(称为代字号)可用于模糊搜索。 〜1表示我们允许Elasticsearch查找带有拼写错误的单词" Elastcsearch"以及距该单词一个编辑距离的所有单词的文档。 一个编辑距离意味着替换,添加或删除字符。 这就是为什么您将为此查询获得的响应包含所有带有正确拼写单词" Elasticsearch"的推文的原因:

有关更多选项和用法,请访问URI搜索文档和查询语法文档。

要求搜身

更有可能的一种更高级的搜索方式是执行请求正文搜索。 接下来是对用户名的非常基本的搜索:

Elasticsearch将用我们已编入索引的" kimchy"的一条推文进行回复。

现在,让我们尝试布尔搜索。 我们将使用2020年之前(小于或等于)的post_date来获取" eriky"中的所有推文:

这里有很多值得探索的地方。 远远超出了我在本文中可能提到的范围。 出色的搜索请求正文文档将教您所有功能和选项。

获取单个文档

获取单个文档最快,最有效的方法是使用GET请求通过_id来获取它。 我们已经进行了一些查询,因此很容易选择一个ID并获取该文档。 由于我们的推文ID是随机生成的,因此我无法为您提供有效的示例。 相反,请查找其中一个ID,并将其替换为以下URL:

http:// localhost:9200 / twitter / _doc / ?漂亮

分析(汇总)

Elasticsearch非常擅长搜索,但是其最大的优点是您还可以通过使用聚合将其用于分析。

> Screenshot of one of the Kibana example dashboards

聚合基于一组文档构建分析信息。 聚合有很多类型,可以嵌套,使您可以对数据创建很棒的见解。 我不会手工编写汇总。 该主题值得一读(稍后再写!)。 相反,我想邀请您使用Kibana探索它们。 在Kibana中,您可以创建可视化。 这些可视化可以添加到仪表板。 Kibana示例数据还包含示例仪表板和可视化效果,可以向您展示工作中聚合的全部功能。

读了很长时间。 如果您做到了这一点:太棒了! 我希望您发现此Elasticsearch教程有用! 如果您发现错误,错别字或不一致之处,请告诉我,以便改进本文。

您可能会喜欢一些有关Elasticsearch的文章:

Elasticsearch可以存储数据吗?

剧透警告:可以,我将向您展示如何。 但这并不总是明智的。

如果您想了解我的写作的最新动态,请确保加入我的Substack。

(本文翻译自Erik-Jan van Baaren的文章《Elasticsearch Tutorial: Getting Hands-On》,参考:https://medium.com/tech-explained/getting-hands-on-with-elasticsearch-9969a2894f8a)

elasticsearch 分片_Elasticsearch教程:动手实践相关推荐

  1. elasticsearch 分片_Elasticsearch最佳实践之分片使用优化

    一.遇到的问题 与大多数分布式系统一样,Elasticsearch按照一定的Hash规则把用户数据切分成多个分片,然后打散到不同机器进行存储,从而实现大规模数据的分布式存储. cluster.png ...

  2. 58同城 Elasticsearch 应用及平台建设实践

    分享嘉宾:于伯伟 58同城 高级架构师 编辑整理:陈树昌 内容来源:DataFunTalk 导读:Elasticsearch是一个分布式的搜索和分析引擎,可以用于全文检索.结构化检索和分析,并能将这三 ...

  3. 两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享

    两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享   在当前社会,技术日新月异,一个全栈工程师不及时学习新知识,掌握AI技能,再过两年就算不上"全栈"了. 产品发烧友.前端 ...

  4. 产品经理也能动手实践的AI(二)- 做个识别宠物的AI

    https://www.toutiao.com/a6673604688056680972/ 上一篇产品经理也能动手实践的AI(一)- FastAI介绍,介绍了为什么选择FastAI,为什么适合产品经理 ...

  5. 产品经理也能动手实践的AI(一)- FastAI介绍

    https://www.toutiao.com/a6671600787744883213/ 如果你还不了解AI的准确含义,请查看我之前的文章: 人人都能搞懂的AI(一) 人人都能搞懂的AI(二)- A ...

  6. 让Elasticsearch飞起来!——性能优化实践干货

    让Elasticsearch飞起来!--性能优化实践干货 2018年12月19日 23:01:39 铭毅天下(公众号同名) 阅读数:8805更多 所属专栏: 深入详解Elasticsearch 版权声 ...

  7. 【Elasticsearch】检查您的 Elasticsearch 分片

    1.概述 翻译:https://www.dennyzhang.com/es_shard 人们可能会用很少的分片来启动他们的弹性搜索集群.甚至以某种方式从 1 开始. 小心!当您的数据变得更大时,您可能 ...

  8. 这篇 ElasticSearch 详细使用教程,内部分享时被老大表扬了

    这篇 ElasticSearch 详细使用教程,内部分享时被老大表扬了 一.快速入门 1.查看集群的健康状况 http://localhost:9200/_cat http://localhost:9 ...

  9. js前端开发案例教程之DOM购物车(动手实践:购物车)

    js前端开发案例教程 之 DOM购物车(动手实践:购物车) html和css <!DOCTYPE html> <html><head><meta charse ...

最新文章

  1. 吴恩达的Landing.ai又迎来一位AI大牛
  2. 学界 | 史上最强GAN图像生成器,Inception分数提高两倍
  3. oracle23290,oracle标题
  4. java 编写线程公共类_002-java多线程工具类
  5. xflash里的hello world程序
  6. 《0bug-C/C++商用工程之道》节选00--内存管理的基本要求
  7. 信息学奥赛一本通 1007:计算(a+b)×c的值 | OpenJudge NOI 1.3 02
  8. 如何测试软件的性能瓶颈,性能测试如何定位瓶颈
  9. apache指定的网络名不再可用错误解决方法
  10. windows 10
  11. 使用Git将项目上传到GitHub(Windows+Linux双教程)
  12. jsp el表达式无法正常显示解决方法
  13. IM即时通讯实现的原理
  14. 计算机图形图像设计构图的基本形式,构图一学就会!构图基本形式只有四种
  15. 电子工程师是怎样的成长之路?
  16. 上海成为50岁以上房东数量最多的中国城市,成都、青岛、重庆、杭州紧随其后...
  17. 异常:org.hibernate.cache.NoCachingEnabledException: Second-level cache is not enabled for usage [hiber
  18. 硬件工程师(电源设计)
  19. find7 android 5,5.5英寸四核芯 OPPO Find 7轻装版评测
  20. 富士胶片消毒喷雾及湿巾证实可抑新冠感染;巴厘岛实施旅行健康安全新准则 | 美通企业日报...

热门文章

  1. Mysql 755和750权限,chmod 755 究竟是什么鬼?
  2. php四排序-选择排序
  3. Vue.js用法详解(一)更新中~
  4. (转) eclipse项目中.classpath文件详解
  5. 聊聊在博客园写博客的这两年《Unity 3D脚本编程:使用C#语言开发跨平台游戏》正式出版...
  6. 分享Css3设计---纯Css实现超酷的iphone玻璃气泡效果
  7. Centos5.5完整安装Cacti+Spine
  8. 极客新闻——05、如何在工作中学习和成长?
  9. 聊聊底线 | 坏数据与假数据
  10. DDD 领域驱动设计:贫血模型、充血模型的深入解读!