セットプロセッサ

指定された値に関連付けられたフィールドを設定します。フィールドがすでに存在する場合、その値は提供されたもので置き換えられます。


表 40. セットオプション

名前 必須 デフォルト 説明
field はい - 挿入、アップサート、または更新するフィールド。 テンプレートスニペットをサポートしています。
value はい* - フィールドに設定する値。 テンプレートスニペットをサポートしています。 valueまたはcopy_fromのいずれか一方のみを指定できます。
copy_from いいえ - fieldにコピーされる元のフィールド。valueを同時に設定することはできません。 サポートされているデータ型はbooleannumberarrayobjectstringdateなどです。
override いいえ true trueプロセッサが既存の非NULL値フィールドを更新します。falseに設定すると、そのようなフィールドは変更されません。
ignore_empty_value いいえ false truevalue(これはテンプレートスニペットnullまたは空文字列に評価される)と組み合わせて使用される場合、プロセッサはドキュメントを変更せずに静かに終了します。同様に、copy_fromと組み合わせて使用される場合、フィールドが存在しないか、その値がnullまたは空文字列に評価されると静かに終了します。
media_type いいえ application/json valueのエンコーディングのメディアタイプ。valueテンプレートスニペットである場合にのみ適用されます。application/jsontext/plain、またはapplication/x-www-form-urlencodedのいずれかでなければなりません。
description いいえ - プロセッサの説明。プロセッサの目的や構成を説明するのに役立ちます。
if いいえ - プロセッサを条件付きで実行します。 プロセッサを条件付きで実行するを参照してください。
ignore_failure いいえ false プロセッサの失敗を無視します。 パイプラインの失敗を処理するを参照してください。
on_failure いいえ - プロセッサの失敗を処理します。 パイプラインの失敗を処理するを参照してください。
tag いいえ - プロセッサの識別子。デバッグやメトリクスに役立ちます。

Js

  1. {
  2. "description" : "sets the value of count to 1",
  3. "set": {
  4. "field": "count",
  5. "value": 1
  6. }
  7. }

このプロセッサは、データを1つのフィールドから別のフィールドにコピーするためにも使用できます。例えば:

Python

  1. resp = client.ingest.put_pipeline(
  2. id="set_os",
  3. description="sets the value of host.os.name from the field os",
  4. processors=[
  5. {
  6. "set": {
  7. "field": "host.os.name",
  8. "value": "{{{os}}}"
  9. }
  10. }
  11. ],
  12. )
  13. print(resp)
  14. resp1 = client.ingest.simulate(
  15. id="set_os",
  16. docs=[
  17. {
  18. "_source": {
  19. "os": "Ubuntu"
  20. }
  21. }
  22. ],
  23. )
  24. print(resp1)

Ruby

  1. response = client.ingest.put_pipeline(
  2. id: 'set_os',
  3. body: {
  4. description: 'sets the value of host.os.name from the field os',
  5. processors: [
  6. {
  7. set: {
  8. field: 'host.os.name',
  9. value: '{{{os}}}'
  10. }
  11. }
  12. ]
  13. }
  14. )
  15. puts response
  16. response = client.ingest.simulate(
  17. id: 'set_os',
  18. body: {
  19. docs: [
  20. {
  21. _source: {
  22. os: 'Ubuntu'
  23. }
  24. }
  25. ]
  26. }
  27. )
  28. puts response

Js

  1. const response = await client.ingest.putPipeline({
  2. id: "set_os",
  3. description: "sets the value of host.os.name from the field os",
  4. processors: [
  5. {
  6. set: {
  7. field: "host.os.name",
  8. value: "{{{os}}}",
  9. },
  10. },
  11. ],
  12. });
  13. console.log(response);
  14. const response1 = await client.ingest.simulate({
  15. id: "set_os",
  16. docs: [
  17. {
  18. _source: {
  19. os: "Ubuntu",
  20. },
  21. },
  22. ],
  23. });
  24. console.log(response1);

Console

  1. PUT _ingest/pipeline/set_os
  2. {
  3. "description": "sets the value of host.os.name from the field os",
  4. "processors": [
  5. {
  6. "set": {
  7. "field": "host.os.name",
  8. "value": "{{{os}}}"
  9. }
  10. }
  11. ]
  12. }
  13. POST _ingest/pipeline/set_os/_simulate
  14. {
  15. "docs": [
  16. {
  17. "_source": {
  18. "os": "Ubuntu"
  19. }
  20. }
  21. ]
  22. }

結果:

Console-Result

  1. {
  2. "docs" : [
  3. {
  4. "doc" : {
  5. "_index" : "_index",
  6. "_id" : "_id",
  7. "_version" : "-3",
  8. "_source" : {
  9. "host" : {
  10. "os" : {
  11. "name" : "Ubuntu"
  12. }
  13. },
  14. "os" : "Ubuntu"
  15. },
  16. "_ingest" : {
  17. "timestamp" : "2019-03-11T21:54:37.909224Z"
  18. }
  19. }
  20. }
  21. ]
  22. }

このプロセッサは、ドット表記を使用して配列フィールドにアクセスすることもできます:

Python

  1. resp = client.ingest.simulate(
  2. pipeline={
  3. "processors": [
  4. {
  5. "set": {
  6. "field": "my_field",
  7. "value": "{{{input_field.1}}}"
  8. }
  9. }
  10. ]
  11. },
  12. docs=[
  13. {
  14. "_index": "index",
  15. "_id": "id",
  16. "_source": {
  17. "input_field": [
  18. "Ubuntu",
  19. "Windows",
  20. "Ventura"
  21. ]
  22. }
  23. }
  24. ],
  25. )
  26. print(resp)

Ruby

  1. response = client.ingest.simulate(
  2. body: {
  3. pipeline: {
  4. processors: [
  5. {
  6. set: {
  7. field: 'my_field',
  8. value: '{{{input_field.1}}}'
  9. }
  10. }
  11. ]
  12. },
  13. docs: [
  14. {
  15. _index: 'index',
  16. _id: 'id',
  17. _source: {
  18. input_field: [
  19. 'Ubuntu',
  20. 'Windows',
  21. 'Ventura'
  22. ]
  23. }
  24. }
  25. ]
  26. }
  27. )
  28. puts response

Js

  1. const response = await client.ingest.simulate({
  2. pipeline: {
  3. processors: [
  4. {
  5. set: {
  6. field: "my_field",
  7. value: "{{{input_field.1}}}",
  8. },
  9. },
  10. ],
  11. },
  12. docs: [
  13. {
  14. _index: "index",
  15. _id: "id",
  16. _source: {
  17. input_field: ["Ubuntu", "Windows", "Ventura"],
  18. },
  19. },
  20. ],
  21. });
  22. console.log(response);

Console

  1. POST /_ingest/pipeline/_simulate
  2. {
  3. "pipeline": {
  4. "processors": [
  5. {
  6. "set": {
  7. "field": "my_field",
  8. "value": "{{{input_field.1}}}"
  9. }
  10. }
  11. ]
  12. },
  13. "docs": [
  14. {
  15. "_index": "index",
  16. "_id": "id",
  17. "_source": {
  18. "input_field": [
  19. "Ubuntu",
  20. "Windows",
  21. "Ventura"
  22. ]
  23. }
  24. }
  25. ]
  26. }

結果:

Console-Result

  1. {
  2. "docs": [
  3. {
  4. "doc": {
  5. "_index": "index",
  6. "_id": "id",
  7. "_version": "-3",
  8. "_source": {
  9. "input_field": [
  10. "Ubuntu",
  11. "Windows",
  12. "Ventura"
  13. ],
  14. "my_field": "Windows"
  15. },
  16. "_ingest": {
  17. "timestamp": "2023-05-05T16:04:16.456475214Z"
  18. }
  19. }
  20. }
  21. ]
  22. }

配列やオブジェクトなどの複雑な値を含むフィールドの内容は、copy_fromを使用して別のフィールドにコピーできます:

Python

  1. resp = client.ingest.put_pipeline(
  2. id="set_bar",
  3. description="sets the value of bar from the field foo",
  4. processors=[
  5. {
  6. "set": {
  7. "field": "bar",
  8. "copy_from": "foo"
  9. }
  10. }
  11. ],
  12. )
  13. print(resp)
  14. resp1 = client.ingest.simulate(
  15. id="set_bar",
  16. docs=[
  17. {
  18. "_source": {
  19. "foo": [
  20. "foo1",
  21. "foo2"
  22. ]
  23. }
  24. }
  25. ],
  26. )
  27. print(resp1)

Ruby

  1. response = client.ingest.put_pipeline(
  2. id: 'set_bar',
  3. body: {
  4. description: 'sets the value of bar from the field foo',
  5. processors: [
  6. {
  7. set: {
  8. field: 'bar',
  9. copy_from: 'foo'
  10. }
  11. }
  12. ]
  13. }
  14. )
  15. puts response
  16. response = client.ingest.simulate(
  17. id: 'set_bar',
  18. body: {
  19. docs: [
  20. {
  21. _source: {
  22. foo: [
  23. 'foo1',
  24. 'foo2'
  25. ]
  26. }
  27. }
  28. ]
  29. }
  30. )
  31. puts response

Js

  1. const response = await client.ingest.putPipeline({
  2. id: "set_bar",
  3. description: "sets the value of bar from the field foo",
  4. processors: [
  5. {
  6. set: {
  7. field: "bar",
  8. copy_from: "foo",
  9. },
  10. },
  11. ],
  12. });
  13. console.log(response);
  14. const response1 = await client.ingest.simulate({
  15. id: "set_bar",
  16. docs: [
  17. {
  18. _source: {
  19. foo: ["foo1", "foo2"],
  20. },
  21. },
  22. ],
  23. });
  24. console.log(response1);

Console

  1. PUT _ingest/pipeline/set_bar
  2. {
  3. "description": "sets the value of bar from the field foo",
  4. "processors": [
  5. {
  6. "set": {
  7. "field": "bar",
  8. "copy_from": "foo"
  9. }
  10. }
  11. ]
  12. }
  13. POST _ingest/pipeline/set_bar/_simulate
  14. {
  15. "docs": [
  16. {
  17. "_source": {
  18. "foo": ["foo1", "foo2"]
  19. }
  20. }
  21. ]
  22. }

結果:

Console-Result

  1. {
  2. "docs" : [
  3. {
  4. "doc" : {
  5. "_index" : "_index",
  6. "_id" : "_id",
  7. "_version" : "-3",
  8. "_source" : {
  9. "bar": ["foo1", "foo2"],
  10. "foo": ["foo1", "foo2"]
  11. },
  12. "_ingest" : {
  13. "timestamp" : "2020-09-30T12:55:17.742795Z"
  14. }
  15. }
  16. }
  17. ]
  18. }