opensearch-docs-cn/_search-plugins/search-pipelines/rename-field-processor.md

212 lines
4.5 KiB
Markdown

---
layout: default
title: Rename field processor
nav_order: 20
has_children: false
parent: Search pipelines
grand_parent: Search
---
# Rename field processor
The `rename_field` search response processor intercepts a search response and renames the specified field. This is useful when your index and your application use different names for the same field. For example, if you rename a field in your index, the `rename_field` processor can change the new name to the old one before sending the response to your application.
## Request fields
The following table lists all available request fields.
Field | Data type | Description
:--- | :--- | :---
`field` | String | The field to rename. Required.
`target_field` | String | The new field name. Required.
`tag` | String | The processor's identifier.
`description` | String | A description of the processor.
`ignore_failure` | Boolean | If `true`, OpenSearch [ignores a failure]({{site.url}}{{site.baseurl}}/search-plugins/search-pipelines/index/#ignoring-processor-failures) of this processor and continues to run the remaining processors in the search pipeline. Optional. Default is `false`.
## Example
The following example demonstrates using a search pipeline with a `rename_field` processor.
### Setup
Create an index named `my_index` and index a document with the field `message`:
```json
POST /my_index/_doc/1
{
"message": "This is a public message",
"visibility":"public"
}
```
{% include copy-curl.html %}
### Creating a search pipeline
The following request creates a search pipeline with a `rename_field` response processor that renames the field `message` to `notification`:
```json
PUT /_search/pipeline/my_pipeline
{
"response_processors": [
{
"rename_field": {
"field": "message",
"target_field": "notification"
}
}
]
}
```
{% include copy-curl.html %}
### Using a search pipeline
Search for documents in `my_index` without a search pipeline:
```json
GET /my_index/_search
```
{% include copy-curl.html %}
The response contains the field `message`:
<details open markdown="block">
<summary>
Response
</summary>
{: .text-delta}
```json
{
"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"
}
}
]
}
}
```
</details>
To search with a pipeline, specify the pipeline name in the `search_pipeline` query parameter:
```json
GET /my_index/_search?search_pipeline=my_pipeline
```
{% include copy-curl.html %}
The `message` field has been renamed to `notification`:
<details open markdown="block">
<summary>
Response
</summary>
{: .text-delta}
```json
{
"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"
}
}
]
}
}
```
</details>
You can also use the `fields` option to search for specific fields in a document:
```json
POST /my_index/_search?pretty&search_pipeline=my_pipeline
{
"fields":["visibility", "message"]
}
```
{% include copy-curl.html %}
In the response, the field `message` has been renamed to `notification`:
<details open markdown="block">
<summary>
Response
</summary>
{: .text-delta}
```json
{
"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"
]
}
}
]
}
}
```
</details>