テキスト構造APIの検索

テキストの構造を見つけます。テキストには、Elastic Stackに取り込むのに適したデータが含まれている必要があります。

リクエスト

POST _text_structure/find_structure

前提条件

  • Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するにはmonitor_text_structureまたはmonitorのクラスター権限が必要です。詳細はセキュリティ権限を参照してください。

説明

このAPIは、Elasticsearchにデータを取り込むための出発点を提供し、他のElastic Stack機能での後続の使用に適した形式です。

他のElasticsearchエンドポイントとは異なり、このエンドポイントに投稿されるデータはUTF-8エンコードされている必要はなく、JSON形式である必要もありません。ただし、テキストである必要があります。バイナリテキスト形式は現在サポートされていません。

APIからの応答には次の情報が含まれます:

  • テキストの最初の数行からのメッセージ。
  • テキスト内で検出されたすべてのフィールドの最も一般的な値を示す統計と、数値フィールドの基本的な数値統計。
  • テキストの構造に関する情報。これは、インデックス作成のための取り込み構成を書くときや、同様の形式のテキストを書くときに役立ちます。
  • テキストを取り込むために使用できるElasticsearchインデックスの適切なマッピング。

このすべての情報は、構造ファインダーによってガイダンスなしで計算できます。ただし、1つ以上のクエリパラメータを指定することで、テキスト構造に関するいくつかの決定をオーバーライドすることができます。

出力の詳細はで確認できます。

構造ファインダーが一部のテキストに対して予期しない結果を生成した場合は、explainクエリパラメータを指定してください。これにより、応答にexplanationが表示され、返された構造が選択された理由を特定するのに役立ちます。

クエリパラメータ

  • charset
  • (オプション、文字列) テキストの文字セット。Elasticsearchが使用するJVMによってサポートされている文字セットである必要があります。たとえば、UTF-8UTF-16LEwindows-1252、またはEUC-JPです。このパラメータが指定されていない場合、構造ファインダーは適切な文字セットを選択します。
  • column_names
  • (オプション、文字列) formatdelimitedに設定した場合、カンマ区切りのリストで列名を指定できます。このパラメータが指定されていない場合、構造ファインダーはテキストのヘッダ行から列名を使用します。テキストにヘッダ行がない場合、列は「column1」、「column2」、「column3」などと名付けられます。
  • delimiter
  • (オプション、文字列) formatdelimitedに設定した場合、各行の値を区切るために使用される文字を指定できます。サポートされるのは単一の文字のみで、区切り文字は複数の文字を持つことはできません。デフォルトでは、APIは次の可能性を考慮します:カンマ、タブ、セミコロン、およびパイプ(|)。このデフォルトのシナリオでは、すべての行は区切られた形式を検出するために同じ数のフィールドを持っている必要があります。区切り文字を指定した場合、最初の行とは異なる列数を持つ行は最大10%まで許可されます。
  • explain
  • (オプション、ブール値) trueの場合、応答にはexplanationというフィールドが含まれ、これは構造ファインダーが結果を生成した方法を示す文字列の配列です。デフォルト値はfalseです。
  • format
  • (オプション、文字列) テキストの高レベルの構造。有効な値はndjsonxmldelimited、およびsemi_structured_textです。デフォルトでは、APIは形式を選択します。このデフォルトのシナリオでは、すべての行は区切られた形式を検出するために同じ数のフィールドを持っている必要があります。ただし、formatdelimitedに設定され、delimiterが設定されていない場合、APIは最初の行とは異なる列数を持つ行を最大5%まで許容します。
  • grok_pattern
  • (オプション、文字列) formatsemi_structured_textに設定した場合、テキスト内の各メッセージからフィールドを抽出するために使用されるGrokパターンを指定できます。Grokパターン内のタイムスタンプフィールドの名前は、timestamp_fieldパラメータで指定されたものと一致する必要があります。このパラメータが指定されていない場合、Grokパターン内のタイムスタンプフィールドの名前は「timestamp」と一致する必要があります。grok_patternが指定されていない場合、構造ファインダーはGrokパターンを作成します。
  • ecs_compatibility
  • (オプション、文字列) ECS準拠のGrokパターンとの互換性のモード。このパラメータを使用して、構造ファインダーがGrokパターンを作成する際に、レガシーのものではなくECS Grokパターンを使用するかどうかを指定します。有効な値はdisabledv1です。デフォルト値はdisabledです。この設定は、%{CATALINALOG}のような全メッセージGrokパターンが入力に一致する場合に主に影響します。構造ファインダーが一般的な構造を特定するが意味を理解していない場合、pathipaddressfield1、およびfield2のような一般的なフィールド名がgrok_pattern出力に使用され、意味を知っているユーザーがこれらのフィールドの名前を変更して使用することを意図しています。
  • has_header_row
  • (オプション、ブール値) formatdelimitedに設定した場合、テキストの最初の行に列名があるかどうかを示すためにこのパラメータを使用できます。このパラメータが指定されていない場合、構造ファインダーはテキストの最初の行と他の行の類似性に基づいて推測します。
  • line_merge_size_limit
  • (オプション、符号なし整数) 半構造化テキストを分析する際に、行がメッセージを形成するためにマージされるときのメッセージ内の最大文字数。デフォルトは10000です。非常に長いメッセージがある場合は、これを増やす必要があるかもしれませんが、行をメッセージにグループ化する方法が誤って検出されると、非常に長い処理時間がかかる可能性があることに注意してください。
  • lines_to_sample
  • (オプション、符号なし整数) テキストの最初から構造分析に含める行の数。最小は2で、デフォルトは1000です。このパラメータの値がテキストの行数を超える場合、分析は(テキストに少なくとも2行がある限り)すべての行に対して進行します。
    行数と行の変動は分析の速度に影響します。たとえば、最初の1000行がすべて同じメッセージのバリエーションであるテキストをアップロードすると、分析はより多くの共通性を見つけますが、より大きなサンプルでは見られないでしょう。ただし、可能であれば、最初の1000行により多くのバリエーションがあるサンプルテキストをアップロードする方が、100000行の分析を要求してバリエーションを得るよりも効率的です。
  • quote
  • (オプション、文字列) formatdelimitedに設定した場合、各行の値に改行や区切り文字が含まれている場合に、それらを引用するために使用される文字を指定できます。サポートされるのは単一の文字のみです。このパラメータが指定されていない場合、デフォルト値は二重引用符(")です。区切り文字を使用しない形式のテキストでは、サンプル内に出現しない文字にこの引数を設定することで回避策を講じることができます。
  • should_trim_fields
  • (オプション、ブール値) formatdelimitedに設定した場合、区切り文字の間の値から空白を削除するかどうかを指定できます。このパラメータが指定されていない場合、区切り文字がパイプ(|)の場合、デフォルト値はtrueです。それ以外の場合、デフォルト値はfalseです。
  • timeout
  • (オプション、時間単位) 構造分析にかかる最大時間を設定します。タイムアウトが切れると分析がまだ実行中の場合、分析は停止されます。デフォルト値は25秒です。
  • timestamp_field
  • (オプション、文字列) テキスト内の各レコードの主要なタイムスタンプを含むフィールドの名前。特に、テキストがインデックスに取り込まれた場合、これは@timestampフィールドを埋めるために使用されるフィールドです。
    formatsemi_structured_textの場合、このフィールドはgrok_patternで適切な抽出の名前と一致する必要があります。したがって、半構造化テキストの場合、grok_patternが指定されていない限り、このパラメータを指定しない方が良いです。
    構造化テキストの場合、このパラメータを指定した場合、フィールドはテキスト内に存在する必要があります。
    このパラメータが指定されていない場合、構造ファインダーは主要なタイムスタンプフィールドがどれかを決定します。構造化テキストの場合、テキストにタイムスタンプがあることは必須ではありません。
  • timestamp_format
  • (オプション、文字列) テキスト内のタイムスタンプフィールドのJava時間形式。
    サポートされているのはJava時間形式の文字グループのサブセットのみです:
    • a
    • d
    • dd
    • EEE
    • EEEE
    • H
    • HH
    • h
    • M
    • MM
    • MMM
    • MMMM
    • mm
    • ss
    • XX
    • XXX
    • yy
    • yyyy
    • zzz
      さらに、Sの文字グループ(小数秒)の長さが1から9のものが、ssの後に発生し、ssから.,または:で区切られている場合にサポートされます。スペースと句読点も許可されますが、?、改行、キャリッジリターン、およびシングルクォートで囲まれたリテラルテキストは除外されます。たとえば、MM/dd HH.mm.ss,SSSSSS 'in' yyyyは有効なオーバーライド形式です。
      このパラメータの貴重な使用例は、形式が半構造化テキストで、テキスト内に複数のタイムスタンプ形式があり、主要なタイムスタンプに対応する形式がわかっているが、完全なgrok_patternを指定したくない場合です。もう1つは、タイムスタンプ形式が構造ファインダーがデフォルトで考慮しないものである場合です。
      このパラメータが指定されていない場合、構造ファインダーは組み込みのセットから最適な形式を選択します。
      特別な値nullが指定されている場合、構造ファインダーはテキスト内で主要なタイムスタンプを探しません。形式が半構造化テキストの場合、これは構造ファインダーがテキストを単一行メッセージとして扱う結果になります。
      次の表は、いくつかの例のタイムスタンプに対する適切なtimeformat値を提供します:
      | 時間形式 | 表示 |
      | :— | :— |
      | yyyy-MM-dd HH:mm:ssZ | 2019-04-20 13:15:22+0000 |
      | EEE, d MMM yyyy HH:mm:ss Z | Sat, 20 Apr 2019 13:15:22 +0000 |
      | dd.MM.yy HH:mm:ss.SSS | 20.04.19 13:15:22.285 |
      日付と時間の形式構文に関する詳細は、Java日付/時間形式のドキュメントを参照してください。

リクエストボディ

分析したいテキスト。Elasticsearchに取り込むのに適したデータが含まれている必要があります。JSON形式である必要はなく、UTF-8エンコードである必要もありません。サイズは、デフォルトで100MBのElasticsearch HTTP受信バッファサイズに制限されています。

改行区切りJSONの取り込み

改行区切りのJSONテキストにいくつかの本に関する情報が含まれているとします。内容をfind_structureエンドポイントに送信できます:

Python

  1. resp = client.text_structure.find_structure(
  2. text_files=[
  3. {
  4. "name": "Leviathan Wakes",
  5. "author": "James S.A. Corey",
  6. "release_date": "2011-06-02",
  7. "page_count": 561
  8. },
  9. {
  10. "name": "Hyperion",
  11. "author": "Dan Simmons",
  12. "release_date": "1989-05-26",
  13. "page_count": 482
  14. },
  15. {
  16. "name": "Dune",
  17. "author": "Frank Herbert",
  18. "release_date": "1965-06-01",
  19. "page_count": 604
  20. },
  21. {
  22. "name": "Dune Messiah",
  23. "author": "Frank Herbert",
  24. "release_date": "1969-10-15",
  25. "page_count": 331
  26. },
  27. {
  28. "name": "Children of Dune",
  29. "author": "Frank Herbert",
  30. "release_date": "1976-04-21",
  31. "page_count": 408
  32. },
  33. {
  34. "name": "God Emperor of Dune",
  35. "author": "Frank Herbert",
  36. "release_date": "1981-05-28",
  37. "page_count": 454
  38. },
  39. {
  40. "name": "Consider Phlebas",
  41. "author": "Iain M. Banks",
  42. "release_date": "1987-04-23",
  43. "page_count": 471
  44. },
  45. {
  46. "name": "Pandora's Star",
  47. "author": "Peter F. Hamilton",
  48. "release_date": "2004-03-02",
  49. "page_count": 768
  50. },
  51. {
  52. "name": "Revelation Space",
  53. "author": "Alastair Reynolds",
  54. "release_date": "2000-03-15",
  55. "page_count": 585
  56. },
  57. {
  58. "name": "A Fire Upon the Deep",
  59. "author": "Vernor Vinge",
  60. "release_date": "1992-06-01",
  61. "page_count": 613
  62. },
  63. {
  64. "name": "Ender's Game",
  65. "author": "Orson Scott Card",
  66. "release_date": "1985-06-01",
  67. "page_count": 324
  68. },
  69. {
  70. "name": "1984",
  71. "author": "George Orwell",
  72. "release_date": "1985-06-01",
  73. "page_count": 328
  74. },
  75. {
  76. "name": "Fahrenheit 451",
  77. "author": "Ray Bradbury",
  78. "release_date": "1953-10-15",
  79. "page_count": 227
  80. },
  81. {
  82. "name": "Brave New World",
  83. "author": "Aldous Huxley",
  84. "release_date": "1932-06-01",
  85. "page_count": 268
  86. },
  87. {
  88. "name": "Foundation",
  89. "author": "Isaac Asimov",
  90. "release_date": "1951-06-01",
  91. "page_count": 224
  92. },
  93. {
  94. "name": "The Giver",
  95. "author": "Lois Lowry",
  96. "release_date": "1993-04-26",
  97. "page_count": 208
  98. },
  99. {
  100. "name": "Slaughterhouse-Five",
  101. "author": "Kurt Vonnegut",
  102. "release_date": "1969-06-01",
  103. "page_count": 275
  104. },
  105. {
  106. "name": "The Hitchhiker's Guide to the Galaxy",
  107. "author": "Douglas Adams",
  108. "release_date": "1979-10-12",
  109. "page_count": 180
  110. },
  111. {
  112. "name": "Snow Crash",
  113. "author": "Neal Stephenson",
  114. "release_date": "1992-06-01",
  115. "page_count": 470
  116. },
  117. {
  118. "name": "Neuromancer",
  119. "author": "William Gibson",
  120. "release_date": "1984-07-01",
  121. "page_count": 271
  122. },
  123. {
  124. "name": "The Handmaid's Tale",
  125. "author": "Margaret Atwood",
  126. "release_date": "1985-06-01",
  127. "page_count": 311
  128. },
  129. {
  130. "name": "Starship Troopers",
  131. "author": "Robert A. Heinlein",
  132. "release_date": "1959-12-01",
  133. "page_count": 335
  134. },
  135. {
  136. "name": "The Left Hand of Darkness",
  137. "author": "Ursula K. Le Guin",
  138. "release_date": "1969-06-01",
  139. "page_count": 304
  140. },
  141. {
  142. "name": "The Moon is a Harsh Mistress",
  143. "author": "Robert A. Heinlein",
  144. "release_date": "1966-04-01",
  145. "page_count": 288
  146. }
  147. ],
  148. )
  149. print(resp)

Ruby

  1. response = client.text_structure.find_structure(
  2. body: [
  3. {
  4. name: 'Leviathan Wakes',
  5. author: 'James S.A. Corey',
  6. release_date: '2011-06-02',
  7. page_count: 561
  8. },
  9. {
  10. name: 'Hyperion',
  11. author: 'Dan Simmons',
  12. release_date: '1989-05-26',
  13. page_count: 482
  14. },
  15. {
  16. name: 'Dune',
  17. author: 'Frank Herbert',
  18. release_date: '1965-06-01',
  19. page_count: 604
  20. },
  21. {
  22. name: 'Dune Messiah',
  23. author: 'Frank Herbert',
  24. release_date: '1969-10-15',
  25. page_count: 331
  26. },
  27. {
  28. name: 'Children of Dune',
  29. author: 'Frank Herbert',
  30. release_date: '1976-04-21',
  31. page_count: 408
  32. },
  33. {
  34. name: 'God Emperor of Dune',
  35. author: 'Frank Herbert',
  36. release_date: '1981-05-28',
  37. page_count: 454
  38. },
  39. {
  40. name: 'Consider Phlebas',
  41. author: 'Iain M. Banks',
  42. release_date: '1987-04-23',
  43. page_count: 471
  44. },
  45. {
  46. name: "Pandora's Star",
  47. author: 'Peter F. Hamilton',
  48. release_date: '2004-03-02',
  49. page_count: 768
  50. },
  51. {
  52. name: 'Revelation Space',
  53. author: 'Alastair Reynolds',
  54. release_date: '2000-03-15',
  55. page_count: 585
  56. },
  57. {
  58. name: 'A Fire Upon the Deep',
  59. author: 'Vernor Vinge',
  60. release_date: '1992-06-01',
  61. page_count: 613
  62. },
  63. {
  64. name: "Ender's Game",
  65. author: 'Orson Scott Card',
  66. release_date: '1985-06-01',
  67. page_count: 324
  68. },
  69. {
  70. name: '1984',
  71. author: 'George Orwell',
  72. release_date: '1985-06-01',
  73. page_count: 328
  74. },
  75. {
  76. name: 'Fahrenheit 451',
  77. author: 'Ray Bradbury',
  78. release_date: '1953-10-15',
  79. page_count: 227
  80. },
  81. {
  82. name: 'Brave New World',
  83. author: 'Aldous Huxley',
  84. release_date: '1932-06-01',
  85. page_count: 268
  86. },
  87. {
  88. name: 'Foundation',
  89. author: 'Isaac Asimov',
  90. release_date: '1951-06-01',
  91. page_count: 224
  92. },
  93. {
  94. name: 'The Giver',
  95. author: 'Lois Lowry',
  96. release_date: '1993-04-26',
  97. page_count: 208
  98. },
  99. {
  100. name: 'Slaughterhouse-Five',
  101. author: 'Kurt Vonnegut',
  102. release_date: '1969-06-01',
  103. page_count: 275
  104. },
  105. {
  106. name: "The Hitchhiker's Guide to the Galaxy",
  107. author: 'Douglas Adams',
  108. release_date: '1979-10-12',
  109. page_count: 180
  110. },
  111. {
  112. name: 'Snow Crash',
  113. author: 'Neal Stephenson',
  114. release_date: '1992-06-01',
  115. page_count: 470
  116. },
  117. {
  118. name: 'Neuromancer',
  119. author: 'William Gibson',
  120. release_date: '1984-07-01',
  121. page_count: 271
  122. },
  123. {
  124. name: "The Handmaid's Tale",
  125. author: 'Margaret Atwood',
  126. release_date: '1985-06-01',
  127. page_count: 311
  128. },
  129. {
  130. name: 'Starship Troopers',
  131. author: 'Robert A. Heinlein',
  132. release_date: '1959-12-01',
  133. page_count: 335
  134. },
  135. {
  136. name: 'The Left Hand of Darkness',
  137. author: 'Ursula K. Le Guin',
  138. release_date: '1969-06-01',
  139. page_count: 304
  140. },
  141. {
  142. name: 'The Moon is a Harsh Mistress',
  143. author: 'Robert A. Heinlein',
  144. release_date: '1966-04-01',
  145. page_count: 288
  146. }
  147. ]
  148. )
  149. puts response

Js

  1. const response = await client.textStructure.findStructure({
  2. text_files: [
  3. {
  4. name: "Leviathan Wakes",
  5. author: "James S.A. Corey",
  6. release_date: "2011-06-02",
  7. page_count: 561,
  8. },
  9. {
  10. name: "Hyperion",
  11. author: "Dan Simmons",
  12. release_date: "1989-05-26",
  13. page_count: 482,
  14. },
  15. {
  16. name: "Dune",
  17. author: "Frank Herbert",
  18. release_date: "1965-06-01",
  19. page_count: 604,
  20. },
  21. {
  22. name: "Dune Messiah",
  23. author: "Frank Herbert",
  24. release_date: "1969-10-15",
  25. page_count: 331,
  26. },
  27. {
  28. name: "Children of Dune",
  29. author: "Frank Herbert",
  30. release_date: "1976-04-21",
  31. page_count: 408,
  32. },
  33. {
  34. name: "God Emperor of Dune",
  35. author: "Frank Herbert",
  36. release_date: "1981-05-28",
  37. page_count: 454,
  38. },
  39. {
  40. name: "Consider Phlebas",
  41. author: "Iain M. Banks",
  42. release_date: "1987-04-23",
  43. page_count: 471,
  44. },
  45. {
  46. name: "Pandora's Star",
  47. author: "Peter F. Hamilton",
  48. release_date: "2004-03-02",
  49. page_count: 768,
  50. },
  51. {
  52. name: "Revelation Space",
  53. author: "Alastair Reynolds",
  54. release_date: "2000-03-15",
  55. page_count: 585,
  56. },
  57. {
  58. name: "A Fire Upon the Deep",
  59. author: "Vernor Vinge",
  60. release_date: "1992-06-01",
  61. page_count: 613,
  62. },
  63. {
  64. name: "Ender's Game",
  65. author: "Orson Scott Card",
  66. release_date: "1985-06-01",
  67. page_count: 324,
  68. },
  69. {
  70. name: "1984",
  71. author: "George Orwell",
  72. release_date: "1985-06-01",
  73. page_count: 328,
  74. },
  75. {
  76. name: "Fahrenheit 451",
  77. author: "Ray Bradbury",
  78. release_date: "1953-10-15",
  79. page_count: 227,
  80. },
  81. {
  82. name: "Brave New World",
  83. author: "Aldous Huxley",
  84. release_date: "1932-06-01",
  85. page_count: 268,
  86. },
  87. {
  88. name: "Foundation",
  89. author: "Isaac Asimov",
  90. release_date: "1951-06-01",
  91. page_count: 224,
  92. },
  93. {
  94. name: "The Giver",
  95. author: "Lois Lowry",
  96. release_date: "1993-04-26",
  97. page_count: 208,
  98. },
  99. {
  100. name: "Slaughterhouse-Five",
  101. author: "Kurt Vonnegut",
  102. release_date: "1969-06-01",
  103. page_count: 275,
  104. },
  105. {
  106. name: "The Hitchhiker's Guide to the Galaxy",
  107. author: "Douglas Adams",
  108. release_date: "1979-10-12",
  109. page_count: 180,
  110. },
  111. {
  112. name: "Snow Crash",
  113. author: "Neal Stephenson",
  114. release_date: "1992-06-01",
  115. page_count: 470,
  116. },
  117. {
  118. name: "Neuromancer",
  119. author: "William Gibson",
  120. release_date: "1984-07-01",
  121. page_count: 271,
  122. },
  123. {
  124. name: "The Handmaid's Tale",
  125. author: "Margaret Atwood",
  126. release_date: "1985-06-01",
  127. page_count: 311,
  128. },
  129. {
  130. name: "Starship Troopers",
  131. author: "Robert A. Heinlein",
  132. release_date: "1959-12-01",
  133. page_count: 335,
  134. },
  135. {
  136. name: "The Left Hand of Darkness",
  137. author: "Ursula K. Le Guin",
  138. release_date: "1969-06-01",
  139. page_count: 304,
  140. },
  141. {
  142. name: "The Moon is a Harsh Mistress",
  143. author: "Robert A. Heinlein",
  144. release_date: "1966-04-01",
  145. page_count: 288,
  146. },
  147. ],
  148. });
  149. console.log(response);

コンソール

  1. POST _text_structure/find_structure
  2. {"name": "Leviathan Wakes", "author": "James S.A. Corey", "release_date": "2011-06-02", "page_count": 561}
  3. {"name": "Hyperion", "author": "Dan Simmons", "release_date": "1989-05-26", "page_count": 482}
  4. {"name": "Dune", "author": "Frank Herbert", "release_date": "1965-06-01", "page_count": 604}
  5. {"name": "Dune Messiah", "author": "Frank Herbert", "release_date": "1969-10-15", "page_count": 331}
  6. {"name": "Children of Dune", "author": "Frank Herbert", "release_date": "1976-04-21", "page_count": 408}
  7. {"name": "God Emperor of Dune", "author": "Frank Herbert", "release_date": "1981-05-28", "page_count": 454}
  8. {"name": "Consider Phlebas", "author": "Iain M. Banks", "release_date": "1987-04-23", "page_count": 471}
  9. {"name": "Pandora's Star", "author": "Peter F. Hamilton", "release_date": "2004-03-02", "page_count": 768}
  10. {"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
  11. {"name": "A Fire Upon the Deep", "author": "Vernor Vinge", "release_date": "1992-06-01", "page_count": 613}
  12. {"name": "Ender's Game", "author": "Orson Scott Card", "release_date": "1985-06-01", "page_count": 324}
  13. {"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
  14. {"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
  15. {"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
  16. {"name": "Foundation", "author": "Isaac Asimov", "release_date": "1951-06-01", "page_count": 224}
  17. {"name": "The Giver", "author": "Lois Lowry", "release_date": "1993-04-26", "page_count": 208}
  18. {"name": "Slaughterhouse-Five", "author": "Kurt Vonnegut", "release_date": "1969-06-01", "page_count": 275}
  19. {"name": "The Hitchhiker's Guide to the Galaxy", "author": "Douglas Adams", "release_date": "1979-10-12", "page_count": 180}
  20. {"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470}
  21. {"name": "Neuromancer", "author": "William Gibson", "release_date": "1984-07-01", "page_count": 271}
  22. {"name": "The Handmaid's Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}
  23. {"name": "Starship Troopers", "author": "Robert A. Heinlein", "release_date": "1959-12-01", "page_count": 335}
  24. {"name": "The Left Hand of Darkness", "author": "Ursula K. Le Guin", "release_date": "1969-06-01", "page_count": 304}
  25. {"name": "The Moon is a Harsh Mistress", "author": "Robert A. Heinlein", "release_date": "1966-04-01", "page_count": 288}

リクエストにエラーが発生しなければ、次の結果が得られます:

コンソール-結果

  1. {
  2. "num_lines_analyzed" : 24,
  3. "num_messages_analyzed" : 24,
  4. "sample_start" : "{\"name\": \"Leviathan Wakes\", \"author\": \"James S.A. Corey\", \"release_date\": \"2011-06-02\", \"page_count\": 561}\n{\"name\": \"Hyperion\", \"author\": \"Dan Simmons\", \"release_date\": \"1989-05-26\", \"page_count\": 482}\n",
  5. "charset" : "UTF-8",
  6. "has_byte_order_marker" : false,
  7. "format" : "ndjson",
  8. "ecs_compatibility" : "disabled",
  9. "timestamp_field" : "release_date",
  10. "joda_timestamp_formats" : [
  11. "ISO8601"
  12. ],
  13. "java_timestamp_formats" : [
  14. "ISO8601"
  15. ],
  16. "need_client_timezone" : true,
  17. "mappings" : {
  18. "properties" : {
  19. "@timestamp" : {
  20. "type" : "date"
  21. },
  22. "author" : {
  23. "type" : "keyword"
  24. },
  25. "name" : {
  26. "type" : "keyword"
  27. },
  28. "page_count" : {
  29. "type" : "long"
  30. },
  31. "release_date" : {
  32. "type" : "date",
  33. "format" : "iso8601"
  34. }
  35. }
  36. },
  37. "ingest_pipeline" : {
  38. "description" : "Ingest pipeline created by text structure finder",
  39. "processors" : [
  40. {
  41. "date" : {
  42. "field" : "release_date",
  43. "timezone" : "{{ event.timezone }}",
  44. "formats" : [
  45. "ISO8601"
  46. ]
  47. }
  48. }
  49. ]
  50. },
  51. "field_stats" : {
  52. "author" : {
  53. "count" : 24,
  54. "cardinality" : 20,
  55. "top_hits" : [
  56. {
  57. "value" : "Frank Herbert",
  58. "count" : 4
  59. },
  60. {
  61. "value" : "Robert A. Heinlein",
  62. "count" : 2
  63. },
  64. {
  65. "value" : "Alastair Reynolds",
  66. "count" : 1
  67. },
  68. {
  69. "value" : "Aldous Huxley",
  70. "count" : 1
  71. },
  72. {
  73. "value" : "Dan Simmons",
  74. "count" : 1
  75. },
  76. {
  77. "value" : "Douglas Adams",
  78. "count" : 1
  79. },
  80. {
  81. "value" : "George Orwell",
  82. "count" : 1
  83. },
  84. {
  85. "value" : "Iain M. Banks",
  86. "count" : 1
  87. },
  88. {
  89. "value" : "Isaac Asimov",
  90. "count" : 1
  91. },
  92. {
  93. "value" : "James S.A. Corey",
  94. "count" : 1
  95. }
  96. ]
  97. },
  98. "name" : {
  99. "count" : 24,
  100. "cardinality" : 24,
  101. "top_hits" : [
  102. {
  103. "value" : "1984",
  104. "count" : 1
  105. },
  106. {
  107. "value" : "A Fire Upon the Deep",
  108. "count" : 1
  109. },
  110. {
  111. "value" : "Brave New World",
  112. "count" : 1
  113. },
  114. {
  115. "value" : "Children of Dune",
  116. "count" : 1
  117. },
  118. {
  119. "value" : "Consider Phlebas",
  120. "count" : 1
  121. },
  122. {
  123. "value" : "Dune",
  124. "count" : 1
  125. },
  126. {
  127. "value" : "Dune Messiah",
  128. "count" : 1
  129. },
  130. {
  131. "value" : "Ender's Game",
  132. "count" : 1
  133. },
  134. {
  135. "value" : "Fahrenheit 451",
  136. "count" : 1
  137. },
  138. {
  139. "value" : "Foundation",
  140. "count" : 1
  141. }
  142. ]
  143. },
  144. "page_count" : {
  145. "count" : 24,
  146. "cardinality" : 24,
  147. "min_value" : 180,
  148. "max_value" : 768,
  149. "mean_value" : 387.0833333333333,
  150. "median_value" : 329.5,
  151. "top_hits" : [
  152. {
  153. "value" : 180,
  154. "count" : 1
  155. },
  156. {
  157. "value" : 208,
  158. "count" : 1
  159. },
  160. {
  161. "value" : 224,
  162. "count" : 1
  163. },
  164. {
  165. "value" : 227,
  166. "count" : 1
  167. },
  168. {
  169. "value" : 268,
  170. "count" : 1
  171. },
  172. {
  173. "value" : 271,
  174. "count" : 1
  175. },
  176. {
  177. "value" : 275,
  178. "count" : 1
  179. },
  180. {
  181. "value" : 288,
  182. "count" : 1
  183. },
  184. {
  185. "value" : 304,
  186. "count" : 1
  187. },
  188. {
  189. "value" : 311,
  190. "count" : 1
  191. }
  192. ]
  193. },
  194. "release_date" : {
  195. "count" : 24,
  196. "cardinality" : 20,
  197. "earliest" : "1932-06-01",
  198. "latest" : "2011-06-02",
  199. "top_hits" : [
  200. {
  201. "value" : "1985-06-01",
  202. "count" : 3
  203. },
  204. {
  205. "value" : "1969-06-01",
  206. "count" : 2
  207. },
  208. {
  209. "value" : "1992-06-01",
  210. "count" : 2
  211. },
  212. {
  213. "value" : "1932-06-01",
  214. "count" : 1
  215. },
  216. {
  217. "value" : "1951-06-01",
  218. "count" : 1
  219. },
  220. {
  221. "value" : "1953-10-15",
  222. "count" : 1
  223. },
  224. {
  225. "value" : "1959-12-01",
  226. "count" : 1
  227. },
  228. {
  229. "value" : "1965-06-01",
  230. "count" : 1
  231. },
  232. {
  233. "value" : "1966-04-01",
  234. "count" : 1
  235. },
  236. {
  237. "value" : "1969-10-15",
  238. "count" : 1
  239. }
  240. ]
  241. }
  242. }
  243. }
num_lines_analyzedは、分析されたテキストの行数を示します。
num_messages_analyzedは、行に含まれる異なるメッセージの数を示します。NDJSONの場合、この値はnum_lines_analyzedと同じです。他のテキスト形式では、メッセージが複数行にまたがることがあります。
sample_startは、テキストの最初の2つのメッセージをそのまま再現します。これは、解析エラーや誤って間違ったテキストをアップロードした場合の診断に役立ちます。
charsetは、テキストを解析するために使用された文字エンコーディングを示します。
UTF文字エンコーディングの場合、has_byte_order_markerは、テキストがバイトオーダーマーカーで始まるかどうかを示します。
formatは、ndjsonxmldelimited、またはsemi_structured_textのいずれかです。
ecs_compatibilitydisabledまたはv1のいずれかで、デフォルトはdisabledです。
timestamp_fieldは、各ドキュメントの主要なタイムスタンプと見なされるフィールドの名前です。
joda_timestamp_formatsは、Logstashにタイムスタンプを解析する方法を伝えるために使用されます。
java_timestamp_formatsは、時間フィールドで認識されるJava時間形式です。Elasticsearchのマッピングと取り込みパイプラインはこの形式を使用します。
タイムスタンプ形式が検出され、タイムゾーンが含まれていない場合、need_client_timezonetrueになります。テキストを解析するサーバーは、クライアントによって正しいタイムゾーンを指定される必要があります。
mappingsは、データを取り込むことができるインデックスのための適切なマッピングを含みます。この場合、release_dateフィールドは、keyword型として与えられています。これは、date型に変換するには特定の情報が不十分と見なされます。
field_statsは、各フィールドの最も一般的な値と、数値page_countフィールドの基本的な数値統計を含みます。この情報は、データが他のElastic Stack機能で使用される前にクリーンアップまたは変換する必要があることを示す手がかりを提供するかもしれません。

NYCイエローキャブの例データの構造を見つける

次の例は、ニューヨーク市のイエローキャブのトリップデータの構造を見つける方法を示しています。最初のcurlコマンドはデータをダウンロードし、その最初の20000行がfind_structureエンドポイントにパイプされます。エンドポイントのlines_to_sampleクエリパラメータは、headコマンドで指定されたものと一致するように20000に設定されています。

Js

  1. curl -s "s3.amazonaws.com/nyc-tlc/trip+data/yellow_tripdata_2018-06.csv" | head -20000 | curl -s -H "Content-Type: application/json" -XPOST "localhost:9200/_text_structure/find_structure?pretty&lines_to_sample=20000" -T -

Content-Type: application/jsonヘッダーは、データがJSONでない場合でも設定する必要があります。(代わりに、Content-TypeをElasticsearchがサポートする他の形式に設定できますが、設定する必要があります。)

リクエストにエラーが発生しなければ、次の結果が得られます:

Js

  1. {
  2. "num_lines_analyzed" : 20000,
  3. "num_messages_analyzed" : 19998,
  4. "sample_start" : "VendorID,tpep_pickup_datetime,tpep_dropoff_datetime,passenger_count,trip_distance,RatecodeID,store_and_fwd_flag,PULocationID,DOLocationID,payment_type,fare_amount,extra,mta_tax,tip_amount,tolls_amount,improvement_surcharge,total_amount\n\n1,2018-06-01 00:15:40,2018-06-01 00:16:46,1,.00,1,N,145,145,2,3,0.5,0.5,0,0,0.3,4.3\n",
  5. "charset" : "UTF-8",
  6. "has_byte_order_marker" : false,
  7. "format" : "delimited",
  8. "multiline_start_pattern" : "^.*?,\"?\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}",
  9. "exclude_lines_pattern" : "^\"?VendorID\"?,\"?tpep_pickup_datetime\"?,\"?tpep_dropoff_datetime\"?,\"?passenger_count\"?,\"?trip_distance\"?,\"?RatecodeID\"?,\"?store_and_fwd_flag\"?,\"?PULocationID\"?,\"?DOLocationID\"?,\"?payment_type\"?,\"?fare_amount\"?,\"?extra\"?,\"?mta_tax\"?,\"?tip_amount\"?,\"?tolls_amount\"?,\"?improvement_surcharge\"?,\"?total_amount\"?",
  10. "column_names" : [
  11. "VendorID",
  12. "tpep_pickup_datetime",
  13. "tpep_dropoff_datetime",
  14. "passenger_count",
  15. "trip_distance",
  16. "RatecodeID",
  17. "store_and_fwd_flag",
  18. "PULocationID",
  19. "DOLocationID",
  20. "payment_type",
  21. "fare_amount",
  22. "extra",
  23. "mta_tax",
  24. "tip_amount",
  25. "tolls_amount",
  26. "improvement_surcharge",
  27. "total_amount"
  28. ],
  29. "has_header_row" : true,
  30. "delimiter" : ",",
  31. "quote" : "\"",
  32. "timestamp_field" : "tpep_pickup_datetime",
  33. "joda_timestamp_formats" : [
  34. "YYYY-MM-dd HH:mm:ss"
  35. ],
  36. "java_timestamp_formats" : [
  37. "yyyy-MM-dd HH:mm:ss"
  38. ],
  39. "need_client_timezone" : true,
  40. "mappings" : {
  41. "properties" : {
  42. "@timestamp" : {
  43. "type" : "date"
  44. },
  45. "DOLocationID" : {
  46. "type" : "long"
  47. },
  48. "PULocationID" : {
  49. "type" : "long"
  50. },
  51. "RatecodeID" : {
  52. "type" : "long"
  53. },
  54. "VendorID" : {
  55. "type" : "long"
  56. },
  57. "extra" : {
  58. "type" : "double"
  59. },
  60. "fare_amount" : {
  61. "type" : "double"
  62. },
  63. "improvement_surcharge" : {
  64. "type" : "double"
  65. },
  66. "mta_tax" : {
  67. "type" : "double"
  68. },
  69. "passenger_count" : {
  70. "type" : "long"
  71. },
  72. "payment_type" : {
  73. "type" : "long"
  74. },
  75. "store_and_fwd_flag" : {
  76. "type" : "keyword"
  77. },
  78. "tip_amount" : {
  79. "type" : "double"
  80. },
  81. "tolls_amount" : {
  82. "type" : "double"
  83. },
  84. "total_amount" : {
  85. "type" : "double"
  86. },
  87. "tpep_dropoff_datetime" : {
  88. "type" : "date",
  89. "format" : "yyyy-MM-dd HH:mm:ss"
  90. },
  91. "tpep_pickup_datetime" : {
  92. "type" : "date",
  93. "format" : "yyyy-MM-dd HH:mm:ss"
  94. },
  95. "trip_distance" : {
  96. "type" : "double"
  97. }
  98. }
  99. },
  100. "ingest_pipeline" : {
  101. "description" : "Ingest pipeline created by text structure finder",
  102. "processors" : [
  103. {
  104. "csv" : {
  105. "field" : "message",
  106. "target_fields" : [
  107. "VendorID",
  108. "tpep_pickup_datetime",
  109. "tpep_dropoff_datetime",
  110. "passenger_count",
  111. "trip_distance",
  112. "RatecodeID",
  113. "store_and_fwd_flag",
  114. "PULocationID",
  115. "DOLocationID",
  116. "payment_type",
  117. "fare_amount",
  118. "extra",
  119. "mta_tax",
  120. "tip_amount",
  121. "tolls_amount",
  122. "improvement_surcharge",
  123. "total_amount"
  124. ]
  125. }
  126. },
  127. {
  128. "date" : {
  129. "field" : "tpep_pickup_datetime",
  130. "timezone" : "{{ event.timezone }}",
  131. "formats" : [
  132. "yyyy-MM-dd HH:mm:ss"
  133. ]
  134. }
  135. },
  136. {
  137. "convert" : {
  138. "field" : "DOLocationID",
  139. "type" : "long"
  140. }
  141. },
  142. {
  143. "convert" : {
  144. "field" : "PULocationID",
  145. "type" : "long"
  146. }
  147. },
  148. {
  149. "convert" : {
  150. "field" : "RatecodeID",
  151. "type" : "long"
  152. }
  153. },
  154. {
  155. "convert" : {
  156. "field" : "VendorID",
  157. "type" : "long"
  158. }
  159. },
  160. {
  161. "convert" : {
  162. "field" : "extra",
  163. "type" : "double"
  164. }
  165. },
  166. {
  167. "convert" : {
  168. "field" : "fare_amount",
  169. "type" : "double"
  170. }
  171. },
  172. {
  173. "convert" : {
  174. "field" : "improvement_surcharge",
  175. "type" : "double"
  176. }
  177. },
  178. {
  179. "convert" : {
  180. "field" : "mta_tax",
  181. "type" : "double"
  182. }
  183. },
  184. {
  185. "convert" : {
  186. "field" : "passenger_count",
  187. "type" : "long"
  188. }
  189. },
  190. {
  191. "convert" : {
  192. "field" : "payment_type",
  193. "type" : "long"
  194. }
  195. },
  196. {
  197. "convert" : {
  198. "field" : "tip_amount",
  199. "type" : "double"
  200. }
  201. },
  202. {
  203. "convert" : {
  204. "field" : "tolls_amount",
  205. "type" : "double"
  206. }
  207. },
  208. {
  209. "convert" : {
  210. "field" : "total_amount",
  211. "type" : "double"
  212. }
  213. },
  214. {
  215. "convert" : {
  216. "field" : "trip_distance",
  217. "type" : "double"
  218. }
  219. },
  220. {
  221. "remove" : {
  222. "field" : "message"
  223. }
  224. }
  225. ]
  226. },
  227. "field_stats" : {
  228. "DOLocationID" : {
  229. "count" : 19998,
  230. "cardinality" : 240,
  231. "min_value" : 1,
  232. "max_value" : 265,
  233. "mean_value" : 150.26532653265312,
  234. "median_value" : 148,
  235. "top_hits" : [
  236. {
  237. "value" : 79,
  238. "count" : 760
  239. },
  240. {
  241. "value" : 48,
  242. "count" : 683
  243. },
  244. {
  245. "value" : 68,
  246. "count" : 529
  247. },
  248. {
  249. "value" : 170,
  250. "count" : 506
  251. },
  252. {
  253. "value" : 107,
  254. "count" : 468
  255. },
  256. {
  257. "value" : 249,
  258. "count" : 457
  259. },
  260. {
  261. "value" : 230,
  262. "count" : 441
  263. },
  264. {
  265. "value" : 186,
  266. "count" : 432
  267. },
  268. {
  269. "value" : 141,
  270. "count" : 409
  271. },
  272. {
  273. "value" : 263,
  274. "count" : 386
  275. }
  276. ]
  277. },
  278. "PULocationID" : {
  279. "count" : 19998,
  280. "cardinality" : 154,
  281. "min_value" : 1,
  282. "max_value" : 265,
  283. "mean_value" : 153.4042404240424,
  284. "median_value" : 148,
  285. "top_hits" : [
  286. {
  287. "value" : 79,
  288. "count" : 1067
  289. },
  290. {
  291. "value" : 230,
  292. "count" : 949
  293. },
  294. {
  295. "value" : 148,
  296. "count" : 940
  297. },
  298. {
  299. "value" : 132,
  300. "count" : 897
  301. },
  302. {
  303. "value" : 48,
  304. "count" : 853
  305. },
  306. {
  307. "value" : 161,
  308. "count" : 820
  309. },
  310. {
  311. "value" : 234,
  312. "count" : 750
  313. },
  314. {
  315. "value" : 249,
  316. "count" : 722
  317. },
  318. {
  319. "value" : 164,
  320. "count" : 663
  321. },
  322. {
  323. "value" : 114,
  324. "count" : 646
  325. }
  326. ]
  327. },
  328. "RatecodeID" : {
  329. "count" : 19998,
  330. "cardinality" : 5,
  331. "min_value" : 1,
  332. "max_value" : 5,
  333. "mean_value" : 1.0656565656565653,
  334. "median_value" : 1,
  335. "top_hits" : [
  336. {
  337. "value" : 1,
  338. "count" : 19311
  339. },
  340. {
  341. "value" : 2,
  342. "count" : 468
  343. },
  344. {
  345. "value" : 5,
  346. "count" : 195
  347. },
  348. {
  349. "value" : 4,
  350. "count" : 17
  351. },
  352. {
  353. "value" : 3,
  354. "count" : 7
  355. }
  356. ]
  357. },
  358. "VendorID" : {
  359. "count" : 19998,
  360. "cardinality" : 2,
  361. "min_value" : 1,
  362. "max_value" : 2,
  363. "mean_value" : 1.59005900590059,
  364. "median_value" : 2,
  365. "top_hits" : [
  366. {
  367. "value" : 2,
  368. "count" : 11800
  369. },
  370. {
  371. "value" : 1,
  372. "count" : 8198
  373. }
  374. ]
  375. },
  376. "extra" : {
  377. "count" : 19998,
  378. "cardinality" : 3,
  379. "min_value" : -0.5,
  380. "max_value" : 0.5,
  381. "mean_value" : 0.4815981598159816,
  382. "median_value" : 0.5,
  383. "top_hits" : [
  384. {
  385. "value" : 0.5,
  386. "count" : 19281
  387. },
  388. {
  389. "value" : 0,
  390. "count" : 698
  391. },
  392. {
  393. "value" : -0.5,
  394. "count" : 19
  395. }
  396. ]
  397. },
  398. "fare_amount" : {
  399. "count" : 19998,
  400. "cardinality" : 208,
  401. "min_value" : -100,
  402. "max_value" : 300,
  403. "mean_value" : 13.937719771977209,
  404. "median_value" : 9.5,
  405. "top_hits" : [
  406. {
  407. "value" : 6,
  408. "count" : 1004
  409. },
  410. {
  411. "value" : 6.5,
  412. "count" : 935
  413. },
  414. {
  415. "value" : 5.5,
  416. "count" : 909
  417. },
  418. {
  419. "value" : 7,
  420. "count" : 903
  421. },
  422. {
  423. "value" : 5,
  424. "count" : 889
  425. },
  426. {
  427. "value" : 7.5,
  428. "count" : 854
  429. },
  430. {
  431. "value" : 4.5,
  432. "count" : 802
  433. },
  434. {
  435. "value" : 8.5,
  436. "count" : 790
  437. },
  438. {
  439. "value" : 8,
  440. "count" : 789
  441. },
  442. {
  443. "value" : 9,
  444. "count" : 711
  445. }
  446. ]
  447. },
  448. "improvement_surcharge" : {
  449. "count" : 19998,
  450. "cardinality" : 3,
  451. "min_value" : -0.3,
  452. "max_value" : 0.3,
  453. "mean_value" : 0.29915991599159913,
  454. "median_value" : 0.3,
  455. "top_hits" : [
  456. {
  457. "value" : 0.3,
  458. "count" : 19964
  459. },
  460. {
  461. "value" : -0.3,
  462. "count" : 22
  463. },
  464. {
  465. "value" : 0,
  466. "count" : 12
  467. }
  468. ]
  469. },
  470. "mta_tax" : {
  471. "count" : 19998,
  472. "cardinality" : 3,
  473. "min_value" : -0.5,
  474. "max_value" : 0.5,
  475. "mean_value" : 0.4962246224622462,
  476. "median_value" : 0.5,
  477. "top_hits" : [
  478. {
  479. "value" : 0.5,
  480. "count" : 19868
  481. },
  482. {
  483. "value" : 0,
  484. "count" : 109
  485. },
  486. {
  487. "value" : -0.5,
  488. "count" : 21
  489. }
  490. ]
  491. },
  492. "passenger_count" : {
  493. "count" : 19998,
  494. "cardinality" : 7,
  495. "min_value" : 0,
  496. "max_value" : 6,
  497. "mean_value" : 1.6201620162016201,
  498. "median_value" : 1,
  499. "top_hits" : [
  500. {
  501. "value" : 1,
  502. "count" : 14219
  503. },
  504. {
  505. "value" : 2,
  506. "count" : 2886
  507. },
  508. {
  509. "value" : 5,
  510. "count" : 1047
  511. },
  512. {
  513. "value" : 3,
  514. "count" : 804
  515. },
  516. {
  517. "value" : 6,
  518. "count" : 523
  519. },
  520. {
  521. "value" : 4,
  522. "count" : 406
  523. },
  524. {
  525. "value" : 0,
  526. "count" : 113
  527. }
  528. ]
  529. },
  530. "payment_type" : {
  531. "count" : 19998,
  532. "cardinality" : 4,
  533. "min_value" : 1,
  534. "max_value" : 4,
  535. "mean_value" : 1.315631563156316,
  536. "median_value" : 1,
  537. "top_hits" : [
  538. {
  539. "value" : 1,
  540. "count" : 13936
  541. },
  542. {
  543. "value" : 2,
  544. "count" : 5857
  545. },
  546. {
  547. "value" : 3,
  548. "count" : 160
  549. },
  550. {
  551. "value" : 4,
  552. "count" : 45
  553. }
  554. ]
  555. },
  556. "store_and_fwd_flag" : {
  557. "count" : 19998,
  558. "cardinality" : 2,
  559. "top_hits" : [
  560. {
  561. "value" : "N",
  562. "count" : 19910
  563. },
  564. {
  565. "value" : "Y",
  566. "count" : 88
  567. }
  568. ]
  569. },
  570. "tip_amount" : {
  571. "count" : 19998,
  572. "cardinality" : 717,
  573. "min_value" : 0,
  574. "max_value" : 128,
  575. "mean_value" : 2.010959095909593,
  576. "median_value" : 1.45,
  577. "top_hits" : [
  578. {
  579. "value" : 0,
  580. "count" : 6917
  581. },
  582. {
  583. "value" : 1,
  584. "count" : 1178
  585. },
  586. {
  587. "value" : 2,
  588. "count" : 624
  589. },
  590. {
  591. "value" : 3,
  592. "count" : 248
  593. },
  594. {
  595. "value" : 1.56,
  596. "count" : 206
  597. },
  598. {
  599. "value" : 1.46,
  600. "count" : 205
  601. },
  602. {
  603. "value" : 1.76,
  604. "count" : 196
  605. },
  606. {
  607. "value" : 1.45,
  608. "count" : 195
  609. },
  610. {
  611. "value" : 1.36,
  612. "count" : 191
  613. },
  614. {
  615. "value" : 1.5,
  616. "count" : 187
  617. }
  618. ]
  619. },
  620. "tolls_amount" : {
  621. "count" : 19998,
  622. "cardinality" : 26,
  623. "min_value" : 0,
  624. "max_value" : 35,
  625. "mean_value" : 0.2729697969796978,
  626. "median_value" : 0,
  627. "top_hits" : [
  628. {
  629. "value" : 0,
  630. "count" : 19107
  631. },
  632. {
  633. "value" : 5.76,
  634. "count" : 791
  635. },
  636. {
  637. "value" : 10.5,
  638. "count" : 36
  639. },
  640. {
  641. "value" : 2.64,
  642. "count" : 21
  643. },
  644. {
  645. "value" : 11.52,
  646. "count" : 8
  647. },
  648. {
  649. "value" : 5.54,
  650. "count" : 4
  651. },
  652. {
  653. "value" : 8.5,
  654. "count" : 4
  655. },
  656. {
  657. "value" : 17.28,
  658. "count" : 4
  659. },
  660. {
  661. "value" : 2,
  662. "count" : 2
  663. },
  664. {
  665. "value" : 2.16,
  666. "count" : 2
  667. }
  668. ]
  669. },
  670. "total_amount" : {
  671. "count" : 19998,
  672. "cardinality" : 1267,
  673. "min_value" : -100.3,
  674. "max_value" : 389.12,
  675. "mean_value" : 17.499898989898995,
  676. "median_value" : 12.35,
  677. "top_hits" : [
  678. {
  679. "value" : 7.3,
  680. "count" : 478
  681. },
  682. {
  683. "value" : 8.3,
  684. "count" : 443
  685. },
  686. {
  687. "value" : 8.8,
  688. "count" : 420
  689. },
  690. {
  691. "value" : 6.8,
  692. "count" : 406
  693. },
  694. {
  695. "value" : 7.8,
  696. "count" : 405
  697. },
  698. {
  699. "value" : 6.3,
  700. "count" : 371
  701. },
  702. {
  703. "value" : 9.8,
  704. "count" : 368
  705. },
  706. {
  707. "value" : 5.8,
  708. "count" : 362
  709. },
  710. {
  711. "value" : 9.3,
  712. "count" : 332
  713. },
  714. {
  715. "value" : 10.3,
  716. "count" : 332
  717. }
  718. ]
  719. },
  720. "tpep_dropoff_datetime" : {
  721. "count" : 19998,
  722. "cardinality" : 9066,
  723. "earliest" : "2018-05-31 06:18:15",
  724. "latest" : "2018-06-02 02:25:44",
  725. "top_hits" : [
  726. {
  727. "value" : "2018-06-01 01:12:12",
  728. "count" : 10
  729. },
  730. {
  731. "value" : "2018-06-01 00:32:15",
  732. "count" : 9
  733. },
  734. {
  735. "value" : "2018-06-01 00:44:27",
  736. "count" : 9
  737. },
  738. {
  739. "value" : "2018-06-01 00:46:42",
  740. "count" : 9
  741. },
  742. {
  743. "value" : "2018-06-01 01:03:22",
  744. "count" : 9
  745. },
  746. {
  747. "value" : "2018-06-01 01:05:13",
  748. "count" : 9
  749. },
  750. {
  751. "value" : "2018-06-01 00:11:20",
  752. "count" : 8
  753. },
  754. {
  755. "value" : "2018-06-01 00:16:03",
  756. "count" : 8
  757. },
  758. {
  759. "value" : "2018-06-01 00:19:47",
  760. "count" : 8
  761. },
  762. {
  763. "value" : "2018-06-01 00:25:17",
  764. "count" : 8
  765. }
  766. ]
  767. },
  768. "tpep_pickup_datetime" : {
  769. "count" : 19998,
  770. "cardinality" : 8760,
  771. "earliest" : "2018-05-31 06:08:31",
  772. "latest" : "2018-06-02 01:21:21",
  773. "top_hits" : [
  774. {
  775. "value" : "2018-06-01 00:01:23",
  776. "count" : 12
  777. },
  778. {
  779. "value" : "2018-06-01 00:04:31",
  780. "count" : 10
  781. },
  782. {
  783. "value" : "2018-06-01 00:05:38",
  784. "count" : 10
  785. },
  786. {
  787. "value" : "2018-06-01 00:09:50",
  788. "count" : 10
  789. },
  790. {
  791. "value" : "2018-06-01 00:12:01",
  792. "count" : 10
  793. },
  794. {
  795. "value" : "2018-06-01 00:14:17",
  796. "count" : 10
  797. },
  798. {
  799. "value" : "2018-06-01 00:00:34",
  800. "count" : 9
  801. },
  802. {
  803. "value" : "2018-06-01 00:00:40",
  804. "count" : 9
  805. },
  806. {
  807. "value" : "2018-06-01 00:02:53",
  808. "count" : 9
  809. },
  810. {
  811. "value" : "2018-06-01 00:05:40",
  812. "count" : 9
  813. }
  814. ]
  815. },
  816. "trip_distance" : {
  817. "count" : 19998,
  818. "cardinality" : 1687,
  819. "min_value" : 0,
  820. "max_value" : 64.63,
  821. "mean_value" : 3.6521062106210715,
  822. "median_value" : 2.16,
  823. "top_hits" : [
  824. {
  825. "value" : 0.9,
  826. "count" : 335
  827. },
  828. {
  829. "value" : 0.8,
  830. "count" : 320
  831. },
  832. {
  833. "value" : 1.1,
  834. "count" : 316
  835. },
  836. {
  837. "value" : 0.7,
  838. "count" : 304
  839. },
  840. {
  841. "value" : 1.2,
  842. "count" : 303
  843. },
  844. {
  845. "value" : 1,
  846. "count" : 296
  847. },
  848. {
  849. "value" : 1.3,
  850. "count" : 280
  851. },
  852. {
  853. "value" : 1.5,
  854. "count" : 268
  855. },
  856. {
  857. "value" : 1.6,
  858. "count" : 268
  859. },
  860. {
  861. "value" : 0.6,
  862. "count" : 256
  863. }
  864. ]
  865. }
  866. }
  867. }
num_messages_analyzednum_lines_analyzedより2行少ないです。なぜなら、データレコードのみがメッセージとしてカウントされるからです。最初の行には列名が含まれており、このサンプルでは2行目は空白です。
最初の例とは異なり、この場合formatdelimitedとして特定されています。
formatdelimitedであるため、出力のcolumn_namesフィールドには、サンプルに表示される順序で列名がリストされています。
has_header_rowは、このサンプルの列名がサンプルの最初の行にあったことを示しています。(もしそうでなければ、column_namesクエリパラメータで指定するのが良いアイデアです。)
このサンプルのdelimiterはカンマで、CSV形式のテキストです。
quote文字はデフォルトの二重引用符です。(構造ファインダーは他の引用文字を推測しようとしないため、他の文字で引用された区切りテキストがある場合は、quoteクエリパラメータを使用して指定する必要があります。)
timestamp_fieldtpep_pickup_datetimeとして選択されました。tpep_dropoff_datetimeも同様に機能しますが、tpep_pickup_datetimeが列の順序で最初に来るため選択されました。tpep_dropoff_datetimeを好む場合は、timestamp_fieldクエリパラメータを使用して強制的に選択できます。
joda_timestamp_formatsは、Logstashにタイムスタンプを解析する方法を伝えるために使用されます。
java_timestamp_formatsは、時間フィールドで認識されるJava時間形式です。Elasticsearchのマッピングと取り込みパイプラインはこの形式を使用します。
このサンプルのタイムスタンプ形式はタイムゾーンを指定していないため、Elasticsearchに保存するためにUTCタイムスタンプに正確に変換するには、関連するタイムゾーンを提供する必要があります。need_client_timezoneは、タイムゾーンを含むタイムスタンプ形式に対してfalseになります。

タイムアウトパラメータの設定

大量のデータを分析しようとすると、分析に時間がかかります。リクエストに対してElasticsearchクラスターが実行する処理の量を制限したい場合は、timeoutクエリパラメータを使用します。タイムアウトが切れると分析は中止され、エラーが返されます。たとえば、前の例の20000行を200000行に置き換え、分析に1秒のタイムアウトを設定できます:

Js

  1. curl -s "s3.amazonaws.com/nyc-tlc/trip+data/yellow_tripdata_2018-06.csv" | head -200000 | curl -s -H "Content-Type: application/json" -XPOST "localhost:9200/_text_structure/find_structure?pretty&lines_to_sample=200000&timeout=1s" -T -

非常に高速なコンピュータを使用していない限り、タイムアウトエラーが発生します:

Js

  1. {
  2. "error" : {
  3. "root_cause" : [
  4. {
  5. "type" : "timeout_exception",
  6. "reason" : "Aborting structure analysis during [delimited record parsing] as it has taken longer than the timeout of [1s]"
  7. }
  8. ],
  9. "type" : "timeout_exception",
  10. "reason" : "Aborting structure analysis during [delimited record parsing] as it has taken longer than the timeout of [1s]"
  11. },
  12. "status" : 500
  13. }

上記の例を自分で試すと、curlコマンドの全体的な実行時間が1秒よりかなり長いことに気付くでしょう。これは、200000行のCSVをインターネットからダウンロードするのに時間がかかり、タイムアウトはこのエンドポイントがデータの処理を開始した時点から測定されるためです。

Elasticsearchログファイルの分析

これは、Elasticsearchログファイルを分析する例です:

Js

  1. curl -s -H "Content-Type: application/json" -XPOST
  2. "localhost:9200/_text_structure/find_structure?pretty&ecs_compatibility=disabled" -T "$ES_HOME/logs/elasticsearch.log"

リクエストにエラーが発生しなければ、結果は次のようになります:

Js

  1. {
  2. "num_lines_analyzed" : 53,
  3. "num_messages_analyzed" : 53,
  4. "sample_start" : "[2018-09-27T14:39:28,518][INFO ][o.e.e.NodeEnvironment ] [node-0] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [165.4gb], net total_space [464.7gb], types [hfs]\n[2018-09-27T14:39:28,521][INFO ][o.e.e.NodeEnvironment ] [node-0] heap size [494.9mb], compressed ordinary object pointers [true]\n",
  5. "charset" : "UTF-8",
  6. "has_byte_order_marker" : false,
  7. "format" : "semi_structured_text",
  8. "multiline_start_pattern" : "^\\[\\b\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}",
  9. "grok_pattern" : "\\[%{TIMESTAMP_ISO8601:timestamp}\\]\\[%{LOGLEVEL:loglevel}.*",
  10. "ecs_compatibility" : "disabled",
  11. "timestamp_field" : "timestamp",
  12. "joda_timestamp_formats" : [
  13. "ISO8601"
  14. ],
  15. "java_timestamp_formats" : [
  16. "ISO8601"
  17. ],
  18. "need_client_timezone" : true,
  19. "mappings" : {
  20. "properties" : {
  21. "@timestamp" : {
  22. "type" : "date"
  23. },
  24. "loglevel" : {
  25. "type" : "keyword"
  26. },
  27. "message" : {
  28. "type" : "text"
  29. }
  30. }
  31. },
  32. "ingest_pipeline" : {
  33. "description" : "Ingest pipeline created by text structure finder",
  34. "processors" : [
  35. {
  36. "grok" : {
  37. "field" : "message",
  38. "patterns" : [
  39. "\\[%{TIMESTAMP_ISO8601:timestamp}\\]\\[%{LOGLEVEL:loglevel}.*"
  40. ]
  41. }
  42. },
  43. {
  44. "date" : {
  45. "field" : "timestamp",
  46. "timezone" : "{{ event.timezone }}",
  47. "formats" : [
  48. "ISO8601"
  49. ]
  50. }
  51. },
  52. {
  53. "remove" : {
  54. "field" : "timestamp"
  55. }
  56. }
  57. ]
  58. },
  59. "field_stats" : {
  60. "loglevel" : {
  61. "count" : 53,
  62. "cardinality" : 3,
  63. "top_hits" : [
  64. {
  65. "value" : "INFO",
  66. "count" : 51
  67. },
  68. {
  69. "value" : "DEBUG",
  70. "count" : 1
  71. },
  72. {
  73. "value" : "WARN",
  74. "count" : 1
  75. }
  76. ]
  77. },
  78. "timestamp" : {
  79. "count" : 53,
  80. "cardinality" : 28,
  81. "earliest" : "2018-09-27T14:39:28,518",
  82. "latest" : "2018-09-27T14:39:37,012",
  83. "top_hits" : [
  84. {
  85. "value" : "2018-09-27T14:39:29,859",
  86. "count" : 10
  87. },
  88. {
  89. "value" : "2018-09-27T14:39:29,860",
  90. "count" : 9
  91. },
  92. {
  93. "value" : "2018-09-27T14:39:29,858",
  94. "count" : 6
  95. },
  96. {
  97. "value" : "2018-09-27T14:39:28,523",
  98. "count" : 3
  99. },
  100. {
  101. "value" : "2018-09-27T14:39:34,234",
  102. "count" : 2
  103. },
  104. {
  105. "value" : "2018-09-27T14:39:28,518",
  106. "count" : 1
  107. },
  108. {
  109. "value" : "2018-09-27T14:39:28,521",
  110. "count" : 1
  111. },
  112. {
  113. "value" : "2018-09-27T14:39:28,522",
  114. "count" : 1
  115. },
  116. {
  117. "value" : "2018-09-27T14:39:29,861",
  118. "count" : 1
  119. },
  120. {
  121. "value" : "2018-09-27T14:39:32,786",
  122. "count" : 1
  123. }
  124. ]
  125. }
  126. }
  127. }
今回formatsemi_structured_textとして特定されました。
multiline_start_patternは、各マルチラインログメッセージの最初の行にタイムスタンプが表示されることに基づいて設定されています。
非常にシンプルなgrok_patternが作成され、タイムスタンプと、分析されたメッセージに表示される認識可能なフィールドが抽出されます。この場合、タイムスタンプを超えて認識された唯一のフィールドはログレベルでした。
使用されたECS Grokパターンの互換性モードは、disabled(リクエストで指定されていない場合のデフォルト)またはv1のいずれかです。

grok_patternをクエリパラメータとして指定する

構造ファインダーが自動的に生成したシンプルなgrok_patternよりも多くのフィールドを認識する場合、より高度なgrok_patternをクエリパラメータとして指定してリクエストを再送信できます。構造ファインダーは、追加フィールドのfield_statsを計算します。

Elasticsearchログの場合、より完全なGrokパターンは\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{LOGLEVEL:loglevel} *\]\[%{JAVACLASS:class} *\] \[%{HOSTNAME:node}\] %{JAVALOGMESSAGE:message}です。同じテキストを再度分析し、このgrok_patternをクエリパラメータとして送信できます(適切にURLエスケープされていること):

Js

  1. curl -s -H "Content-Type: application/json" -XPOST "localhost:9200/_text_structure/find_structure?pretty&format=semi_structured_text&grok_pattern=%5C%5B%25%7BTIMESTAMP_ISO8601:timestamp%7D%5C%5D%5C%5B%25%7BLOGLEVEL:loglevel%7D%20*%5C%5D%5C%5B%25%7BJAVACLASS:class%7D%20*%5C%5D%20%5C%5B%25%7BHOSTNAME:node%7D%5C%5D%20%25%7BJAVALOGMESSAGE:message%7D" -T "$ES_HOME/logs/elasticsearch.log"

リクエストにエラーが発生しなければ、結果は次のようになります:

Js

  1. {
  2. "num_lines_analyzed" : 53,
  3. "num_messages_analyzed" : 53,
  4. "sample_start" : "[2018-09-27T14:39:28,518][INFO ][o.e.e.NodeEnvironment ] [node-0] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [165.4gb], net total_space [464.7gb], types [hfs]\n[2018-09-27T14:39:28,521][INFO ][o.e.e.NodeEnvironment ] [node-0] heap size [494.9mb], compressed ordinary object pointers [true]\n",
  5. "charset" : "UTF-8",
  6. "has_byte_order_marker" : false,
  7. "format" : "semi_structured_text",
  8. "multiline_start_pattern" : "^\\[\\b\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}",
  9. "grok_pattern" : "\\[%{TIMESTAMP_ISO8601:timestamp}\\]\\[%{LOGLEVEL:loglevel} *\\]\\[%{JAVACLASS:class} *\\] \\[%{HOSTNAME:node}\\] %{JAVALOGMESSAGE:message}",
  10. "ecs_compatibility" : "disabled",
  11. "timestamp_field" : "timestamp",
  12. "joda_timestamp_formats" : [
  13. "ISO8601"
  14. ],
  15. "java_timestamp_formats" : [
  16. "ISO8601"
  17. ],
  18. "need_client_timezone" : true,
  19. "mappings" : {
  20. "properties" : {
  21. "@timestamp" : {
  22. "type" : "date"
  23. },
  24. "class" : {
  25. "type" : "keyword"
  26. },
  27. "loglevel" : {
  28. "type" : "keyword"
  29. },
  30. "message" : {
  31. "type" : "text"
  32. },
  33. "node" : {
  34. "type" : "keyword"
  35. }
  36. }
  37. },
  38. "ingest_pipeline" : {
  39. "description" : "Ingest pipeline created by text structure finder",
  40. "processors" : [
  41. {
  42. "grok" : {
  43. "field" : "message",
  44. "patterns" : [
  45. "\\[%{TIMESTAMP_ISO8601:timestamp}\\]\\[%{LOGLEVEL:loglevel} *\\]\\[%{JAVACLASS:class} *\\] \\[%{HOSTNAME:node}\\] %{JAVALOGMESSAGE:message}"
  46. ]
  47. }
  48. },
  49. {
  50. "date" : {
  51. "field" : "timestamp",
  52. "timezone" : "{{ event.timezone }}",
  53. "formats" : [
  54. "ISO8601"
  55. ]
  56. }
  57. },
  58. {
  59. "remove" : {
  60. "field" : "timestamp"
  61. }
  62. }
  63. ]
  64. },
  65. "field_stats" : {
  66. "class" : {
  67. "count" : 53,
  68. "cardinality" : 14,
  69. "top_hits" : [
  70. {
  71. "value" : "o.e.p.PluginsService",
  72. "count" : 26
  73. },
  74. {
  75. "value" : "o.e.c.m.MetadataIndexTemplateService",
  76. "count" : 8
  77. },
  78. {
  79. "value" : "o.e.n.Node",
  80. "count" : 7
  81. },
  82. {
  83. "value" : "o.e.e.NodeEnvironment",
  84. "count" : 2
  85. },
  86. {
  87. "value" : "o.e.a.ActionModule",
  88. "count" : 1
  89. },
  90. {
  91. "value" : "o.e.c.s.ClusterApplierService",
  92. "count" : 1
  93. },
  94. {
  95. "value" : "o.e.c.s.MasterService",
  96. "count" : 1
  97. },
  98. {
  99. "value" : "o.e.d.DiscoveryModule",
  100. "count" : 1
  101. },
  102. {
  103. "value" : "o.e.g.GatewayService",
  104. "count" : 1
  105. },
  106. {
  107. "value" : "o.e.l.LicenseService",
  108. "count" : 1
  109. }
  110. ]
  111. },
  112. "loglevel" : {
  113. "count" : 53,
  114. "cardinality" : 3,
  115. "top_hits" : [
  116. {
  117. "value" : "INFO",
  118. "count" : 51
  119. },
  120. {
  121. "value" : "DEBUG",
  122. "count" : 1
  123. },
  124. {
  125. "value" : "WARN",
  126. "count" : 1
  127. }
  128. ]
  129. },
  130. "message" : {
  131. "count" : 53,
  132. "cardinality" : 53,
  133. "top_hits" : [
  134. {
  135. "value" : "Using REST wrapper from plugin org.elasticsearch.xpack.security.Security",
  136. "count" : 1
  137. },
  138. {
  139. "value" : "adding template [.monitoring-alerts] for index patterns [.monitoring-alerts-6]",
  140. "count" : 1
  141. },
  142. {
  143. "value" : "adding template [.monitoring-beats] for index patterns [.monitoring-beats-6-*]",
  144. "count" : 1
  145. },
  146. {
  147. "value" : "adding template [.monitoring-es] for index patterns [.monitoring-es-6-*]",
  148. "count" : 1
  149. },
  150. {
  151. "value" : "adding template [.monitoring-kibana] for index patterns [.monitoring-kibana-6-*]",
  152. "count" : 1
  153. },
  154. {
  155. "value" : "adding template [.monitoring-logstash] for index patterns [.monitoring-logstash-6-*]",
  156. "count" : 1
  157. },
  158. {
  159. "value" : "adding template [.triggered_watches] for index patterns [.triggered_watches*]",
  160. "count" : 1
  161. },
  162. {
  163. "value" : "adding template [.watch-history-9] for index patterns [.watcher-history-9*]",
  164. "count" : 1
  165. },
  166. {
  167. "value" : "adding template [.watches] for index patterns [.watches*]",
  168. "count" : 1
  169. },
  170. {
  171. "value" : "starting ...",
  172. "count" : 1
  173. }
  174. ]
  175. },
  176. "node" : {
  177. "count" : 53,
  178. "cardinality" : 1,
  179. "top_hits" : [
  180. {
  181. "value" : "node-0",
  182. "count" : 53
  183. }
  184. ]
  185. },
  186. "timestamp" : {
  187. "count" : 53,
  188. "cardinality" : 28,
  189. "earliest" : "2018-09-27T14:39:28,518",
  190. "latest" : "2018-09-27T14:39:37,012",
  191. "top_hits" : [
  192. {
  193. "value" : "2018-09-27T14:39:29,859",
  194. "count" : 10
  195. },
  196. {
  197. "value" : "2018-09-27T14:39:29,860",
  198. "count" : 9
  199. },
  200. {
  201. "value" : "2018-09-27T14:39:29,858",
  202. "count" : 6
  203. },
  204. {
  205. "value" : "2018-09-27T14:39:28,523",
  206. "count" : 3
  207. },
  208. {
  209. "value" : "2018-09-27T14:39:34,234",
  210. "count" : 2
  211. },
  212. {
  213. "value" : "2018-09-27T14:39:28,518",
  214. "count" : 1
  215. },
  216. {
  217. "value" : "2018-09-27T14:39:28,521",
  218. "count" : 1
  219. },
  220. {
  221. "value" : "2018-09-27T14:39:28,522",
  222. "count" : 1
  223. },
  224. {
  225. "value" : "2018-09-27T14:39:29,861",
  226. "count" : 1
  227. },
  228. {
  229. "value" : "2018-09-27T14:39:32,786",
  230. "count" : 1
  231. }
  232. ]
  233. }
  234. }
  235. }
出力のgrok_patternは、クエリパラメータで提供されたオーバーライドされたものになっています。
使用されたECS Grokパターンの互換性モードは、disabled(リクエストで指定されていない場合のデフォルト)またはv1のいずれかです。
返されたfield_statsには、オーバーライドされたgrok_patternからのフィールドのエントリが含まれています。

URLエスケープは難しいので、インタラクティブに作業している場合はUIを使用するのが最適です!