数字旗手

电气化、自动化、数字化、智能化、智慧化

0%

ElasticSearch简明教程

(以下内容都来自ChatGPT)

基本教程

以下是Elasticsearch的入门教程:

  1. 安装和启动:首先需要下载Elasticsearch,并安装和启动它。安装完成后,可以通过访问http://localhost:9200/来检查Elasticsearch是否启动成功。
  2. 索引和文档:在Elasticsearch中,数据存储在索引中,每个索引可以包含多个文档。要创建索引,可以使用PUT命令,例如:
    1
    PUT /my_index
    要添加文档,可以使用POST命令,例如:
    1
    2
    3
    4
    5
    POST /my_index/_doc
    {
    "title": "My Document",
    "content": "This is my first document in Elasticsearch"
    }
  3. 搜索:要搜索文档,可以使用GET命令,并指定查询参数。例如,要搜索所有文档,可以使用以下命令:
    1
    GET /my_index/_search
    要搜索特定的文档,可以使用查询参数,例如:
    1
    GET /my_index/_search?q=title:My Document
  4. 聚合:Elasticsearch支持各种聚合操作,如计数、求和、平均值、最大值、最小值等。要进行聚合操作,可以使用以下命令:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    GET /my_index/_search
    {
    "aggs": {
    "total_count": {
    "value_count": {
    "field": "title"
    }
    }
    }
    }
    这将返回文档标题的总数。
  5. 过滤:Elasticsearch支持各种过滤操作,如范围查询、前缀查询、后缀查询、正则表达式查询等。要进行过滤操作,可以使用以下命令:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    GET /my_index/_search
    {
    "query": {
    "bool": {
    "must": [
    {
    "match": {
    "title": "document"
    }
    }
    ],
    "filter": [
    {
    "range": {
    "date": {
    "gte": "2021-01-01"
    }
    }
    }
    ]
    }
    }
    }

这将返回标题包含“document”并且日期在2021年1月1日之后的所有文档。
以上是Elasticsearch的基本入门教程,可以根据实际需求进行深入学习和使用。

基本数据结构

Elasticsearch的基本数据结构主要包括索引、文档和字段。

  1. 索引:Elasticsearch中的数据存储在索引中,索引是一个逻辑命名空间,它包含了一组具有相似特征的文档。每个索引都有一个唯一的名称,可以包含多个文档。
  2. 文档:Elasticsearch中的文档是最小的数据单位,它是一个JSON格式的数据对象,可以包含任意数量的字段。文档可以被索引和搜索,每个文档都有一个唯一的ID和一个类型。
  3. 字段:Elasticsearch中的字段是文档中的属性,它们包含了文档的具体信息。每个字段都有一个名称和一个数据类型,可以是字符串、数字、日期、布尔值等。字段可以被分析和索引,以便于搜索。

除了以上基本数据结构外,Elasticsearch还支持以下一些高级数据结构:

  1. 映射:映射定义了文档的结构和字段类型,它指定了每个字段的数据类型、分析器、索引选项等。映射可以在索引创建时指定,也可以在索引创建后进行修改。
  2. 分片和副本:Elasticsearch中的索引可以被分成多个分片,每个分片都是一个独立的Lucene索引。分片可以被分布在不同的节点上,以提高查询性能和可用性。每个分片都可以有多个副本,副本可以提供高可用性和负载均衡。
  3. 聚合:聚合是Elasticsearch中的一种高级查询操作,它可以对文档进行聚合计算,如求和、平均值、最大值、最小值等。聚合可以用于数据分析和数据挖掘。
  4. 过滤器:过滤器是一种高效的查询方式,它可以用于过滤文档,以便于执行更快的查询。过滤器可以用于范围查询、前缀查询、后缀查询、正则表达式查询等。

举例

Elasticsearch的基本数据结构包括索引、文档和字段,以下是每个数据结构的示例:

  1. 索引:
    索引是Elasticsearch中的数据存储单元,它有一个唯一的名称,可以包含多个文档。例如,创建一个名为“my_index”的索引:
    1
    PUT /my_index
  2. 文档:
    文档是Elasticsearch中的最小数据单元,它是一个JSON格式的数据对象,可以包含多个字段。例如,创建一个包含标题和内容的文档:
    1
    2
    3
    4
    5
    POST /my_index/_doc
    {
    "title": "My Document",
    "content": "This is my first document in Elasticsearch"
    }
  3. 字段:
    字段是文档中的属性,它们包含了文档的具体信息。每个字段都有一个名称和一个数据类型。例如,为文档添加一个日期字段:
    1
    2
    3
    4
    5
    6
    POST /my_index/_doc
    {
    "title": "My Document",
    "content": "This is my first document in Elasticsearch",
    "date": "2021-01-01"
    }
    以上是Elasticsearch的基本数据结构,以下是一些示例:
  4. 创建一个名为“products”的索引,它包含产品信息:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PUT /products
    {
    "mappings": {
    "properties": {
    "name": {
    "type": "text"
    },
    "price": {
    "type": "float"
    },
    "description": {
    "type": "text"
    }
    }
    }
    }
  5. 添加一个名为“iPhone”的产品文档:
    1
    2
    3
    4
    5
    6
    POST /products/_doc
    {
    "name": "iPhone",
    "price": 999.99,
    "description": "The latest iPhone with advanced features"
    }
  6. 搜索所有价格在1000以下的产品:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    GET /products/_search
    {
    "query": {
    "range": {
    "price": {
    "lte": 1000
    }
    }
    }
    }
    以上是Elasticsearch的基本数据结构及相关示例,可以根据实际需求进行学习和应用。

索引

创建索引

要创建一个索引,需要遵循以下步骤:

  1. 打开Elasticsearch的控制台或使用API工具(如Postman)。
  2. 使用PUT方法创建一个新的索引。例如,要创建一个名为“my_index”的索引,请执行以下请求:
    1
    PUT /my_index
  3. 如果需要设置索引的属性,可以在请求中添加参数。例如,要设置索引的副本数为2,请执行以下请求:
    1
    2
    3
    4
    5
    6
    PUT /my_index
    {
    "settings": {
    "number_of_replicas": 2
    }
    }
  4. 如果需要添加映射到索引,请执行以下请求:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PUT /my_index/_mapping
    {
    "properties": {
    "name": {
    "type": "text"
    },
    "age": {
    "type": "integer"
    }
    }
    }
    这将为“my_index”索引添加一个映射,其中包含“name”和“age”字段。您可以根据需要添加其他字段。
  5. 索引创建完成后,可以使用GET方法检查索引是否存在:
    1
    GET /my_index
    如果索引存在,则会返回有关索引的信息。如果不存在,则会返回404错误。

索引的属性

Elasticsearch索引的属性可以在创建索引时进行设置,主要包括以下几个方面:

  1. Settings:索引的设置,包括副本数、分片数、索引分析器等。
  2. Mappings:索引的映射,定义了文档的结构和字段类型,包括字段名、数据类型、分析器等。
  3. Aliases:索引的别名,可以将多个索引的别名绑定在一起,方便查询。
  4. Routing:路由策略,可以将文档路由到指定的分片上,提高查询性能。
  5. Analysis:分析器,用于将文本进行分词和处理,提高搜索的准确性和效率。
  6. Refresh Interval:刷新间隔,控制索引在何时进行数据刷新,以保证查询的准确性。
  7. Merge Policy:合并策略,控制索引在何时进行分片合并,以提高查询性能。
  8. Translog Durability:事务日志的持久性,控制事务日志的持久性级别,以保证数据的完整性和可靠性。
    以上属性都是可选的,可以根据实际需求进行设置。其中,Settings和Mappings是最基本的属性,其他属性可以根据实际需求进行设置。

文档

Elasticsearch的文档是最小的数据单元,它是一个JSON格式的数据对象,可以包含任意数量的字段。每个文档都有一个唯一的ID和一个类型,它们通常被存储在一个索引中。
文档的结构由映射(Mapping)定义,映射指定了每个字段的数据类型、分析器、索引选项等。例如,一个名为“product”的文档可能包含以下字段:

1
2
3
4
5
6
7
{
"id": 1,
"name": "Product A",
"description": "This is a product A",
"price": 100.00,
"category": "Electronics"
}

在这个文档中,有五个字段:id、name、description、price和category。每个字段都有一个名称和一个数据类型,id是整数类型、name和description是文本类型、price是浮点数类型、category是字符串类型。每个字段的数据类型可以影响搜索和聚合的性能和准确性,因此需要仔细设计和测试。
文档可以被索引和搜索,索引是将文档存储到Elasticsearch中的过程,搜索是从Elasticsearch中查询文档的过程。要索引一个文档,可以使用PUT命令,例如:
1
2
3
4
5
6
7
8
PUT /my_index/_doc/1
{
"id": 1,
"name": "Product A",
"description": "This is a product A",
"price": 100.00,
"category": "Electronics"
}

这将在名为“my_index”的索引中索引一个ID为1的文档。要搜索文档,可以使用GET命令,并指定查询参数,例如:
1
GET /my_index/_search?q=name:Product A

这将返回名为“Product A”的文档。

字段

Elasticsearch的字段是文档中的属性,它们包含了文档的具体信息。每个字段都有一个名称和一个数据类型,可以是字符串、数字、日期、布尔值等。
在Elasticsearch中,字段的数据类型可以影响搜索和聚合的性能和准确性,因此需要仔细设计和测试。以下是一些常见的字段类型:

  1. Text:文本类型,用于存储文本数据,可以进行全文搜索和分析。例如,一个名为“title”的文本字段:
    1
    2
    3
    "title": {
    "type": "text"
    }
  2. Keyword:关键词类型,用于存储短文本数据,可以进行精确匹配和聚合。例如,一个名为“category”的关键词字段:
    1
    2
    3
    "category": {
    "type": "keyword"
    }
  3. Numeric:数字类型,用于存储数字数据,包括整数和浮点数。例如,一个名为“price”的浮点数字段:
    1
    2
    3
    "price": {
    "type": "float"
    }
  4. Date:日期类型,用于存储日期和时间数据。例如,一个名为“created_at”的日期字段:
    1
    2
    3
    4
    "created_at": {
    "type": "date",
    "format": "yyyy-MM-dd HH:mm:ss"
    }
  5. Boolean:布尔类型,用于存储True或False值。例如,一个名为“is_published”的布尔字段:
    1
    2
    3
    "is_published": {
    "type": "boolean"
    }
    除了以上常见的字段类型外,Elasticsearch还支持地理位置类型、对象类型等。字段的定义可以在映射(Mapping)中指定,映射定义了文档的结构和字段类型,它可以在索引创建时指定,也可以在索引创建后进行修改。

    映射

    Elasticsearch映射(Mapping)是一种定义文档结构的方式,它指定了每个字段的数据类型、分析器、索引选项等。映射可以理解为文档模板,它定义了文档中包含哪些字段、每个字段的数据类型、如何分析和索引每个字段的值等信息。
    映射可以在索引创建时指定,也可以在索引创建后进行修改。映射的定义是一个JSON对象,包括以下几个部分:
  6. Properties:定义文档的字段及其属性,每个字段都有一个名称和一个数据类型。例如,可以定义一个名为“title”的文本字段:
    1
    2
    3
    4
    5
    "properties": {
    "title": {
    "type": "text"
    }
    }
  7. Fields:定义文档字段的子字段,通常用于定义多语言支持、全文搜索等功能。例如,可以定义一个名为“title”的英文子字段和一个名为“title.zh”的中文子字段:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    "properties": {
    "title": {
    "type": "text",
    "fields": {
    "en": {
    "type": "text",
    "analyzer": "english"
    },
    "zh": {
    "type": "text",
    "analyzer": "ik_max_word"
    }
    }
    }
    }
  8. Analyzer:定义文档字段的分析器,用于将文本进行分词和处理,以便于搜索和聚合。例如,可以为名为“title”的文本字段定义一个名为“my_analyzer”的分析器:
    1
    2
    3
    4
    5
    6
    "properties": {
    "title": {
    "type": "text",
    "analyzer": "my_analyzer"
    }
    }

以上是映射的基本定义,可以根据实际需求进行扩展。映射的定义可以影响到搜索和聚合的性能和准确性,因此需要仔细设计和测试。

聚合

Elasticsearch的聚合是一种数据分析方式,可以对一组数据进行统计分析,例如计算平均值、最大值、最小值、总和等。聚合操作可以帮助我们更好地理解数据,并从中发现有价值的信息。
以下是一些常用的聚合操作:

  1. Terms Aggregation:按照指定的字段进行分组,例如按照地区、产品类型等进行分组。
    举例:我们可以通过terms aggregation来计算每个地区的订单数量。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    {
    "aggs": {
    "orders_by_region": {
    "terms": {
    "field": "region.keyword"
    },
    "aggs": {
    "total_orders": {
    "value_count": {
    "field": "order_id"
    }
    }
    }
    }
    }
    }
  2. Date Histogram Aggregation:按照日期进行分组,例如按照月份、年份等进行分组。
    举例:我们可以通过date histogram aggregation来计算每个月的销售额。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
    "aggs": {
    "sales_by_month": {
    "date_histogram": {
    "field": "date",
    "interval": "month"
    },
    "aggs": {
    "total_sales": {
    "sum": {
    "field": "sales"
    }
    }
    }
    }
    }
    }
  3. Average Aggregation:计算指定字段的平均值。
    举例:我们可以通过average aggregation来计算平均价格。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    "aggs": {
    "average_price": {
    "avg": {
    "field": "price"
    }
    }
    }
    }
  4. Geo Distance Aggregation:按照地理位置进行分组,例如按照距离某个坐标点的距离进行分组。
    举例:我们可以通过geo distance aggregation来计算距离某个坐标点一定距离范围内的店铺数量。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {
    "aggs": {
    "stores_within_5km": {
    "geo_distance": {
    "field": "location",
    "origin": "40.7128,-74.0060",
    "unit": "km",
    "ranges": [
    {
    "to": 5
    }
    ]
    },
    "aggs": {
    "total_stores": {
    "value_count": {
    "field": "store_id"
    }
    }
    }
    }
    }
    }
    聚合操作可以帮助我们更好地理解数据,并从中发现有价值的信息。在实际应用中,我们可以根据实际需求选择合适的聚合操作,以便更好地分析数据。

    过滤器

    Elasticsearch的过滤器(Filter)是一种用于限制搜索结果的机制。过滤器可以用于过滤出符合特定条件的文档,例如根据时间范围、地理位置、关键词等条件进行过滤。过滤器可以有效地提高搜索性能,因为它们只返回符合条件的文档,而不需要计算文档的相关性得分。
    以下是一些常用的过滤器操作:
  5. Term Filter:用于匹配指定字段的精确值。
    举例:我们可以使用term filter来查找所有region字段为”North America”的文档。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
    "query": {
    "bool": {
    "filter": {
    "term": {
    "region": "North America"
    }
    }
    }
    }
    }
  6. Range Filter:用于匹配指定字段的范围值。
    举例:我们可以使用range filter来查找所有在2019年1月1日和2020年1月1日之间创建的订单。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
    "query": {
    "bool": {
    "filter": {
    "range": {
    "created_at": {
    "gte": "2019-01-01",
    "lt": "2020-01-01"
    }
    }
    }
    }
    }
    }
  7. Geo Distance Filter:用于匹配指定坐标点附近一定距离范围内的文档。
    举例:我们可以使用geo distance filter来查找距离纽约市中心10公里以内的所有店铺。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
    "query": {
    "bool": {
    "filter": {
    "geo_distance": {
    "distance": "10km",
    "location": {
    "lat": 40.7128,
    "lon": -74.0060
    }
    }
    }
    }
    }
    }
  8. Bool Filter:用于组合多个过滤器。
    举例:我们可以使用bool filter来查找在2019年1月1日和2020年1月1日之间创建,并且region字段为”North America”的订单。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {
    "query": {
    "bool": {
    "filter": [
    {
    "range": {
    "created_at": {
    "gte": "2019-01-01",
    "lt": "2020-01-01"
    }
    }
    },
    {
    "term": {
    "region": "North America"
    }
    }
    ]
    }
    }
    }

常用查询

  1. 查看所有索引
    1
    GET /_cat/indices?v
  2. 查看所有节点
    1
    GET /_cat/nodes?v
  3. 查看集群状态
    1
    GET /_cluster/health
  4. 查看集群状态详细信息
    1
    GET /_cluster/health?level=shards
  5. 设置索引映射
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PUT /index_name
    {
    "mappings": {
    "properties": {
    "field_name": {
    "type": "text"
    }
    }
    }
    }
  6. 查看索引映射
    1
    GET /index_name/_mapping
  7. 插入文档
    1
    2
    3
    4
    POST /index_name/_doc
    {
    "field_name": "field_value"
    }
  8. 批量插入文档
    1
    2
    3
    4
    5
    POST /index_name/_bulk
    { "index" : { "_id" : "1" } }
    { "field_name" : "field_value" }
    { "index" : { "_id" : "2" } }
    { "field_name" : "field_value" }
  9. 查询文档
    1
    2
    3
    4
    5
    6
    7
    8
    GET /index_name/_search
    {
    "query": {
    "match": {
    "field_name": "field_value"
    }
    }
    }
  10. 删除索引
1
DELETE /index_name

kibana教程

Kibana是一款用于可视化和分析Elasticsearch数据的开源工具。本教程将介绍如何使用Kibana进行数据分析和可视化。

  1. 安装Kibana
    首先,您需要安装Kibana。Kibana可以通过Elasticsearch官方网站下载页面下载。下载完成后,解压缩文件并进入Kibana目录。
  2. 启动Kibana
    启动Kibana需要运行bin/kibana命令。默认情况下,Kibana将在localhost:5601上运行。您可以在浏览器中访问该地址以打开Kibana控制台。
  3. 连接Elasticsearch
    在使用Kibana之前,您需要将其连接到Elasticsearch。在Kibana控制台中,单击左侧菜单栏中的“Management”选项,然后单击“Kibana”>“Index Patterns”。输入Elasticsearch索引名称并单击“Create”按钮。这将创建一个索引模式,允许您在Kibana中查询和可视化数据。
  4. 创建可视化
    在Kibana控制台中,单击左侧菜单栏中的“Visualize”选项,然后单击“Create a visualization”按钮。选择要创建的可视化类型,例如柱状图或折线图。选择Elasticsearch索引名称并配置可视化设置。单击“Save”按钮以保存可视化。
  5. 创建仪表板
    在Kibana控制台中,单击左侧菜单栏中的“Dashboard”选项,然后单击“Create a dashboard”按钮。选择要添加到仪表板的可视化,并将它们拖放到仪表板中。配置仪表板设置并单击“Save”按钮以保存仪表板。
  6. 查询数据
    在Kibana控制台中,单击左侧菜单栏中的“Discover”选项,然后选择要查询的Elasticsearch索引名称。使用查询语句搜索数据并在结果列表中查看数据。
  7. 使用过滤器
    在Kibana控制台中,单击左侧菜单栏中的“Discover”选项,然后单击右上角的“Add a filter”按钮。选择要过滤的字段和条件,并单击“Apply”按钮以应用过滤器。这将显示符合过滤器条件的数据。

Kibana是一款功能强大的工具,可帮助您可视化和分析Elasticsearch数据。本教程提供了一些基本的步骤,帮助您开始使用Kibana进行数据分析和可视化。

Logstash教程

Logstash是一个开源的数据收集引擎,可以从各种来源收集、转换和发送数据。它是Elastic Stack(ELK)的一部分,用于处理和分析大量数据。以下是Logstash的教程:

  1. 安装Logstash
    首先,您需要在您的系统上安装Logstash。您可以从Logstash官方网站下载相应的安装包,然后按照安装指南进行安装。
  2. 配置Logstash
    您可以使用Logstash的配置文件来定义数据源和数据目的地,以及数据的转换和过滤。配置文件是一个YAML格式的文件,可以使用文本编辑器进行编辑。
    以下是一个简单的Logstash配置文件示例:
    1
    2
    input { stdin {} }
    output { stdout {} }
    这个配置文件指定从标准输入读取数据,并将数据输出到标准输出。您可以根据需要添加更多的输入和输出插件,以及过滤器插件来处理数据。
  3. 运行Logstash
    当您完成配置文件后,可以使用以下命令来运行Logstash:

    1
    bin/logstash -f /path/to/config/file.conf

    其中,/path/to/config/file.conf是您的Logstash配置文件的路径。Logstash将读取配置文件并开始处理数据。您可以使用Ctrl-C来停止Logstash。

  4. 使用Logstash收集数据
    Logstash支持从各种数据源收集数据,包括文件、数据库、网络等。以下是一个从文件中收集数据的示例:

    1
    2
    input { file { path => "/path/to/log/file.log" } }
    output { stdout {} }

    这个配置文件指定从/path/to/log/file.log文件中收集数据,并将数据输出到标准输出。您可以根据需要添加其他输出插件,例如Elasticsearch,将数据发送到Elasticsearch进行索引和分析。

  5. 使用Logstash过滤数据
    Logstash还支持使用过滤器插件来转换和过滤数据。以下是一个示例:

    1
    2
    3
    input { file { path => "/path/to/log/file.log" } }
    filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } }
    output { stdout {} }

    这个配置文件使用grok过滤器插件来解析Apache访问日志中的数据,并将数据输出到标准输出。您可以根据需要添加其他过滤器插件,例如mutate、date等。

  6. 使用Logstash与Elasticsearch集成
    Logstash与Elasticsearch集成非常紧密,您可以使用Logstash将数据发送到Elasticsearch进行索引和分析。以下是一个示例:

    1
    2
    input { file { path => "/path/to/log/file.log" } }
    output { elasticsearch { hosts => ["localhost:9200"] index => "myindex" } }

    这个配置文件指定将数据发送到本地运行的Elasticsearch实例,并将数据索引到myindex索引中。您可以在Kibana中使用myindex索引来进行数据可视化和分析。

总结
以上是Logstash的简单教程,您可以根据需要进行扩展和定制。Logstash非常强大,可以处理各种类型的数据,包括结构化和非结构化数据。通过与Elasticsearch、Kibana等工具集成,您可以构建一个完整的数据分析平台。