重命名字段处理器

重命名字段处理器(Rename Field Processor) #

版本引入:1.14.0

rename_field 搜索响应处理器用于拦截搜索响应,并对指定字段进行重命名。当你索引中的字段名称与应用程序使用的名称不一致时,该功能非常有用。例如,当索引中使用了新的字段名称,但应用程序仍期望接收旧字段名称时,可通过 rename_field 处理器在返回响应前完成字段名的映射,实现平滑过渡和向后兼容。

请求体字段 #

下表列出了该处理器支持的所有配置字段。

字段数据类型说明
field字符串要重命名的原始字段名。必填
target_field字符串新的字段名称。必填
tag字符串处理器的唯一标识符。可选。
description字符串对该处理器的描述信息。可选。
ignore_failure布尔值若为 true,当此处理器执行失败时,Easysearch 将忽略错误并继续执行搜索管道中的其余处理器。可选,默认值为 false

示例 #

以下示例演示如何在搜索管道中使用 rename_field 处理器。

准备工作 #

创建一个名为 my_index 的索引,并索引一个包含 message 字段的文档:

POST /my_index/_doc/1
{
  "message": "This is a public message",
  "visibility": "public"
}

创建搜索管道 #

以下请求创建一个名为 my_pipeline 的搜索管道,其中包含一个 rename_field 响应处理器,用于将字段 message 重命名为 notification

PUT /_search/pipeline/my_pipeline
{
  "response_processors": [
    {
      "rename_field": {
        "field": "message",
        "target_field": "notification"
      }
    }
  ]
}

使用搜索管道 #

在不使用搜索管道的情况下,对 my_index 索引执行搜索:

GET /my_index/_search

响应中包含原始字段 message

响应
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "message": "This is a public message",
          "visibility": "public"
        }
      }
    ]
  }
}

要使用搜索管道,请在请求中通过 search_pipeline 查询参数指定管道名称:

GET /my_index/_search?search_pipeline=my_pipeline

此时,字段 message 已被重命名为 notification

响应
{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.0,
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 0.0,
        "_source": {
          "visibility": "public",
          "notification": "This is a public message"
        }
      }
    ]
  }
}

你也可以使用 fields 参数来搜索文档中的特定字段:

POST /my_index/_search?pretty&search_pipeline=my_pipeline
{
    "fields": ["visibility", "message"]
}

在响应中,message 字段已被重命名为 notification,包括在 fields 返回结果中:

响应
{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.0,
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 0.0,
        "_source": {
          "visibility": "public",
          "notification": "This is a public message"
        },
        "fields": {
          "visibility": [
            "public"
          ],
          "notification": [
            "This is a public message"
          ]
        }
      }
    ]
  }
}