Link Search Menu Expand Document Documentation Menu

索引转换

索引汇总作业允许您通过将旧数据汇总到压缩索引中来降低数据粒度,而转换作业允许您围绕特定字段创建不同的、摘要的数据视图,以便您可以通过不同方式可视化或分析数据。

例如,假设您有分散在多个字段和类别中的航空公司数据,并且您想查看按航空公司、季度和价格组织的数据摘要。您可以使用转换作业创建一个按这些特定类别组织的新汇总索引。

您可以通过两种方式使用转换作业

  1. 使用 OpenSearch Dashboards UI 指定要转换的索引以及要用于过滤原始索引的任何可选数据过滤器。然后选择要转换的字段以及要在转换中使用的聚合。最后,定义作业要遵循的计划。
  2. 使用转换 API 指定作业的所有详细信息:要转换的索引、您希望转换后的索引具有的目标组、要用于分组列的任何聚合,以及作业要遵循的计划。

OpenSearch Dashboards 提供了您创建的作业及其相关信息的详细摘要,例如关联的索引和作业状态。您可以在创建之前查看和编辑作业的详细信息和选择,甚至在选择要转换的字段时预览转换后索引的数据。但是,您也可以使用 REST API 创建转换作业并预览转换作业结果,但您必须了解所有必要的设置和参数才能将其作为 HTTP 请求正文的一部分提交。将您的转换作业配置作为 JSON 脚本提交提供了更高的可移植性,允许您共享和复制转换作业,这在使用 OpenSearch Dashboards 时更难实现。

您的用例将帮助您决定使用哪种方法来创建转换作业。

创建转换作业

如果您的集群中没有任何数据,您可以使用 OpenSearch Dashboards 中的示例航班数据来试用转换作业。否则,启动 OpenSearch Dashboards 后,选择 Index Management。选择 Transform Jobs,然后选择 Create Transform Job

步骤 1:选择索引

  1. 作业名称和描述部分,为您的作业指定名称和可选描述。
  2. 索引部分,选择源索引和目标索引。您可以选择现有目标索引,也可以通过输入新索引的名称来创建新索引。如果您只想转换源索引的子集,请选择编辑数据过滤器,并使用 OpenSearch 查询 DSL 指定源索引的子集。有关 OpenSearch 查询 DSL 的更多信息,请参阅查询 DSL
  3. 选择下一步

步骤 2:选择要转换的字段

指定索引后,您可以选择要在转换作业中使用的字段,以及是否使用分组或聚合。

您可以使用分组将数据放入转换后索引中的单独桶中。例如,如果您想对示例航班数据中的所有机场目的地进行分组,您可以将 DestAirportID 字段分组到目标字段 DestAirportID_terms 字段中,在转换作业完成后,您可以在转换后的索引中找到分组的机场 ID。

另一方面,聚合允许您执行简单的计算。例如,您可以在转换作业中包含一个聚合,以定义一个新的 sum_of_total_ticket_price 字段,该字段计算所有机票的总和,然后分析转换后索引中的新汇总数据。

  1. 在数据表中,选择要转换的字段,并展开列标题中的下拉菜单以选择要使用的分组或聚合。

    目前,转换作业支持直方图(histogram)、日期直方图(date_histogram)和术语(terms)分组。有关分组的更多信息,请参阅桶聚合。在聚合方面,您可以从sumavgmaxminvalue_countpercentilesscripted_metric 中进行选择。有关聚合的更多信息,请参阅指标聚合

  2. 对任何其他要转换的字段重复步骤 1。
  3. 选择要转换的字段并验证转换后,选择下一步

步骤 3:指定计划

您可以配置转换作业以按计划运行一次或多次。转换作业默认启用。

  1. 选择作业是否为连续作业。连续作业在每个转换执行间隔执行,并递增地转换新修改的桶,其中可以包含添加到源索引的新数据。非连续作业仅执行一次。
  2. 对于转换执行间隔,指定以分钟、小时或天为单位的转换间隔。此间隔决定了连续作业的执行频率,非连续作业在间隔结束后执行一次。
  3. 高级下,为每次执行的页数指定一个可选值。数字越大意味着每次搜索请求处理的数据越多,但也会占用更多内存并导致更高的延迟。超出允许的内存限制可能会导致异常和错误。
  4. 选择下一步

步骤 4:查看并确认详细信息

确认转换作业的详细信息无误后,选择创建转换作业。如果要编辑作业的任何部分,请选择要更改部分的编辑,然后进行必要的更改。创建作业后,您无法更改聚合或分组。

步骤 5:搜索转换后的索引。

转换作业完成后,您可以使用 _search API 操作搜索目标索引。

GET <target_index>/_search

例如,在运行一个根据 DestAirportID 字段转换航班数据的转换作业后,您可以运行以下请求,该请求返回所有值为 SFO 的字段。

示例请求

GET finished_flight_job/_search
{
  "query": {
    "match": {
      "DestAirportID_terms" : "SFO"
    }
  }
}

示例响应

{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 3.845883,
    "hits" : [
      {
        "_index" : "finished_flight_job",
        "_id" : "dSNKGb8U3OJOmC4RqVCi1Q",
        "_score" : 3.845883,
        "_source" : {
          "transform._id" : "sample_flight_job",
          "transform._doc_count" : 14,
          "Carrier_terms" : "Dashboards Airlines",
          "DestAirportID_terms" : "SFO"
        }
      },
      {
        "_index" : "finished_flight_job",
        "_id" : "_D7oqOy7drx9E-MG96U5RA",
        "_score" : 3.845883,
        "_source" : {
          "transform._id" : "sample_flight_job",
          "transform._doc_count" : 14,
          "Carrier_terms" : "Logstash Airways",
          "DestAirportID_terms" : "SFO"
        }
      },
      {
        "_index" : "finished_flight_job",
        "_id" : "YuZ8tOt1OsBA54e84WuAEw",
        "_score" : 3.6988301,
        "_source" : {
          "transform._id" : "sample_flight_job",
          "transform._doc_count" : 11,
          "Carrier_terms" : "ES-Air",
          "DestAirportID_terms" : "SFO"
        }
      },
      {
        "_index" : "finished_flight_job",
        "_id" : "W_-e7bVmH6eu8veJeK8ZxQ",
        "_score" : 3.6988301,
        "_source" : {
          "transform._id" : "sample_flight_job",
          "transform._doc_count" : 10,
          "Carrier_terms" : "JetBeats",
          "DestAirportID_terms" : "SFO"
        }
      }
    ]
  }
}

索引编解码器注意事项

有关索引编解码器注意事项,请参阅索引编解码器