シミュレートインジェストAPI

提供されたドキュメントのセットに対してインジェストパイプラインを実行し、オプションで代替パイプライン定義を使用します。このAPIは、実際にデータをElasticsearchにインデックスしないため、トラブルシューティングやパイプライン開発に使用されることを意図しています。

Python

  1. resp = client.simulate.ingest(
  2. body={
  3. "docs": [
  4. {
  5. "_index": "my-index",
  6. "_id": "id",
  7. "_source": {
  8. "foo": "bar"
  9. }
  10. },
  11. {
  12. "_index": "my-index",
  13. "_id": "id",
  14. "_source": {
  15. "foo": "rab"
  16. }
  17. }
  18. ],
  19. "pipeline_substitutions": {
  20. "my-pipeline": {
  21. "processors": [
  22. {
  23. "set": {
  24. "field": "field3",
  25. "value": "value3"
  26. }
  27. }
  28. ]
  29. }
  30. }
  31. },
  32. )
  33. print(resp)

Ruby

  1. response = client.simulate.ingest(
  2. body: {
  3. docs: [
  4. {
  5. _index: 'my-index',
  6. _id: 'id',
  7. _source: {
  8. foo: 'bar'
  9. }
  10. },
  11. {
  12. _index: 'my-index',
  13. _id: 'id',
  14. _source: {
  15. foo: 'rab'
  16. }
  17. }
  18. ],
  19. pipeline_substitutions: {
  20. "my-pipeline": {
  21. processors: [
  22. {
  23. set: {
  24. field: 'field3',
  25. value: 'value3'
  26. }
  27. }
  28. ]
  29. }
  30. }
  31. }
  32. )
  33. puts response

コンソール

  1. POST /_ingest/_simulate
  2. {
  3. "docs": [
  4. {
  5. "_index": "my-index",
  6. "_id": "id",
  7. "_source": {
  8. "foo": "bar"
  9. }
  10. },
  11. {
  12. "_index": "my-index",
  13. "_id": "id",
  14. "_source": {
  15. "foo": "rab"
  16. }
  17. }
  18. ],
  19. "pipeline_substitutions": {
  20. "my-pipeline": {
  21. "processors": [
  22. {
  23. "set": {
  24. "field": "field3",
  25. "value": "value3"
  26. }
  27. }
  28. ]
  29. }
  30. }
  31. }
このリクエストの期間中、既存の my-pipeline パイプラインはここで指定された内容に置き換えられます。

リクエスト

POST /_ingest/_simulate

GET /_ingest/_simulate

POST /_ingest/<target>/_simulate

GET /_ingest/<target>/_simulate

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するには index または create インデックス権限 が必要です。

説明

シミュレートインジェストAPIは、インデックスへのデータのインジェストをシミュレートします。リクエストのボディに提供されたドキュメントのセットに対して、そのインデックスのデフォルトおよび最終パイプラインを実行します。パイプラインに リルートプロセッサ が含まれている場合、そのリルートプロセッサに従って新しいインデックスに移動し、非シミュレートインジェストと同様にそのインデックスのパイプラインを実行します。データはElasticsearchにインデックスされません。代わりに、変換されたドキュメントが返され、実行されたパイプラインのリストと、シミュレーションでなければインデックスされていたであろうインデックスの名前が返されます。これは、シミュレートパイプラインAPIとは異なり、そのAPIには単一のパイプラインを指定し、その1つのパイプラインのみを実行します。シミュレートパイプラインAPIは単一のパイプラインの開発により便利であり、シミュレートインジェストAPIはインデックスへのインジェスト時に適用されるさまざまなパイプラインの相互作用のトラブルシューティングにより便利です。

デフォルトでは、システム内に現在存在するパイプライン定義が使用されます。ただし、リクエストのボディに代替パイプライン定義を提供することもできます。これにより、システム内に既に存在するパイプライン定義を置き換えたり、新しいものを作成したりできます。パイプラインの置き換えは、このリクエスト内でのみ使用されます。

パスパラメータ

  • <target>
  • (オプション、文字列) インジェスト先のインデックス。このインデックスは、各ドキュメントでインデックスを指定することで上書きできます。リクエストパスに \ を提供すると、明示的にインデックス引数を指定していないドキュメントに使用されます。
    \u003c/target

クエリパラメータ

  • pipeline
  • (オプション、文字列) デフォルトパイプラインとして使用するパイプライン。これは、インジェスト先のインデックスのデフォルトパイプラインを上書きするために使用できます。

リクエストボディ

  • docs
  • (必須、オブジェクトの配列) パイプラインでテストするサンプルドキュメント。
    docs オブジェクトのプロパティ
    • _id
    • (オプション、文字列) ドキュメントの一意の識別子。
    • _index
    • (オプション、文字列) ドキュメントがインジェストされるインデックスの名前。
    • _source
    • (必須、オブジェクト) ドキュメントのJSONボディ。
  • pipeline_substitutions
  • (オプション、文字列からオブジェクトへのマップ) パイプラインIDから代替パイプライン定義オブジェクトへのマップ。
    パイプライン定義オブジェクトのプロパティ
    • description
    • (オプション、文字列) インジェストパイプラインの説明。
    • on_failure
    • (オプション、プロセッサオブジェクトの配列) プロセッサの失敗後にすぐに実行されるプロセッサ。
      各プロセッサはプロセッサレベルの on_failure 値をサポートします。on_failure 値のないプロセッサが失敗した場合、Elasticsearchはこのパイプラインレベルのパラメータをフォールバックとして使用します。このパラメータ内のプロセッサは、指定された順序で順次実行されます。Elasticsearchはパイプラインの残りのプロセッサを実行しようとはしません。
    • processors
    • (必須、プロセッサオブジェクトの配列) インデックス前にドキュメントに変換を行うために使用されるプロセッサ。プロセッサは指定された順序で順次実行されます。
    • version
    • (オプション、整数) 外部システムがインジェストパイプラインを追跡するために使用するバージョン番号。
      上記の if_version パラメータを参照して、バージョン属性がどのように使用されるかを確認してください。
    • _meta
    • (オプション、オブジェクト) インジェストパイプラインに関するオプションのメタデータ。任意の内容を持つことができます。このマップはElasticsearchによって自動的に生成されるものではありません。
    • deprecated
    • (オプション、ブール値) このインジェストパイプラインを非推奨としてマークします。非推奨のインジェストパイプラインが非推奨でないインデックステンプレートを作成または更新する際にデフォルトまたは最終パイプラインとして参照されると、Elasticsearchは非推奨警告を発します。

既存のパイプライン定義を使用する

この例では、インデックス indexmy-pipeline というデフォルトパイプラインと my-final-pipeline という最終パイプラインがあります。両方のドキュメントが index にインジェストされるため、両方のパイプラインがシステム内に既に存在するパイプライン定義を使用して実行されます。

Python

  1. resp = client.simulate.ingest(
  2. body={
  3. "docs": [
  4. {
  5. "_index": "my-index",
  6. "_id": "123",
  7. "_source": {
  8. "foo": "bar"
  9. }
  10. },
  11. {
  12. "_index": "my-index",
  13. "_id": "456",
  14. "_source": {
  15. "foo": "rab"
  16. }
  17. }
  18. ]
  19. },
  20. )
  21. print(resp)

Ruby

  1. response = client.simulate.ingest(
  2. body: {
  3. docs: [
  4. {
  5. _index: 'my-index',
  6. _id: '123',
  7. _source: {
  8. foo: 'bar'
  9. }
  10. },
  11. {
  12. _index: 'my-index',
  13. _id: '456',
  14. _source: {
  15. foo: 'rab'
  16. }
  17. }
  18. ]
  19. }
  20. )
  21. puts response

Js

  1. const response = await client.simulate.ingest({
  2. body: {
  3. docs: [
  4. {
  5. _index: "my-index",
  6. _id: "123",
  7. _source: {
  8. foo: "bar",
  9. },
  10. },
  11. {
  12. _index: "my-index",
  13. _id: "456",
  14. _source: {
  15. foo: "rab",
  16. },
  17. },
  18. ],
  19. },
  20. });
  21. console.log(response);

コンソール

  1. POST /_ingest/_simulate
  2. {
  3. "docs": [
  4. {
  5. "_index": "my-index",
  6. "_id": "123",
  7. "_source": {
  8. "foo": "bar"
  9. }
  10. },
  11. {
  12. "_index": "my-index",
  13. "_id": "456",
  14. "_source": {
  15. "foo": "rab"
  16. }
  17. }
  18. ]
  19. }

APIは次の応答を返します:

コンソール-結果

  1. {
  2. "docs": [
  3. {
  4. "doc": {
  5. "_id": "123",
  6. "_index": "my-index",
  7. "_version": -3,
  8. "_source": {
  9. "field1": "value1",
  10. "field2": "value2",
  11. "foo": "bar"
  12. },
  13. "executed_pipelines": [
  14. "my-pipeline",
  15. "my-final-pipeline"
  16. ]
  17. }
  18. },
  19. {
  20. "doc": {
  21. "_id": "456",
  22. "_index": "my-index",
  23. "_version": -3,
  24. "_source": {
  25. "field1": "value1",
  26. "field2": "value2",
  27. "foo": "rab"
  28. },
  29. "executed_pipelines": [
  30. "my-pipeline",
  31. "my-final-pipeline"
  32. ]
  33. }
  34. }
  35. ]
  36. }

リクエストボディにパイプラインの置き換えを指定する

この例では、インデックス indexmy-pipeline というデフォルトパイプラインと my-final-pipeline という最終パイプラインがあります。しかし、my-pipeline の代替定義が pipeline_substitutions に提供されています。代替 my-pipeline は、システム内の my-pipeline の代わりに使用され、その後、システム内に既に定義されている my-final-pipeline が実行されます。

Python

  1. resp = client.simulate.ingest(
  2. body={
  3. "docs": [
  4. {
  5. "_index": "my-index",
  6. "_id": "123",
  7. "_source": {
  8. "foo": "bar"
  9. }
  10. },
  11. {
  12. "_index": "my-index",
  13. "_id": "456",
  14. "_source": {
  15. "foo": "rab"
  16. }
  17. }
  18. ],
  19. "pipeline_substitutions": {
  20. "my-pipeline": {
  21. "processors": [
  22. {
  23. "uppercase": {
  24. "field": "foo"
  25. }
  26. }
  27. ]
  28. }
  29. }
  30. },
  31. )
  32. print(resp)

Ruby

  1. response = client.simulate.ingest(
  2. body: {
  3. docs: [
  4. {
  5. _index: 'my-index',
  6. _id: '123',
  7. _source: {
  8. foo: 'bar'
  9. }
  10. },
  11. {
  12. _index: 'my-index',
  13. _id: '456',
  14. _source: {
  15. foo: 'rab'
  16. }
  17. }
  18. ],
  19. pipeline_substitutions: {
  20. "my-pipeline": {
  21. processors: [
  22. {
  23. uppercase: {
  24. field: 'foo'
  25. }
  26. }
  27. ]
  28. }
  29. }
  30. }
  31. )
  32. puts response

Js

  1. const response = await client.simulate.ingest({
  2. body: {
  3. docs: [
  4. {
  5. _index: "my-index",
  6. _id: "123",
  7. _source: {
  8. foo: "bar",
  9. },
  10. },
  11. {
  12. _index: "my-index",
  13. _id: "456",
  14. _source: {
  15. foo: "rab",
  16. },
  17. },
  18. ],
  19. pipeline_substitutions: {
  20. "my-pipeline": {
  21. processors: [
  22. {
  23. uppercase: {
  24. field: "foo",
  25. },
  26. },
  27. ],
  28. },
  29. },
  30. },
  31. });
  32. console.log(response);

コンソール

  1. POST /_ingest/_simulate
  2. {
  3. "docs": [
  4. {
  5. "_index": "my-index",
  6. "_id": "123",
  7. "_source": {
  8. "foo": "bar"
  9. }
  10. },
  11. {
  12. "_index": "my-index",
  13. "_id": "456",
  14. "_source": {
  15. "foo": "rab"
  16. }
  17. }
  18. ],
  19. "pipeline_substitutions": {
  20. "my-pipeline": {
  21. "processors": [
  22. {
  23. "uppercase": {
  24. "field": "foo"
  25. }
  26. }
  27. ]
  28. }
  29. }
  30. }

APIは次の応答を返します:

コンソール-結果

  1. {
  2. "docs": [
  3. {
  4. "doc": {
  5. "_id": "123",
  6. "_index": "my-index",
  7. "_version": -3,
  8. "_source": {
  9. "field2": "value2",
  10. "foo": "BAR"
  11. },
  12. "executed_pipelines": [
  13. "my-pipeline",
  14. "my-final-pipeline"
  15. ]
  16. }
  17. },
  18. {
  19. "doc": {
  20. "_id": "456",
  21. "_index": "my-index",
  22. "_version": -3,
  23. "_source": {
  24. "field2": "value2",
  25. "foo": "RAB"
  26. },
  27. "executed_pipelines": [
  28. "my-pipeline",
  29. "my-final-pipeline"
  30. ]
  31. }
  32. }
  33. ]
  34. }