Elasticsearch是什么?

Elasticseach在Elastic Stack中是一个分布式的搜索、分析引擎。Logstash和Beats收集、聚合和存储你的数据,使你的数据更有价值。Kibana提供交互式的界面供你浏览、可视化和共享对数据的见解,并管理和监控堆栈。Elasticsearch提供索引、搜索和分析功能。

Elasticsearch对于所有的数据类型提供了近乎实时的搜索和分析。无论你的数据是有有固定的结构的文本或是混乱的文本、数值类型的数据、地理类型的数据,Elasticsearch都可以有效的存储,并且用一种支持快速检索的方式来索引这些数据。你不仅可以简单地检索这些数据,还可以通过聚合数据的方式发现趋势和模型。随着数据和检索频率的增长,Elasticsearch的分布式特性可以使部署的服务随着一起增长。

不是所有的问题都是搜索问题,Elasticsearch提供了在各种用例中处理数据的速度和灵活性:

  • 搜索框
  • 存储的分析日志、指标、安全事件
  • 使用机器学习来自动模拟实时数据的行为
  • 自动化商业流使用Elasticsearch作为存储引擎
  • 在GIS(geographic information system)中使用Elasticsearch来管理、聚合、分析空间信息
  • 作为生物信息学的研究工具来存储和加工遗传基因数据

人们使用的各种各样新奇的搜索方式时常让我们觉得惊讶。但是无论你的场景是上面哪种,或者你用Elasticsearch来解决一个新的问题,你处理数据、文档和索引在的方式Elasticsearch中都是一样的。

文档和索引

Elasticseach是一个分布式的文档存储数据库,现对于传统的关系型数据库,Elasticseach可以存储被json序列化的复杂的数据结构。如果你的Elasticsearch集群中有多个节点,那么文档会被存储在整个集群中,并且从任何一个节点访问。

当一个文档被存储后,会被索引并且几乎实时(一秒内)就可以被检索到。Elasticseach用一种叫做倒排索引的数据结构来支持快速文本检索。一个倒排索引包含的是出现在所有文档中出现并且不重复的单词和那些文档中出现了这些单词。

一个索引可以看做是一系列文档充分压缩的集合,每个文档可以看做是一系列字段的集合,也就是数据的key-value键值对。默认情况下,Elasticsearch会为文档的每个字段建立索引,每个索引字段都有一个专门的、特别优化的数据结构。例如,text类型字段用倒排索引存储,数值和geo字段类型用BKD trees存储。这种按每个字段的类型来使用不同的结构索引使得Elasticsearch搜索如此之快。

Elasticsearch也支持(schema-less)无模式的能力,也就是说不需要显示的为文档的每个字段指定数据类型。如果开启了动态mapping,Elasticsearch会自动检测,索引新增的字段。这种默认的行为使的存储和检索数据更加简单-只需要保存文档,Elasticsearch会将文档value类型为boolean、float、integer、date、string的字段类型映射为Elasticsearch中接近的类型。

最后,如果你比较了解你的文档数据,您可以定义规则来控制动态mapping,并显式定义mapping来控制字段的存储和索引方式。

显示的定义mapping可以:

  • 区分value为字符串的字段是text(支持分词搜索)还是keyword类型
  • 指定词法解析器
  • 优化部分匹配的字段
  • 自定义日期格式
  • geo_point和geo_shape类型Elasticsearch无法自动映射

一般来说字段的用处不同,那么字段的设置也不同。例如,一个字符串类型的字段,你可能想用作全文搜索,同时也作为一个keyword类型来排序。又或者,选择多个词法解析器来处理用户输入文本的字段。

分析链将在索引文档的时候作用于text字段,同时在搜索的时候也会别用到。当你进行全文搜索时,分析链会先对查询文本进行解析,然后再去搜索。

检索和分析

虽然你可以使用Elasticsearch来存储文档和检索文档和它们的元数据,Elasticsearch真正的强大之处在于,它能够轻松访问构建在Apache Lucene搜索引擎库上的完整搜索功能套件。

Elasticsearch提供了简单、明确的REST API来管理集群和索引文档和检索数据。用于测试的目的,你可以直接通过命令行的方式或者在Kibana的开发者控制台(Developer Console)中发送命令。Elasticsearch也提供了Java, JavaScript, Go, .NET, PHP, Perl, Python or Ruby客户端供你使用。

检索数据

Elasticsearch REST APIs支持结构化查询,全文检索和两个联合起来的复杂查询。结构化查询类似于构建sql查询那样。例如,你可以搜索gender和age字段在employee索引中并且通过hire_date进行排序。全文搜索会查找所有跟查询的字符串相匹配的文档,并且根据相关性(跟搜索的字符串的匹配程度)排序。

除了搜索单个关键字,你还可以短语搜索、 相似度搜索、前缀搜索,和获得自动化建议。

想搜索地理或者数值型数据?Elasticsearch使用优化的数据结构来索引这些非文本数据,使得Elasticsearch搜索效率变得高效。

所有Elasticsearch支持的查询方式,你都可以使用Elasticsearch的Json风格的查询语言来进行查询。你也可以在Elasticsearch中使用Sql风格的查询方式来搜索和聚合数据,JDBC和ODBC驱动允许应用程序通过sql与Elasticsearch交互。

分析数据

Elasticsearch的聚合功能使得你能构建复杂的统计,并深入了解关键指标、形态和趋势。而不仅仅只是找到海量数据里面的一条。聚合能解决类似下面的问题:

  • 有多少条数据?
  • 数据的平均大小是多少?
  • 数据中位数是多少,按制造商进行分类?
  • 最近六个月新增了多少条数据?

聚合也可以解决更加细微的问题,比如:

  • 最热门的数据是哪些?
  • 有不正常或者不规则的数据块?

Elasticsearch的聚合使用的是相同的数据结构来搜索,所以也是非常高效的。你可以实时的分析和可视化你的数据。当你的数据发生变化时,你的报表和仪表盘可以基于最新的数据做出响应。

此外,聚合操作可以和搜索一起使用。你可以在单个请求里面针对同一个数据并且同时进行搜索文档,过滤结果,和执行分析。而且由于聚合是在特定搜索的上下文中计算的,因此您不仅要显示所有尺寸为70的针的数量,还要显示符合用户搜索条件的70号针的数量——例如,所有尺寸为70号的不粘绣花针。

等等,还有彩蛋

想要自动分析你的时间序列化数据?你可以使用机器学习特性来创建你的数据正常行为的基准钱来识别出异常模式。通过机器学习,你可以:

  • 与数值、计数或频率的时间偏差有关的异常
  • 统计稀有度
  • 数据中某一条异常的数据

最棒的是,实现这些完全不需要指定的算法、模型或者其它数据科学相关的配置。

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

Elasticsearch被设计为高可用,并且可以根据你的需求进行扩展。通过自然分布来实现这一点。你可以增加节点Elasticsearch会自动把你的数据和查询请求负载到所有可用的节点上。不需要修改你的应用程序,Elasticsearch知道如何平衡多节点集群来提供伸缩性和高可用。

这是怎么实现的?在底层,一个Elasticsearch索引是一个或多个物理分片的逻辑分组,每个分片是一个自我包含的索引。将文档分布在多个分片的相同索引上,又把分片分布在多个节点上,Elasticsearch可以冗余数据,这样可以避免硬件故障,当节点的加入集群时,查询能力也能随着增加。随着集群的增长或者减少,Elasticsearch可以自动迁移分片使集群重新平衡。

Elastcisearch有两种类型的分片:主分片和复制分片。索引中的每一个文档都属于一个分片。复制分片是主分片的备份。复制分片冗余数据来避免硬件故障同时也增加了服务的查询能力,比如搜索或者检索一个文档。

索引的主分片数量只能索引创建时指定。但是复制分片的数量可以在任何时候修改,并且不会影响索引和查询操作。

这取决于…

对一个索引设置分片数量和分片容量大小,有很多性能和权衡的需要考虑。分片数越多,维护这些索引的开销也就越大。分片的容量越大,当Elasticsearch平衡集群移动分片时所花费的时间也越多。

对大量的小容量分片进行查询,每个分片的查询速度是很快的,但是查询请求越多,开销也就越大。这就意味着对小数量、大容量的分片进行查询,速度可能会快一点。简而言之…视情况而定。

一开始的注意点:
平均每个分片的容量保持在几GB到几十GB之间。对于时间序列化的数据,一般建议在20GB到40GB之间。
避免大量分分片问题,一个节点所能支持的分片数量是跟可用对空间成正比的。一般而言,每GB可用堆空间的分片数量应小于20.

为你的应用场景选择最佳的配置的最好方式是测试你的数据和查询请求。

容灾

出于性能的考虑,集群中的节点需要处于同一网络。在一个横跨不同数据中心的集群中平衡分片花费时间太长了。但是高可用的设计架构强烈要求避免“把鸡蛋都放在一个篮子里”。如果一个区域停电,那么其它区域的服务需要无缝的接管。解决方案?跨集群复制-Cross-cluster replication (CCR).

CCR提供了一种方法,可以自动把你的主集群中索引同步到远程副本集群。如果主集群挂了,备用集群可以接管。你也可以使用CCR来创建副本集群以服务那些在地理位置接近的用户请求。

跨集群复制-Cross-cluster replication是主动的也是被动的。主集群上的索引是leader(领导)索引,处理所有写请求。副本上的索引是只读的followers(追随者)。

监控和管理

与其它企业系统一样,你都需要工具来保护、管理和监控你的Elasticsearch集群。安全、可监控、管理的特性也集成到了Elasticsearch,你可以使用Kibana作为管理集群的控制中心。像数据归档和索引生命周期这些特性能帮你随时智能化的管理你的数据。

7.14新特性

这是7.14中新的亮点和改进。
更加详细的信息,请阅读发布日志和迁移指南

跨集群EQL搜索
在7.14,我们为EQL增加了跨集群搜索。跨集群搜索能让你使用EQL来搜索跨越多个集群。

异步SQL搜索
我们为Elasticsearch SQL增加了异步搜索的功能,跨大型数据集或冷数据的搜索可能需要更长的时间才能返回同步结果。异步sql搜索能让你的查询在后台运行。

Transforms:support for top metrics
Transforms现在支持top metrics aggregation(聚合),提升了通过多个字段分组的性能。如果这些字段是描述性的并且有相同的基数,使用top metrics能显著减少聚合的工作。It is also a usability improvement if configuring top or last value, which previously would have required a scripted metric.

异常检测:reset job API
reset job API使得从一开始检测异常变得更容易,让一个人立刻恢复到创建后的状态,等价于删除再创建,但是不需要记住配置。它也简单支持,用户可以点击来重置他们的任务。

新字段类型:match_only_text
match_only_text是text充分压缩空间的变种,不支持匹配度,并且如果需要位置的查询会变得更慢。一般适用于记录日志信息。

More memory-efficient composite aggreations
在keyword字段上组合聚合不再使用global ordinals,这种用在高基数的字段上会用掉大量的堆内存缓存字段数据。

New migrate to data tiers routing API
7.14新增了migrate to data tiers routing API,你可以使用这个API把索引和使用基于属性分配过滤器的ILM策略切换到使用节点角色的数据层。这样ILM在处于过渡期层之间自动移动数据流索引。数据层也给了你访问ILM特性的权限,例如such as partially mounted indices and the frozen tier.

New terms enum API
新的terms enum API能让你发现terms匹配部分字符串的索引。你可以用这API来搜索自动完成。

Automatic datebase updates for the GeoIp processor
GeoIP处理器使用Maxmind GeoLite2数据库来提供IP地址的地理位置。当IP地址被重复使用时,其地理位置也会经常变化。在7.14中,我们引入了一个服务来自动更新这些数据库,这样他们的信息会尽可能地准确。这个服务默认开启,但是它的行为可以调整。

快速开始

这个文档可以帮助新手学习:

  • 在测试环境中安装并运行Elasticsearch
  • 向Elasticsearch中增加数据
  • 搜索和排序数据
  • 在搜索中提取凌乱文档的字段

第一步:运行Elasticsearch
快速搭建Elasticsearch方式是在Elastic Cloud上创建一个可管理的Elasticsearch服务(要钱!)。如果你偏爱管理自己的测试环境,可以用Docker运行Elasticsearch。
安装和运行Elasticsearch
1.安装和运行Docker Desktop
2.运行命令:

  1. docker network create elastic
  2. docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.0
  3. docker run --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.14.0

安装和运行Kibana
安装Kibana进行界面交互来分析、可视化、管理你的数据。
1.在新的命令控制台,运行:

  1. docker pull docker.elastic.co/kibana/kibana:7.14.0
  2. docker run --name kib01-test --net elastic -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://es01-test:9200" docker.elastic.co/kibana/kibana:7.14.0

2.访问Kibana,http://localhost:5601
第二步:向Elasticsearch发送请求
使用REST API来向Elasticsearch发送数据和请求。你可以使用发送HTTP请求来与Elasticsearch交互,列如curl。你也可以使用Kibana的控制台向Elasticsearch发送请求。
使用curl
在新的控制台运行下面的curl命令来提交一个简单的API请求。

  1. curl -X GET http://localhost:9200/

使用Kibana
1.打开Kibana,找到菜单Dev Tools > Console
image.png
2.在控制台中运行下面的API请求
GET /
第三步:添加数据
按照JSON格式向Elasticsearch添加的数据叫做文档,Elasticsearch把这些文档存储在可被搜索的索引中。

对于时间序列化数据,通常将文档添加到由多个自动生成的backing indices(索引)组成的数据流中。

数据流需要一个匹配它名字的索引模板。Elasticsearch用这个模板来配置流式的backing indices。发送到数据流中的文档必须有一个@timestamp字段。

添加单个文档
提交下面的索引请求来添加单个的日志到logs-my_app-default数据流中。因为logs-my_app-default不存在,这个请求会使用logs--索引模板自动创建它。

  1. POST logs-my_app-default/_doc
  2. {
  3. "@timestamp": "2099-05-06T16:21:15.000Z",
  4. "event": {
  5. "original": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
  6. }
  7. }

对应的返回数据会包含Elasticsearch为这个文档生成的元数据信息。

  • 返回的_index包含了该文档,Elasticsearch自动生成了索引的名字。
  • 该索引下唯一的id
    1. {
    2. "_index": ".ds-logs-my_app-default-2099-05-06-000001",
    3. "_type": "_doc",
    4. "_id": "gl5MJXMBMk1dGnErnBW8",
    5. "_version": 1,
    6. "result": "created",
    7. "_shards": {
    8. "total": 2,
    9. "successful": 1,
    10. "failed": 0
    11. },
    12. "_seq_no": 0,
    13. "_primary_term": 1
    14. }
    添加多个文档
    在一个请求中使用_bulk端点来添加多个文档。海量数据必须用换行来分割每一个JSON。每一行必须以换行符(\n)结束,包括最后一行也是。
  1. PUT logs-my_app-default/_bulk
  2. { "create": { } }
  3. { "@timestamp": "2099-05-07T16:24:32.000Z", "event": { "original": "192.0.2.242 - - [07/May/2020:16:24:32 -0500] \"GET /images/hm_nbg.jpg HTTP/1.0\" 304 0" } }
  4. { "create": { } }
  5. { "@timestamp": "2099-05-08T16:25:42.000Z", "event": { "original": "192.0.2.255 - - [08/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" } }

第四步:搜索数据
文档被索引后几乎立刻就可以被搜索到。下面的搜索请求搜索在logs-my_app-default中所有匹配的数据,并且以@timestamp倒叙排序。

  1. GET logs-my_app-default/_search
  2. {
  3. "query": {
  4. "match_all": { }
  5. },
  6. "sort": [
  7. {
  8. "@timestamp": "desc"
  9. }
  10. ]
  11. }

一般情况下,返回的hits节点会包含10个匹配的数据。hit中的每个_source包含了提交时原始的json数据。

  1. {
  2. "took": 2,
  3. "timed_out": false,
  4. "_shards": {
  5. "total": 1,
  6. "successful": 1,
  7. "skipped": 0,
  8. "failed": 0
  9. },
  10. "hits": {
  11. "total": {
  12. "value": 3,
  13. "relation": "eq"
  14. },
  15. "max_score": null,
  16. "hits": [
  17. {
  18. "_index": ".ds-logs-my_app-default-2099-05-06-000001",
  19. "_type": "_doc",
  20. "_id": "PdjWongB9KPnaVm2IyaL",
  21. "_score": null,
  22. "_source": {
  23. "@timestamp": "2099-05-08T16:25:42.000Z",
  24. "event": {
  25. "original": "192.0.2.255 - - [08/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638"
  26. }
  27. },
  28. "sort": [
  29. 4081940742000
  30. ]
  31. },
  32. ...
  33. ]
  34. }
  35. }

获取指定的字段
解析大型文档的整个_source是非常笨重的。如果要从返回的响应中排除这种它,把_source参数设置为false。使用fields参数来检索你想要的字段。

  1. GET logs-my_app-default/_search
  2. {
  3. "query": {
  4. "match_all": { }
  5. },
  6. "fields": [
  7. "@timestamp"
  8. ],
  9. "_source": false,
  10. "sort": [
  11. {
  12. "@timestamp": "desc"
  13. }
  14. ]
  15. }

返回的响应中,每个hit字段的field是一个简单数组。

  1. {
  2. ...
  3. "hits": {
  4. ...
  5. "hits": [
  6. {
  7. "_index": ".ds-logs-my_app-default-2099-05-06-000001",
  8. "_type": "_doc",
  9. "_id": "PdjWongB9KPnaVm2IyaL",
  10. "_score": null,
  11. "fields": {
  12. "@timestamp": [
  13. "2099-05-08T16:25:42.000Z"
  14. ]
  15. },
  16. "sort": [
  17. 4081940742000
  18. ]
  19. },
  20. ...
  21. ]
  22. }
  23. }

搜索时间范围内数据
搜索时间段或者IP段的数据,使用range查询。

  1. GET logs-my_app-default/_search
  2. {
  3. "query": {
  4. "range": {
  5. "@timestamp": {
  6. "gte": "2099-05-05",
  7. "lt": "2099-05-08"
  8. }
  9. }
  10. },
  11. "fields": [
  12. "@timestamp"
  13. ],
  14. "_source": false,
  15. "sort": [
  16. {
  17. "@timestamp": "desc"
  18. }
  19. ]
  20. }

您可以使用日期数学来定义相对时间范围,下面的请求目的是搜索前一天的数据,因此在logs-my_app-default中没有数据匹配。

  1. GET logs-my_app-default/_search
  2. {
  3. "query": {
  4. "range": {
  5. "@timestamp": {
  6. "gte": "now-1d/d",
  7. "lt": "now/d"
  8. }
  9. }
  10. },
  11. "fields": [
  12. "@timestamp"
  13. ],
  14. "_source": false,
  15. "sort": [
  16. {
  17. "@timestamp": "desc"
  18. }
  19. ]
  20. }

从非结构化的数据中提取字段
你可以在搜索中从非结构化的数据中提取runtime字段,例如日志消息。

下面的搜索从从event.original提取了source.ip字段。在fields参数中添加source.ip,使得返回的响应中包含这些字段。

  1. GET logs-my_app-default/_search
  2. {
  3. "runtime_mappings": {
  4. "source.ip": {
  5. "type": "ip",
  6. "script": """
  7. String sourceip=grok('%{IPORHOST:sourceip} .*').extract(doc[ "event.original" ].value)?.sourceip;
  8. if (sourceip != null) emit(sourceip);
  9. """
  10. }
  11. },
  12. "query": {
  13. "range": {
  14. "@timestamp": {
  15. "gte": "2099-05-05",
  16. "lt": "2099-05-08"
  17. }
  18. }
  19. },
  20. "fields": [
  21. "@timestamp",
  22. "source.ip"
  23. ],
  24. "_source": false,
  25. "sort": [
  26. {
  27. "@timestamp": "desc"
  28. }
  29. ]
  30. }

联合搜索
你可以使用bool查询来组合多个查询。下面的搜索示例组合了两个范围查询:一个使用@timestamp,另一个使用source.ip字段。

  1. GET logs-my_app-default/_search
  2. {
  3. "runtime_mappings": {
  4. "source.ip": {
  5. "type": "ip",
  6. "script": """
  7. String sourceip=grok('%{IPORHOST:sourceip} .*').extract(doc[ "event.original" ].value)?.sourceip;
  8. if (sourceip != null) emit(sourceip);
  9. """
  10. }
  11. },
  12. "query": {
  13. "bool": {
  14. "filter": [
  15. {
  16. "range": {
  17. "@timestamp": {
  18. "gte": "2099-05-05",
  19. "lt": "2099-05-08"
  20. }
  21. }
  22. },
  23. {
  24. "range": {
  25. "source.ip": {
  26. "gte": "192.0.2.0",
  27. "lte": "192.0.2.240"
  28. }
  29. }
  30. }
  31. ]
  32. }
  33. },
  34. "fields": [
  35. "@timestamp",
  36. "source.ip"
  37. ],
  38. "_source": false,
  39. "sort": [
  40. {
  41. "@timestamp": "desc"
  42. }
  43. ]
  44. }

聚合数据
使用聚合来总结数据,例如指标,统计,分析。

下面的搜索使用聚合和http.response.body.bytes运行时字段来计算average_response_size。这个请求只会统计匹配的文档。

  1. GET logs-my_app-default/_search
  2. {
  3. "runtime_mappings": {
  4. "http.response.body.bytes": {
  5. "type": "long",
  6. "script": """
  7. String bytes=grok('%{COMMONAPACHELOG}').extract(doc[ "event.original" ].value)?.bytes;
  8. if (bytes != null) emit(Integer.parseInt(bytes));
  9. """
  10. }
  11. },
  12. "aggs": {
  13. "average_response_size":{
  14. "avg": {
  15. "field": "http.response.body.bytes"
  16. }
  17. }
  18. },
  19. "query": {
  20. "bool": {
  21. "filter": [
  22. {
  23. "range": {
  24. "@timestamp": {
  25. "gte": "2099-05-05",
  26. "lt": "2099-05-08"
  27. }
  28. }
  29. }
  30. ]
  31. }
  32. },
  33. "fields": [
  34. "@timestamp",
  35. "http.response.body.bytes"
  36. ],
  37. "_source": false,
  38. "sort": [
  39. {
  40. "@timestamp": "desc"
  41. }
  42. ]
  43. }

返回的aggregations对象包括了聚合的结果。

探索更多的选项
To keep exploring, index more data to your data stream and check out Common search options.

第五步:清除
当你结束后,删除你的测试数据流和索引。
DELETE _data_stream/logs-my_app-default

你也可以删除你的测试部署。
停止你的Elasticsearch和Kibana Docker容器,运行:
docker stop es01-test
docker stop kib01-test

移除容器和网络,运行:
docker network rm elastic
docker rm es01-test
docker rm kib01-test

下一步?

  • 通过设置数据层和ILM,最大限度地利用时间序列数据。有关时间序列数据,请参见使用Elasticsearch
  • 使用Fleet和Elastic Agent来直接从你的数据源中收集日志和metrics并发送到Elasticsearch。详情见Fleet quick start guide。
  • 使用Kibana来探索、可视化、和管理你的Elasticsearch数据。详情见Kibana quick start guide。

搭建Elasticsearch

这个章节包括了如何搭建Elasticsearch然后运行,包括:

  • 下载
  • 安装
  • 运行
  • 配置

支持的平台
官方支持的操作系统和JVM列表:Support Matrix
Elasticsearch已经在列出的平台经过测试,但是也不排除在其它平台也能工作。

Java(JVM)版本

ElasticSearch使用Java构建,并在每个发行版中包含来自JDK维护者(GPLv2+CE)的OpenJDK绑定版本。推荐使用在Elasticsearch的jdk目录中自带的JVM。
如果要使用自己的Java版本,这是ES_JAVA_HOME到你的环境变量中。如果你一定要使用跟自带的JVM版本不一致的JAVA,我们建议你使用JAVA的长期支持版本。如果使用了已知的有问题的JAVA版本,Elasticsearch会拒绝启动。如果你使用了自己的JVM,那么自带的JVM可以移除。

安装Elasticsearch

你可以在自己的硬件上运行Elasticsearch,或者在我们的Elastic Cloud上使用我们Elasticsearch 服务。在AWS和GCP上,也是可用的。来免费试用吧

配置管理工具
我们也提供了配置管理工具来辅助大规模部署
Puppet puppet-elasticsearch
Chef cookbook-elasticsearch
Ansible ansible-elasticsearch

在Linux或者MacOS上使用archive安装Elasticsearch

Elasticsearch is as a .tar.gz archive for Linux and MacOS.
这个包包含了免费的收费的特性。获取免费试用三十天特性

Elasticsearch下载页获取Elasticsearch最新稳定的版本。其它的版本可在Past Releases page找到。

注意:Elasticsearch内嵌了一个OpenJDK,要使用自己的Java版本,请阅读JVM版本要求

在Linux上下载和安装Elasticsearch
用如下的方式下载Elasticsearch v7.14.0

  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz
  2. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz.sha512
  3. shasum -a 512 -c elasticsearch-7.14.0-linux-x86_64.tar.gz.sha512
  4. tar -xzf elasticsearch-7.14.0-linux-x86_64.tar.gz
  5. cd elasticsearch-7.14.0/
①:比较下载文件的SHA和已发布的校验,正常情况会输出 elasticsearch-{version}-linux-x86_64.tar.gz: OK.
②:这个目录叫做$ES_HOME

在MacOS上下载和安装Elasticsearch
用如下的方式下载Elasticsearch v7.14.0

  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz
  2. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz.sha512
  3. shasum -a 512 -c elasticsearch-7.14.0-linux-x86_64.tar.gz.sha512
  4. tar -xzf elasticsearch-7.14.0-linux-x86_64.tar.gz
  5. cd elasticsearch-7.14.0/ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-darwin-x86_64.tar.gz
  6. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-darwin-x86_64.tar.gz.sha512
  7. shasum -a 512 -c elasticsearch-7.14.0-darwin-x86_64.tar.gz.sha512
  8. tar -xzf elasticsearch-7.14.0-darwin-x86_64.tar.gz
  9. cd elasticsearch-7.14.0/

**

①:比较下载文件的SHA和已发布的校验,正常情况会输出 elasticsearch-{version}-linux-x86_64.tar.gz: OK.
②:这个目录叫做$ES_HOME


启用自动创建系统索引
一些商业特性会自动在Elasticsearch中创建索引。默认情况下,Elasticsearch已经设置了允许自动创建索引,不需要其它的步骤。然而,如果你已经在Elasticsearch中禁用自了动创建索引,你必须在elasticsearch.yml配置action.auto_create_index来开启自动创建索引。
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

重要:如果你使用Logstash或者Beats,你很可能会需要额外的索引名称在action.auto_create_index中,实际的值可能取决于你的本地配置。如果你不确定你的环境,你可以考虑设置为*来允许自动创建所有的索引。

通过命令行运行Elasticsearch
通过下面的命令来启动Elasticsearch
./bin/elasticsearch

如果你的Elasticsearch有密码保护。你会收到输入密码的提示。详情请阅读安全配置

默认情况下,Elasticsearch会在后台运行,打印日志在标准输出,通过Ctrl-C停止。

注意:Elasticsearch所有的脚本都需要在/bin/bash下面并且支持数组和assume版本的Bash。同样的,Bash应该直接或通过符号链接在此路径上可用。

检查Elasticarch是否在运行
你可以通过向9200端口发送Http命令来检查Elasticsearch节点是否在运行。

  1. curl -X GET "localhost:9200/?pretty"

返回的数据应该类似下面:

  1. {
  2. "name" : "Cp8oag6",
  3. "cluster_name" : "elasticsearch",
  4. "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
  5. "version" : {
  6. "number" : "7.14.0",
  7. "build_flavor" : "default",
  8. "build_type" : "tar",
  9. "build_hash" : "f27399d",
  10. "build_date" : "2016-03-30T09:51:41.449Z",
  11. "build_snapshot" : false,
  12. "lucene_version" : "8.9.0",
  13. "minimum_wire_compatibility_version" : "1.2.3",
  14. "minimum_index_compatibility_version" : "1.2.3"
  15. },
  16. "tagline" : "You Know, for Search"
  17. }

在命令中使用-q 或者 —quiet选项可以停用向标准输出的日志打印。

以守护进程运行Elasticarch
在命令中指定-d参数来把Elasticsearch作为守护进程运行,用-p参数来记录进程id到文件中。
./bin/elasticsearch -d -p pid

如果你的Elasticsearch有密码保护。你会收到输入密码的提示。详情请阅读安全配置

日志消息会存储在$ES_HOME/logs/ 目录下

要想停止Elasticsearch,根据文件记录的pid来杀死进程。
pkill -F pid

注意:Elasticsearch .tar.gz包并没有包含systemd模块。如果想要将Elasticsearch作为服务来管理,可以使用Debian或者RPM来代替。

用命令行配置Elasticarch
Elasticsearch默认会加载$ESHOME/config/elasticsearch.yml配置文件。配置文件的详细说明在Configuring Elasticsearch。_

所有的配置项可以在配置文件中配置,也可以通过命令行的方式来进行配置,使用-E语法来配置。
./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1

提示:一般情况下,任何集群内的配置(例如cluster.name)都该添加到elasticsearch.yml配置文件中,而任何特定节点的配置例如node.name可以通过命令行配置。

Archives的目录结构
发行的Archive是整个的自我包含的。默认情况下所有的文件和目录都在解压目录下的$ES_HOME中。

这样非常方便,你不需要为了运行Elasticsearch而创建任何目录,卸载也是非常方便,直接删除$ES_HOME文件夹即可。建议将配置目录、数据目录、日志目录指定到其它目录,这边可以避免后面删除重要的数据。

在window上使用zip安装Elasticsearch

使用Debian Package安装Elasticsearch

使用RPM安装Elasticsearch

在Windows上使用MSI安装Elasticsearch

使用Docker安装Elasticsearch

在Macos上使用Homebrew安装Elasticsearch