データフィードAPIのプレビュー

データフィードのプレビューを表示します。

リクエスト

GET _ml/datafeeds/<datafeed_id>/_preview

POST _ml/datafeeds/<datafeed_id>/_preview

GET _ml/datafeeds/_preview

POST _ml/datafeeds/_preview

前提条件

次の権限が必要です:

  • クラスター: manage_ml (machine_learning_admin ビルトインロールがこの権限を付与します)
  • データフィードに設定されたソースインデックス: read.

説明

プレビューデータフィードAPIは、データフィードからの検索結果の最初の「ページ」を返します。既存のデータフィードをプレビューするか、APIでデータフィードと異常検出ジョブの構成詳細を提供できます。プレビューは、異常検出エンジンに渡されるデータの構造を示します。

Elasticsearchのセキュリティ機能が有効になっている場合、データフィードクエリはプレビューデータフィードAPIを呼び出すユーザーの資格情報を使用してプレビューされます。データフィードが開始されると、最後に作成または更新したユーザーの役割を使用してクエリが実行されます。2つの役割のセットが異なる場合、プレビューはデータフィードが開始されたときに返す内容を正確に反映しない可能性があります。このような問題を避けるために、データフィードを作成または更新したのと同じユーザーがプレビューを行い、期待されるデータが返されることを確認する必要があります。あるいは、二次認証ヘッダーを使用して資格情報を提供します。

パスパラメータ

  • <datafeed_id>
  • (オプション、文字列) データフィードを一意に識別する数値文字列。この識別子は、小文字の英数字(a-zおよび0-9)、ハイフン、アンダースコアを含むことができます。英数字で始まり、英数字で終わる必要があります。
    <datafeed_id>をパスパラメータとして提供する場合、リクエストボディにデータフィードまたは異常検出ジョブの構成詳細を提供することはできません。

クエリパラメータ

  • end
  • (オプション、文字列) データフィードプレビューが終了すべき時刻。プレビューは提供された値の最後まで行かない場合があります。最初のページの結果のみが返されます。時刻は次の形式のいずれかを使用して指定できます:
    • ミリ秒を含むISO 8601形式、例えば 2017-01-22T06:00:00.000Z
    • ミリ秒を含まないISO 8601形式、例えば 2017-01-22T06:00:00+00:00
    • エポックからのミリ秒、例えば 1485061200000
      ISO 8601形式のいずれかを使用する日付時刻引数には、タイムゾーン指定子が必要で、ZはUTC時間の略称として受け入れられます。
      URLが期待される場合(例えば、ブラウザで)、タイムゾーン指定子で使用される+%2Bとしてエンコードする必要があります。
      この値は排他的です。
  • start
  • (オプション、文字列) データフィードプレビューが開始すべき時刻。これはendパラメータと同じ形式を使用して指定できます。この値は包括的です。

startまたはendパラメータのいずれかを提供しない場合、データフィードプレビューはデータの全期間を検索しますが、coldまたはfrozen データティア内のデータは除外します。

リクエストボディ

  • datafeed_config
  • (オプション、オブジェクト) プレビューするデータフィード定義。有効な定義については、データフィード作成APIを参照してください。
  • job_config
  • (オプション、オブジェクト) データフィードに関連付けられた異常検出ジョブの構成詳細。datafeed_configオブジェクトに既存の異常検出ジョブを参照するjob_idが含まれていない場合、このjob_configオブジェクトを提供する必要があります。job_idjob_configの両方を含める場合、後者の情報が使用されます。job_configオブジェクトを指定することはできませんが、datafeed_configオブジェクトも提供する必要があります。有効な定義については、異常検出ジョブ作成APIを参照してください。

これは、既存のデータフィードのIDを提供する例です:

Python

  1. resp = client.ml.preview_datafeed(
  2. datafeed_id="datafeed-high_sum_total_sales",
  3. )
  4. print(resp)

Ruby

  1. response = client.ml.preview_datafeed(
  2. datafeed_id: 'datafeed-high_sum_total_sales'
  3. )
  4. puts response

Js

  1. const response = await client.ml.previewDatafeed({
  2. datafeed_id: "datafeed-high_sum_total_sales",
  3. });
  4. console.log(response);

コンソール

  1. GET _ml/datafeeds/datafeed-high_sum_total_sales/_preview

この例で返されるデータは次のとおりです:

コンソール-結果

  1. [
  2. {
  3. "order_date" : 1574294659000,
  4. "category.keyword" : "Men's Clothing",
  5. "customer_full_name.keyword" : "Sultan Al Benson",
  6. "taxful_total_price" : 35.96875
  7. },
  8. {
  9. "order_date" : 1574294918000,
  10. "category.keyword" : [
  11. "Women's Accessories",
  12. "Women's Clothing"
  13. ],
  14. "customer_full_name.keyword" : "Pia Webb",
  15. "taxful_total_price" : 83.0
  16. },
  17. {
  18. "order_date" : 1574295782000,
  19. "category.keyword" : [
  20. "Women's Accessories",
  21. "Women's Shoes"
  22. ],
  23. "customer_full_name.keyword" : "Brigitte Graham",
  24. "taxful_total_price" : 72.0
  25. }
  26. ]

次の例は、APIでデータフィードと異常検出ジョブの構成詳細を提供します:

Python

  1. resp = client.ml.preview_datafeed(
  2. datafeed_config={
  3. "indices": [
  4. "kibana_sample_data_ecommerce"
  5. ],
  6. "query": {
  7. "bool": {
  8. "filter": [
  9. {
  10. "term": {
  11. "_index": "kibana_sample_data_ecommerce"
  12. }
  13. }
  14. ]
  15. }
  16. },
  17. "scroll_size": 1000
  18. },
  19. job_config={
  20. "description": "Find customers spending an unusually high amount in an hour",
  21. "analysis_config": {
  22. "bucket_span": "1h",
  23. "detectors": [
  24. {
  25. "detector_description": "High total sales",
  26. "function": "high_sum",
  27. "field_name": "taxful_total_price",
  28. "over_field_name": "customer_full_name.keyword"
  29. }
  30. ],
  31. "influencers": [
  32. "customer_full_name.keyword",
  33. "category.keyword"
  34. ]
  35. },
  36. "analysis_limits": {
  37. "model_memory_limit": "10mb"
  38. },
  39. "data_description": {
  40. "time_field": "order_date",
  41. "time_format": "epoch_ms"
  42. }
  43. },
  44. )
  45. print(resp)

Ruby

  1. response = client.ml.preview_datafeed(
  2. body: {
  3. datafeed_config: {
  4. indices: [
  5. 'kibana_sample_data_ecommerce'
  6. ],
  7. query: {
  8. bool: {
  9. filter: [
  10. {
  11. term: {
  12. _index: 'kibana_sample_data_ecommerce'
  13. }
  14. }
  15. ]
  16. }
  17. },
  18. scroll_size: 1000
  19. },
  20. job_config: {
  21. description: 'Find customers spending an unusually high amount in an hour',
  22. analysis_config: {
  23. bucket_span: '1h',
  24. detectors: [
  25. {
  26. detector_description: 'High total sales',
  27. function: 'high_sum',
  28. field_name: 'taxful_total_price',
  29. over_field_name: 'customer_full_name.keyword'
  30. }
  31. ],
  32. influencers: [
  33. 'customer_full_name.keyword',
  34. 'category.keyword'
  35. ]
  36. },
  37. analysis_limits: {
  38. model_memory_limit: '10mb'
  39. },
  40. data_description: {
  41. time_field: 'order_date',
  42. time_format: 'epoch_ms'
  43. }
  44. }
  45. }
  46. )
  47. puts response

Js

  1. const response = await client.ml.previewDatafeed({
  2. datafeed_config: {
  3. indices: ["kibana_sample_data_ecommerce"],
  4. query: {
  5. bool: {
  6. filter: [
  7. {
  8. term: {
  9. _index: "kibana_sample_data_ecommerce",
  10. },
  11. },
  12. ],
  13. },
  14. },
  15. scroll_size: 1000,
  16. },
  17. job_config: {
  18. description: "Find customers spending an unusually high amount in an hour",
  19. analysis_config: {
  20. bucket_span: "1h",
  21. detectors: [
  22. {
  23. detector_description: "High total sales",
  24. function: "high_sum",
  25. field_name: "taxful_total_price",
  26. over_field_name: "customer_full_name.keyword",
  27. },
  28. ],
  29. influencers: ["customer_full_name.keyword", "category.keyword"],
  30. },
  31. analysis_limits: {
  32. model_memory_limit: "10mb",
  33. },
  34. data_description: {
  35. time_field: "order_date",
  36. time_format: "epoch_ms",
  37. },
  38. },
  39. });
  40. console.log(response);

コンソール

  1. POST _ml/datafeeds/_preview
  2. {
  3. "datafeed_config": {
  4. "indices" : [
  5. "kibana_sample_data_ecommerce"
  6. ],
  7. "query" : {
  8. "bool" : {
  9. "filter" : [
  10. {
  11. "term" : {
  12. "_index" : "kibana_sample_data_ecommerce"
  13. }
  14. }
  15. ]
  16. }
  17. },
  18. "scroll_size" : 1000
  19. },
  20. "job_config": {
  21. "description" : "Find customers spending an unusually high amount in an hour",
  22. "analysis_config" : {
  23. "bucket_span" : "1h",
  24. "detectors" : [
  25. {
  26. "detector_description" : "High total sales",
  27. "function" : "high_sum",
  28. "field_name" : "taxful_total_price",
  29. "over_field_name" : "customer_full_name.keyword"
  30. }
  31. ],
  32. "influencers" : [
  33. "customer_full_name.keyword",
  34. "category.keyword"
  35. ]
  36. },
  37. "analysis_limits" : {
  38. "model_memory_limit" : "10mb"
  39. },
  40. "data_description" : {
  41. "time_field" : "order_date",
  42. "time_format" : "epoch_ms"
  43. }
  44. }
  45. }

この例で返されるデータは次のとおりです:

コンソール-結果

  1. [
  2. {
  3. "order_date" : 1574294659000,
  4. "category.keyword" : "Men's Clothing",
  5. "customer_full_name.keyword" : "Sultan Al Benson",
  6. "taxful_total_price" : 35.96875
  7. },
  8. {
  9. "order_date" : 1574294918000,
  10. "category.keyword" : [
  11. "Women's Accessories",
  12. "Women's Clothing"
  13. ],
  14. "customer_full_name.keyword" : "Pia Webb",
  15. "taxful_total_price" : 83.0
  16. },
  17. {
  18. "order_date" : 1574295782000,
  19. "category.keyword" : [
  20. "Women's Accessories",
  21. "Women's Shoes"
  22. ],
  23. "customer_full_name.keyword" : "Brigitte Graham",
  24. "taxful_total_price" : 72.0
  25. }
  26. ]