Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据

这篇具有很好参考价值的文章主要介绍了Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在我之前的文章:

  • Elasticsearch:如何使用 Elasticsearch ingest 节点来丰富日志和指标

  • Elasticsearch:enrich processor (7.5发行版新功能)

我有详细描述如何使用 ingest pipeline 来丰富数据。在今天的文章中里,我们来更加详细地使用一个具体的例子来进行展示。更多官方文档描述,我们可以详细参阅文章 Enrich your data | Elasticsearch Guide [8.8] | Elastic。

什么是丰富数据

简单地说,我们可以使用其他的数据集里的数据添加到现有的数据集中。这样在我们的最终的数据集中,它含有另外一个数据集里的数据供我们分析数据。我们知道如果是独立于 Elasticsearch 的数据库,我们只有通过 Logstash 来完成这种操作。针对两个不同的 Elasticsearch 索引来说,我们可以使用 enrich processor 来完成两个不同的数据集之间的 “join” 操作。比如:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

如上所示,我们有两个数据集:registration 及 customer。他们的数据分别如上所示。 它们是以 JSON 格式来进行表达的。我们可以通过 email 进行关联,那么最终我们可以得到如图右边的那个被丰富的数据。这个数据它不仅含有 registraion 里的数据,而且它还含有 customer 里的数据。从某种意义上讲,我们把两个不同的数据集通过 email 进行关联,并最终形成了一个被丰富的数据集。这个对于我们最终分析数据非常有效。

Elasticsearch enrich processor 的工作流程如下:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

数据描述 

我们假想有一个活动的  signup 应用。在活动签名的时候这个应用收集了如下的信息:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

如上所示,它只含有 email,location_id,paid_amount 及 product 四个字段的信息。这个信息被保存于一个 CSV 文件中。之后,市场部门提供了更多的信息表格给我我们。这些信息包含 location,member_type 及 user 等信息。

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

为了方便大家理解这个问题,我们可以在地址 GitHub - liu-xiao-guo/elasticsearch-ingest  找到相应的数据表述:

location.csv

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

 user.csv

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

member_type.csv

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

 signup.csv

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

 我们希望通过 enrich processor 的处理,我们最终能得到像如下结果的数据集:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

也就是说,我们通过 enrich processor 的一番操作,我们可以把匹配的 user,location 及 member_type 信息添加进来,也即丰富原来的数据。

 

导入数据

我们可以使用 Kibana 来写入数据:

导入 user.csv

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

导入 location.csv

 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 在上面我们需要修改 point 为 geo_point 数据类型。

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

导入 member_type.csv

按照同样的方法,我们来导入 member_type.csv:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 在上面,我们添加了如下的 json processor:

    {
      "json" : {
        "field" : "price_range"
      }
    }

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

 

创建 enrich policy

我们可以参考链接:https://github.com/liu-xiao-guo/elasticsearch-ingest/blob/master/part-2/policy/user.txt

// Create users policy
PUT /_enrich/policy/user_policy
{
  "match": {
    "indices": "user",
    "match_field": "email",
    "enrich_fields": ["first_name", "last_name", "city", "zip", "state"]
  }
}

PUT /_enrich/policy/user_policy/_execute

我们在 Kibana 中运行上面的命令。在上面的 user_policy 中,我们使用 user 索引中的 email 字段,如果有匹配的话,那么 user 索引中相应的文档的 first_name,last_name,city,zip 及 state 将被丰富到文档中。

我们参考链接:https://github.com/liu-xiao-guo/elasticsearch-ingest/blob/master/part-2/policy/location.txt

PUT /_enrich/policy/location_policy
{
  "match": {
    "indices": "location",
    "match_field": "location_id",
    "enrich_fields": ["point"]
  }
}

PUT /_enrich/policy/location_policy/_execute

 在 Kibana 中运行上面的命令。

我们参考链接:https://github.com/liu-xiao-guo/elasticsearch-ingest/blob/master/part-2/policy/member_type.txt

// Create member_type policy
PUT /_enrich/policy/member_type_policy
{
  "range": {
    "indices": "member_type",
    "match_field": "price_range",
    "enrich_fields": ["member_type"]
  }
}

PUT /_enrich/policy/member_type_policy/_execute

我们在 Kibana 中运行上面的命令。

我们可以在 index management 中查看到新生成的 enrich index:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

导入 signup.csv

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

如果你看看我们之前想要的结果的数据 mapping:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

我们需要添加 geo 字段:

    "geo": {
      "properties": {
        "point": {
          "type": "geo_point"
	      }
      }
    }

我们需要更进一步修改 ingest pipeline。我们参考链接:https://github.com/liu-xiao-guo/elasticsearch-ingest/blob/master/part-2/pipeline/signup.json

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

我们需要添加如下的三个 enrich processor:

    {
      "enrich" : {
        "description": "Add 'user' data based on 'email'",
        "policy_name": "user_policy",
        "field" : "email",
        "target_field": "user",
        "max_matches": "1"
      }
    },
    {
      "enrich" : {
        "description": "Add 'member_type' data based on 'paid_amount'",
        "policy_name": "member_type_policy",
        "field" : "paid_amount",
        "target_field": "member_type",
        "max_matches": "1"
      }
    },
    {
      "enrich" : {
        "description": "Add 'geo' data based on 'location_id'",
        "policy_name": "location_policy",
        "field" : "location_id",
        "target_field": "geo",
        "max_matches": "1"
      }
    },

 点击上面的 import 按钮:

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库 

我们接下来针对 signup 索引来做一个搜索:

GET signup/_search?filter_path=**.hits

上面的命令返回的结果为:

{
  "hits": {
    "hits": [
      {
        "_index": "signup",
        "_id": "Q9mvgokBWubr9hCu1VXI",
        "_score": 1,
        "_source": {
          "member_type": {
            "member_type": "regular",
            "price_range": {
              "lte": 5
            }
          },
          "geo": {
            "location_id": 2351,
            "point": "POINT(-71.61 42.28)"
          },
          "product": "earlybird",
          "paid_amount": 5,
          "user": {
            "zip": 9303,
            "city": "Arleta",
            "last_name": "Fly",
            "state": "CA",
            "first_name": "Marty",
            "email": "martymcfly@backtothefuture.com"
          },
          "email": "martymcfly@backtothefuture.com",
          "location_id": 2351
        }
      },
      {
        "_index": "signup",
        "_id": "RNmvgokBWubr9hCu1VXI",
        "_score": 1,
        "_source": {
          "member_type": {
            "member_type": "regular",
            "price_range": {
              "lte": 5
            }
          },
          "geo": {
            "location_id": 2322,
            "point": "POINT(-71.63 42.56)"
          },
          "product": "earlybird",
          "paid_amount": 5,
          "user": {
            "zip": 58008,
            "city": "Springfield",
            "last_name": "Simpson",
            "state": "OR",
            "first_name": "Homer",
            "email": "homersimpson@springfield.com"
          },
          "email": "homersimpson@springfield.com",
          "location_id": 2322
        }
      },
      {
        "_index": "signup",
        "_id": "RdmvgokBWubr9hCu1VXI",
        "_score": 1,
        "_source": {
          "member_type": {
            "member_type": "premium",
            "price_range": {
              "gt": 5
            }
          },
          "geo": {
            "location_id": 2019,
            "point": "POINT(-72.68 42.2)"
          },
          "product": "regular",
          "paid_amount": 10,
          "user": {
            "zip": 99686,
            "city": "Valdez",
            "last_name": "Riker",
            "state": "AK",
            "first_name": "Will",
            "email": "willriker@federation.com"
          },
          "email": "willriker@federation.com",
          "location_id": 2019
        }
      }
    ]
  }
}

从上面的输出中,我们可以看出来我们已经成功地丰富了 signup 索引。文章来源地址https://www.toymoban.com/news/detail-613767.html

到了这里,关于Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 使用Elasticsearch进行word,excel,PDF的全文检索 windows实现 超完整(ingest-attachment实现)

    使用Elasticsearch进行word,excel,PDF的全文检索 windows实现 超完整(ingest-attachment实现)

    首先要明确的一点就是Elasticsearch的版本要和ingest-attachment的版本一致,要不然没办法安装。然后还有一点JAVA版本要在11以上 先说说原理吧,其实就是将文件base64编码,然后再用插件读取文件内容并保存到es中。 安装完jdk之后用cmd查看一下java -version看看是否已经从1.8修改为了

    2024年02月13日
    浏览(8)
  • Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去

    Elasticsearch:使用 pipelines 路由文档到想要的 Elasticsearch 索引中去

    当应用程序需要向 Elasticsearch 添加文档时,它们首先要知道目标索引是什么。在很多的应用案例中,特别是针对时序数据,我们想把每个月的数据写入到一个特定的索引中。一方面便于管理索引,另外一方面在将来搜索的时候可以按照每个月的索引来进行搜索,这样速度更快

    2023年04月09日
    浏览(11)
  • Elasticsearch:使用 Elastic APM 监控 Android 应用程序

    Elasticsearch:使用 Elastic APM 监控 Android 应用程序

    作者:Alexander Wert, Cesar Munoz 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户,确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型

    2023年04月13日
    浏览(14)
  • Elasticsearch:使用 Elastic APM 监控 Android 应用程序(一)

    Elasticsearch:使用 Elastic APM 监控 Android 应用程序(一)

    作者:Alexander Wert, Cesar Munoz 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户,确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、崩溃的发生和类型

    2024年02月03日
    浏览(14)
  • Elasticsearch:使用 Elastic APM 监控 Android 应用程序(二)

    Elasticsearch:使用 Elastic APM 监控 Android 应用程序(二)

    在我之前的文章 “Elasticsearch:使用 Elastic APM 监控 Android 应用程序(一)” 中,我详述了如何使用 Elastic APM 来监控 Android 应用程序。在今天的文章中,我来详述如何部署 Elastic Stack,并使用文章中的示例代码来进行展示。为了展示方便,在今天的展示中,我将所有的组件都安

    2023年04月22日
    浏览(12)
  • Elasticsearch:如何通过 3 个简单步骤从 Elastic 数据中删除个人身份信息

    Elasticsearch:如何通过 3 个简单步骤从 Elastic 数据中删除个人身份信息

    作者:Peter Titov 对于任何组织来说,个人身份信息 (Personally Identifiable information, PII) 合规性都是一个日益严峻的挑战。 无论你是在电子商务、银行、医疗保健还是其他数据敏感的领域,PII 都可能会在无意中被捕获和存储。 拥有结构化日志,可以轻松快速识别、删除和保护敏

    2024年02月13日
    浏览(13)
  • Elasticsearch:使用 Docker-Compose 启动单节点 Elastic Stack

    Elasticsearch:使用 Docker-Compose 启动单节点 Elastic Stack

    首先必须指出的是,在我之前的文章 “Elasticsearch:使用 Docker compose 来一键部署 Elastic Stack 8.x”,我有详述根据官方文档如何创建一个带有三个节点的安全 Elasticsearch 集群。本文基于著名的 Deviatony 存储库和 Elastic 的官方说明。 建议先通读这些说明,如果你已经可以根据这些

    2024年02月05日
    浏览(11)
  • Elasticsearch:如何使用自定义的证书安装 Elastic Stack 8.x

    Elasticsearch:如何使用自定义的证书安装 Elastic Stack 8.x

    在我之前的文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch”,我详细描述了如何在各个平台中安装 Elastic Stack 8.x。在其中的文章中,我们大多采用默认的证书来安装 Elasticsearch。在今天的文章中,我们用自己创建的证书一步一步地来安装 Elastic Stack 8.x。我们可以参

    2024年02月08日
    浏览(13)
  • Observability:如何使用 Elastic Agents 把定制的日志摄入到 Elasticsearch 中

    Observability:如何使用 Elastic Agents 把定制的日志摄入到 Elasticsearch 中

    在我之前的文章 “Observability:使用 Elastic Agent 来摄入日志及指标 - Elastic Stack 8.0”,我详细地描述了如何安装 Elasticsearch,Stack 及 Elastic Agents 来采集系统日志及指标。很多开发者可能会有疑问,在我们的实际使用中,我们更多的可能是需要采集定制的应用日志,而不是系统日

    2024年02月02日
    浏览(10)
  • Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR

    Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR

    在信息过载的时代,根据上下文含义和用户意图而不是精确的匹配来查找相关搜索结果已成为一项重大挑战。 传统的搜索引擎通常无法理解用户查询的语义上下文,从而导致相关性较低的结果。 在现代向量搜索之前,我们有 “传统”的 词袋(Bags of word - BOW)方法。

    2024年02月15日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包