From 9ee06ea5582892a992c563512b298a622cb8e051 Mon Sep 17 00:00:00 2001 From: gaobinlong Date: Thu, 4 Jul 2024 16:37:20 +0800 Subject: [PATCH 01/11] Add fingerprint processor Signed-off-by: gaobinlong --- _ingest-pipelines/processors/fingerprint.md | 156 ++++++++++++++++++ .../processors/index-processors.md | 1 + 2 files changed, 157 insertions(+) create mode 100644 _ingest-pipelines/processors/fingerprint.md diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md new file mode 100644 index 0000000000..b50113a9c3 --- /dev/null +++ b/_ingest-pipelines/processors/fingerprint.md @@ -0,0 +1,156 @@ +--- +layout: default +title: Fingerprint +parent: Ingest processors +nav_order: 55 +--- + +# Fingerprint processor + +The `fingerprint` processor is used to generate hash value for the specified fields or all fields in a document, the hash value can be used to deduplicate documents within a index and collapse search results. + +To generate hash value for the specified fields, field name, the length of field value and field value are concatenated and separated by `|`, e.g: `|field1|3:value1|field2|10:value2|`, for object fields, the field name is flattened, e.g: `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. + +The following is the `fingerprint` processor syntax: + +```json +{ + "community_id": { + "fields": ["foo", "bar"], + "target_field": "fingerprint", + "hash_method": "SHA-1@2.16.0" + } +} +``` +{% include copy-curl.html %} + +## Configuration parameters + +The following table lists the required and optional parameters for the `fingerprint` processor. + +Parameter | Required/Optional | Description | +|-----------|-----------|-----------| +`fields` | Optional | The field list used to generate hash value. | +`exclude_fields` | Optional | All fields other than the fields in this excluding list are used to generate hash value. The `exclude_fields` and `fields` options are mutually exclusive. If `fields` and `exclude_fields` are both empty or null, it means `include all fields`, all fields will be used to generate hash value.| +`hash_method` | Optional | One of MD5@2.16.0, SHA-1@2.16.0, SHA-256@2.16.0 or SHA3-256@2.16.0. Defaults to SHA-1@2.16.0. This processor is introduced in 2.16.0, we append the OpenSearch version to the hash method name to ensure that this processor always generates same hash value based on a specific hash method, if the processing logic of this processor changes in future version, then this parameter will support new hash method with new version. | +`target_field` | Optional | The name of the field in which to store the hash value. Default target field is `fingerprint`. | +`ignore_missing` | Optional | Specifies whether the processor should exit quietly if one of the required fields is missing. Default is `false`. | +`description` | Optional | A brief description of the processor. | +`if` | Optional | A condition for running the processor. | +`ignore_failure` | Optional | If set to `true`, then failures are ignored. Default is `false`. | +`on_failure` | Optional | A list of processors to run if the processor fails. | +`tag` | Optional | An identifier tag for the processor. Useful for debugging in order to distinguish between processors of the same type. | + +## Using the processor + +Follow these steps to use the processor in a pipeline. + +**Step 1: Create a pipeline** + +The following query creates a pipeline named `fingerprint_pipeline` that uses the `fingerprint` processor to generate a hash value for some specified fields in the document: + +```json +PUT /_ingest/pipeline/fingerprint_pipeline +{ + "description": "generate hash value for some specified fields the document", + "processors": [ + { + "fingerprint": { + "fields": ["foo", "bar"] + } + } + ] +} +``` +{% include copy-curl.html %} + +**Step 2 (Optional): Test the pipeline** + +It is recommended that you test your pipeline before ingesting documents. +{: .tip} + +To test the pipeline, run the following query: + +```json +POST _ingest/pipeline/fingerprint_pipeline/_simulate +{ + "docs": [ + { + "_index": "testindex1", + "_id": "1", + "_source": { + "foo": "foo", + "bar": "bar" + } + } + ] +} +``` +{% include copy-curl.html %} + +#### Response + +The following example response confirms that the pipeline is working as expected: + +```json +{ + "docs": [ + { + "doc": { + "_index": "testindex1", + "_id": "1", + "_source": { + "foo": "foo", + "bar": "bar", + "fingerprint": "SHA-1@2.16.0:fYeen7hTJ2zs9lpmUnk6nvH54sM=" + }, + "_ingest": { + "timestamp": "2024-03-11T02:17:22.329823Z" + } + } + } + ] +} +``` + +**Step 3: Ingest a document** + +The following query ingests a document into an index named `testindex1`: + +```json +PUT testindex1/_doc/1?pipeline=fingerprint_pipeline +{ + "foo": "foo", + "bar": "bar" +} +``` +{% include copy-curl.html %} + +#### Response + +The request indexes the document into the `testindex1` index: + +```json +{ + "_index": "testindex1", + "_id": "1", + "_version": 1, + "result": "created", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "_seq_no": 0, + "_primary_term": 1 +} +``` + +**Step 4 (Optional): Retrieve the document** + +To retrieve the document, run the following query: + +```json +GET testindex1/_doc/1 +``` +{% include copy-curl.html %} diff --git a/_ingest-pipelines/processors/index-processors.md b/_ingest-pipelines/processors/index-processors.md index 4b229f0a61..4360b190c1 100644 --- a/_ingest-pipelines/processors/index-processors.md +++ b/_ingest-pipelines/processors/index-processors.md @@ -40,6 +40,7 @@ Processor type | Description `dot_expander` | Expands a field with dots into an object field. `drop` |Drops a document without indexing it or raising any errors. `fail` | Raises an exception and stops the execution of a pipeline. +`fingerprint` | Generate hash value for specified fields or all fields in a document. `foreach` | Allows for another processor to be applied to each element of an array or an object field in a document. `geoip` | Adds information about the geographical location of an IP address. `geojson-feature` | Indexes GeoJSON data into a geospatial field. From 57232c8304c1f40e343450371a92e70295e56552 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Mon, 8 Jul 2024 11:27:27 -0600 Subject: [PATCH 02/11] Completed doc review Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index b50113a9c3..2f9d6e20aa 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -6,10 +6,12 @@ nav_order: 55 --- # Fingerprint processor +Introduced 2.16 +{: .label .label-purple } -The `fingerprint` processor is used to generate hash value for the specified fields or all fields in a document, the hash value can be used to deduplicate documents within a index and collapse search results. +The `fingerprint` processor is used to generate a hash value for the specified fields or all fields in a document. The hash value can be used to deduplicate documents within a index and collapse search results. -To generate hash value for the specified fields, field name, the length of field value and field value are concatenated and separated by `|`, e.g: `|field1|3:value1|field2|10:value2|`, for object fields, the field name is flattened, e.g: `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. +For each field, the field name, length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be`|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. The following is the `fingerprint` processor syntax: @@ -30,10 +32,10 @@ The following table lists the required and optional parameters for the `fingerpr Parameter | Required/Optional | Description | |-----------|-----------|-----------| -`fields` | Optional | The field list used to generate hash value. | -`exclude_fields` | Optional | All fields other than the fields in this excluding list are used to generate hash value. The `exclude_fields` and `fields` options are mutually exclusive. If `fields` and `exclude_fields` are both empty or null, it means `include all fields`, all fields will be used to generate hash value.| -`hash_method` | Optional | One of MD5@2.16.0, SHA-1@2.16.0, SHA-256@2.16.0 or SHA3-256@2.16.0. Defaults to SHA-1@2.16.0. This processor is introduced in 2.16.0, we append the OpenSearch version to the hash method name to ensure that this processor always generates same hash value based on a specific hash method, if the processing logic of this processor changes in future version, then this parameter will support new hash method with new version. | -`target_field` | Optional | The name of the field in which to store the hash value. Default target field is `fingerprint`. | +`fields` | Optional | A list of fields used to generate a hash value. | +`exclude_fields` | Optional | Specifies the fields to be excluded from hash value generation. It is mutually exclusive with the `fields` parameter; if both `exclude_fields` and `fields` are empty or null, all fields are included in the hash value calculation. | +`hash_method` | Optional | Specifies the hashing algorithm to be used, with options being `MD5@2.16.0`, `SHA-1@2.16.0`, `SHA-256@2.16.0`, or `SHA3-256@2.16.0`. Default is `SHA-1@2.16.0`. The version number is appended to ensure consistent hashing across OpenSearch versions, and new versions will support new hash methods. | +`target_field` | Optional | Specifies the name of the field where the generated hash value will be stored. If not provided, the hash value is stored in the `fingerprint` field by default. | `ignore_missing` | Optional | Specifies whether the processor should exit quietly if one of the required fields is missing. Default is `false`. | `description` | Optional | A brief description of the processor. | `if` | Optional | A condition for running the processor. | @@ -47,7 +49,7 @@ Follow these steps to use the processor in a pipeline. **Step 1: Create a pipeline** -The following query creates a pipeline named `fingerprint_pipeline` that uses the `fingerprint` processor to generate a hash value for some specified fields in the document: +The following query creates a pipeline named `fingerprint_pipeline` that uses the `fingerprint` processor to generate a hash value for specified fields in the document: ```json PUT /_ingest/pipeline/fingerprint_pipeline From 4ca45b1ea82e341440664d5481b81373762db7fe Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Mon, 8 Jul 2024 11:52:37 -0600 Subject: [PATCH 03/11] Update _ingest-pipelines/processors/fingerprint.md Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 2f9d6e20aa..9b11df62ad 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -9,7 +9,7 @@ nav_order: 55 Introduced 2.16 {: .label .label-purple } -The `fingerprint` processor is used to generate a hash value for the specified fields or all fields in a document. The hash value can be used to deduplicate documents within a index and collapse search results. +The `fingerprint` processor is used to generate a hash value for the specified fields or all fields in a document. The hash value can be used to deduplicate documents within an index and collapse search results. For each field, the field name, length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be`|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. From 469039cded918accfce8beb40e9d75f86a6fbc49 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Mon, 8 Jul 2024 11:53:23 -0600 Subject: [PATCH 04/11] Update _ingest-pipelines/processors/fingerprint.md Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 9b11df62ad..86c43d8c82 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -11,7 +11,7 @@ Introduced 2.16 The `fingerprint` processor is used to generate a hash value for the specified fields or all fields in a document. The hash value can be used to deduplicate documents within an index and collapse search results. -For each field, the field name, length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be`|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. +For each field, the field name, length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be`|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, then the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. The following is the `fingerprint` processor syntax: From cd543463768597a6ec8cb84fac5cc5336cd0f0a1 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Mon, 8 Jul 2024 11:56:01 -0600 Subject: [PATCH 05/11] Update nav order Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 2f9d6e20aa..0442c189b5 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -2,7 +2,7 @@ layout: default title: Fingerprint parent: Ingest processors -nav_order: 55 +nav_order: 105 --- # Fingerprint processor From b5352f03c409854fbd9c10f1521cb56798870ac1 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Tue, 9 Jul 2024 09:14:48 -0600 Subject: [PATCH 06/11] Update _ingest-pipelines/processors/fingerprint.md Co-authored-by: Nathan Bower Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 50eaa6505a..d4c7e5a474 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -9,7 +9,7 @@ nav_order: 105 Introduced 2.16 {: .label .label-purple } -The `fingerprint` processor is used to generate a hash value for the specified fields or all fields in a document. The hash value can be used to deduplicate documents within an index and collapse search results. +The `fingerprint` processor is used to generate a hash value for either certain specified fields or all fields in a document. The hash value can be used to deduplicate documents within an index and collapse search results. For each field, the field name, length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be`|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, then the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. From 044b82c92a6cbb1efa6fc6ae86b669a7c0ef58d4 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Tue, 9 Jul 2024 09:14:58 -0600 Subject: [PATCH 07/11] Update _ingest-pipelines/processors/fingerprint.md Co-authored-by: Nathan Bower Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index d4c7e5a474..6a6b847ecd 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -11,7 +11,7 @@ Introduced 2.16 The `fingerprint` processor is used to generate a hash value for either certain specified fields or all fields in a document. The hash value can be used to deduplicate documents within an index and collapse search results. -For each field, the field name, length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be`|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, then the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. +For each field, the field name, the length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be `|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, then the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. The following is the `fingerprint` processor syntax: From 64e9990c6547d5a7089f2282a77ed1af7ce8378f Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Tue, 9 Jul 2024 09:15:11 -0600 Subject: [PATCH 08/11] Update _ingest-pipelines/processors/fingerprint.md Co-authored-by: Nathan Bower Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 6a6b847ecd..2820a705ed 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -33,7 +33,7 @@ The following table lists the required and optional parameters for the `fingerpr Parameter | Required/Optional | Description | |-----------|-----------|-----------| `fields` | Optional | A list of fields used to generate a hash value. | -`exclude_fields` | Optional | Specifies the fields to be excluded from hash value generation. It is mutually exclusive with the `fields` parameter; if both `exclude_fields` and `fields` are empty or null, all fields are included in the hash value calculation. | +`exclude_fields` | Optional | Specifies the fields to be excluded from hash value generation. It is mutually exclusive with the `fields` parameter; if both `exclude_fields` and `fields` are empty or null, then all fields are included in the hash value calculation. | `hash_method` | Optional | Specifies the hashing algorithm to be used, with options being `MD5@2.16.0`, `SHA-1@2.16.0`, `SHA-256@2.16.0`, or `SHA3-256@2.16.0`. Default is `SHA-1@2.16.0`. The version number is appended to ensure consistent hashing across OpenSearch versions, and new versions will support new hash methods. | `target_field` | Optional | Specifies the name of the field where the generated hash value will be stored. If not provided, the hash value is stored in the `fingerprint` field by default. | `ignore_missing` | Optional | Specifies whether the processor should exit quietly if one of the required fields is missing. Default is `false`. | From 536ea132fe572c593470a6bc09115c5279b0c584 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Tue, 9 Jul 2024 09:15:19 -0600 Subject: [PATCH 09/11] Update _ingest-pipelines/processors/fingerprint.md Co-authored-by: Nathan Bower Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 2820a705ed..3e9e1a484d 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -35,7 +35,7 @@ Parameter | Required/Optional | Description | `fields` | Optional | A list of fields used to generate a hash value. | `exclude_fields` | Optional | Specifies the fields to be excluded from hash value generation. It is mutually exclusive with the `fields` parameter; if both `exclude_fields` and `fields` are empty or null, then all fields are included in the hash value calculation. | `hash_method` | Optional | Specifies the hashing algorithm to be used, with options being `MD5@2.16.0`, `SHA-1@2.16.0`, `SHA-256@2.16.0`, or `SHA3-256@2.16.0`. Default is `SHA-1@2.16.0`. The version number is appended to ensure consistent hashing across OpenSearch versions, and new versions will support new hash methods. | -`target_field` | Optional | Specifies the name of the field where the generated hash value will be stored. If not provided, the hash value is stored in the `fingerprint` field by default. | +`target_field` | Optional | Specifies the name of the field in which the generated hash value will be stored. If not provided, then the hash value is stored in the `fingerprint` field by default. | `ignore_missing` | Optional | Specifies whether the processor should exit quietly if one of the required fields is missing. Default is `false`. | `description` | Optional | A brief description of the processor. | `if` | Optional | A condition for running the processor. | From b4000a15aa82fc083c7fafa1b05e37c11cf066cc Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Tue, 9 Jul 2024 09:15:28 -0600 Subject: [PATCH 10/11] Update _ingest-pipelines/processors/fingerprint.md Co-authored-by: Nathan Bower Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/fingerprint.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/fingerprint.md b/_ingest-pipelines/processors/fingerprint.md index 3e9e1a484d..4775da98b6 100644 --- a/_ingest-pipelines/processors/fingerprint.md +++ b/_ingest-pipelines/processors/fingerprint.md @@ -13,7 +13,7 @@ The `fingerprint` processor is used to generate a hash value for either certain For each field, the field name, the length of the field value, and the field value itself are concatenated and separated by the pipe character `|`. For example, if the field name is `field1` and the value is `value1`, then the concatenated string would be `|field1|3:value1|field2|10:value2|`. For object fields, the field name is flattened by joining the nested field names with a period `.`. For instance, if the object field is `root_field` with a sub-field `sub_field1` having the value `value1` and another sub-field `sub_field2` with the value `value2`, then the concatenated string would be `|root_field.sub_field1|1:value1|root_field.sub_field2|100:value2|`. -The following is the `fingerprint` processor syntax: +The following is the syntax for the `fingerprint` processor: ```json { From fe765a765f6b5592d63e0af3800ac566aa85cbf5 Mon Sep 17 00:00:00 2001 From: Melissa Vagi Date: Tue, 9 Jul 2024 09:16:00 -0600 Subject: [PATCH 11/11] Update _ingest-pipelines/processors/index-processors.md Co-authored-by: Nathan Bower Signed-off-by: Melissa Vagi --- _ingest-pipelines/processors/index-processors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_ingest-pipelines/processors/index-processors.md b/_ingest-pipelines/processors/index-processors.md index 4360b190c1..0e1ee1e114 100644 --- a/_ingest-pipelines/processors/index-processors.md +++ b/_ingest-pipelines/processors/index-processors.md @@ -40,7 +40,7 @@ Processor type | Description `dot_expander` | Expands a field with dots into an object field. `drop` |Drops a document without indexing it or raising any errors. `fail` | Raises an exception and stops the execution of a pipeline. -`fingerprint` | Generate hash value for specified fields or all fields in a document. +`fingerprint` | Generates a hash value for either certain specified fields or all fields in a document. `foreach` | Allows for another processor to be applied to each element of an array or an object field in a document. `geoip` | Adds information about the geographical location of an IP address. `geojson-feature` | Indexes GeoJSON data into a geospatial field.