クイックスタート: Elasticsearch APIを使用してデータを追加する

このクイックスタートガイドでは、次のタスクを実行する方法を学びます:

  • Elasticsearch REST APIを使用して、タイムスタンプのない小さなデータセットをElasticsearchに追加します。
  • 基本的な検索を実行します。

データを追加する

データは、ドキュメントと呼ばれるJSONオブジェクトとしてElasticsearchに追加されます。Elasticsearchは、これらのドキュメントを検索可能なインデックスに保存します。

単一のドキュメントを追加する

次のインデックスリクエストを送信して、booksインデックスに単一のドキュメントを追加します。このリクエストは自動的にインデックスを作成します。

Python

  1. resp = client.index(
  2. index="books",
  3. document={
  4. "name": "Snow Crash",
  5. "author": "Neal Stephenson",
  6. "release_date": "1992-06-01",
  7. "page_count": 470
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.index(
  2. index: 'books',
  3. body: {
  4. name: 'Snow Crash',
  5. author: 'Neal Stephenson',
  6. release_date: '1992-06-01',
  7. page_count: 470
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.index({
  2. index: "books",
  3. document: {
  4. name: "Snow Crash",
  5. author: "Neal Stephenson",
  6. release_date: "1992-06-01",
  7. page_count: 470,
  8. },
  9. });
  10. console.log(response);

コンソール

  1. POST books/_doc
  2. {"name": "Snow Crash", "author": "Neal Stephenson", "release_date": "1992-06-01", "page_count": 470}

レスポンスには、インデックス内のドキュメントに対してElasticsearchが生成するメタデータが含まれ、ドキュメントのユニークな_idが含まれます。

例のレスポンスを表示するには展開してください

コンソール-結果

  1. {
  2. "_index": "books",
  3. "_id": "O0lG2IsBaSa7VYx_rEia",
  4. "_version": 1,
  5. "result": "created",
  6. "_shards": {
  7. "total": 2,
  8. "successful": 2,
  9. "failed": 0
  10. },
  11. "_seq_no": 0,
  12. "_primary_term": 1
  13. }

複数のドキュメントを追加する

  1. #### Python
  2. ``````python
  3. resp = client.bulk(
  4. operations=[
  5. {
  6. "index": {
  7. "_index": "books"
  8. }
  9. },
  10. {
  11. "name": "Revelation Space",
  12. "author": "Alastair Reynolds",
  13. "release_date": "2000-03-15",
  14. "page_count": 585
  15. },
  16. {
  17. "index": {
  18. "_index": "books"
  19. }
  20. },
  21. {
  22. "name": "1984",
  23. "author": "George Orwell",
  24. "release_date": "1985-06-01",
  25. "page_count": 328
  26. },
  27. {
  28. "index": {
  29. "_index": "books"
  30. }
  31. },
  32. {
  33. "name": "Fahrenheit 451",
  34. "author": "Ray Bradbury",
  35. "release_date": "1953-10-15",
  36. "page_count": 227
  37. },
  38. {
  39. "index": {
  40. "_index": "books"
  41. }
  42. },
  43. {
  44. "name": "Brave New World",
  45. "author": "Aldous Huxley",
  46. "release_date": "1932-06-01",
  47. "page_count": 268
  48. },
  49. {
  50. "index": {
  51. "_index": "books"
  52. }
  53. },
  54. {
  55. "name": "The Handmaids Tale",
  56. "author": "Margaret Atwood",
  57. "release_date": "1985-06-01",
  58. "page_count": 311
  59. }
  60. ],
  61. )
  62. print(resp)
  63. `

Ruby

  1. response = client.bulk(
  2. body: [
  3. {
  4. index: {
  5. _index: 'books'
  6. }
  7. },
  8. {
  9. name: 'Revelation Space',
  10. author: 'Alastair Reynolds',
  11. release_date: '2000-03-15',
  12. page_count: 585
  13. },
  14. {
  15. index: {
  16. _index: 'books'
  17. }
  18. },
  19. {
  20. name: '1984',
  21. author: 'George Orwell',
  22. release_date: '1985-06-01',
  23. page_count: 328
  24. },
  25. {
  26. index: {
  27. _index: 'books'
  28. }
  29. },
  30. {
  31. name: 'Fahrenheit 451',
  32. author: 'Ray Bradbury',
  33. release_date: '1953-10-15',
  34. page_count: 227
  35. },
  36. {
  37. index: {
  38. _index: 'books'
  39. }
  40. },
  41. {
  42. name: 'Brave New World',
  43. author: 'Aldous Huxley',
  44. release_date: '1932-06-01',
  45. page_count: 268
  46. },
  47. {
  48. index: {
  49. _index: 'books'
  50. }
  51. },
  52. {
  53. name: 'The Handmaids Tale',
  54. author: 'Margaret Atwood',
  55. release_date: '1985-06-01',
  56. page_count: 311
  57. }
  58. ]
  59. )
  60. puts response

Js

  1. const response = await client.bulk({
  2. operations: [
  3. {
  4. index: {
  5. _index: "books",
  6. },
  7. },
  8. {
  9. name: "Revelation Space",
  10. author: "Alastair Reynolds",
  11. release_date: "2000-03-15",
  12. page_count: 585,
  13. },
  14. {
  15. index: {
  16. _index: "books",
  17. },
  18. },
  19. {
  20. name: "1984",
  21. author: "George Orwell",
  22. release_date: "1985-06-01",
  23. page_count: 328,
  24. },
  25. {
  26. index: {
  27. _index: "books",
  28. },
  29. },
  30. {
  31. name: "Fahrenheit 451",
  32. author: "Ray Bradbury",
  33. release_date: "1953-10-15",
  34. page_count: 227,
  35. },
  36. {
  37. index: {
  38. _index: "books",
  39. },
  40. },
  41. {
  42. name: "Brave New World",
  43. author: "Aldous Huxley",
  44. release_date: "1932-06-01",
  45. page_count: 268,
  46. },
  47. {
  48. index: {
  49. _index: "books",
  50. },
  51. },
  52. {
  53. name: "The Handmaids Tale",
  54. author: "Margaret Atwood",
  55. release_date: "1985-06-01",
  56. page_count: 311,
  57. },
  58. ],
  59. });
  60. console.log(response);

コンソール

  1. POST /_bulk
  2. { "index" : { "_index" : "books" } }
  3. {"name": "Revelation Space", "author": "Alastair Reynolds", "release_date": "2000-03-15", "page_count": 585}
  4. { "index" : { "_index" : "books" } }
  5. {"name": "1984", "author": "George Orwell", "release_date": "1985-06-01", "page_count": 328}
  6. { "index" : { "_index" : "books" } }
  7. {"name": "Fahrenheit 451", "author": "Ray Bradbury", "release_date": "1953-10-15", "page_count": 227}
  8. { "index" : { "_index" : "books" } }
  9. {"name": "Brave New World", "author": "Aldous Huxley", "release_date": "1932-06-01", "page_count": 268}
  10. { "index" : { "_index" : "books" } }
  11. {"name": "The Handmaids Tale", "author": "Margaret Atwood", "release_date": "1985-06-01", "page_count": 311}

エラーがなかったことを示すレスポンスを受け取る必要があります。

例のレスポンスを表示するには展開してください

コンソール-結果

  1. {
  2. "errors": false,
  3. "took": 29,
  4. "items": [
  5. {
  6. "index": {
  7. "_index": "books",
  8. "_id": "QklI2IsBaSa7VYx_Qkh-",
  9. "_version": 1,
  10. "result": "created",
  11. "_shards": {
  12. "total": 2,
  13. "successful": 2,
  14. "failed": 0
  15. },
  16. "_seq_no": 1,
  17. "_primary_term": 1,
  18. "status": 201
  19. }
  20. },
  21. {
  22. "index": {
  23. "_index": "books",
  24. "_id": "Q0lI2IsBaSa7VYx_Qkh-",
  25. "_version": 1,
  26. "result": "created",
  27. "_shards": {
  28. "total": 2,
  29. "successful": 2,
  30. "failed": 0
  31. },
  32. "_seq_no": 2,
  33. "_primary_term": 1,
  34. "status": 201
  35. }
  36. },
  37. {
  38. "index": {
  39. "_index": "books",
  40. "_id": "RElI2IsBaSa7VYx_Qkh-",
  41. "_version": 1,
  42. "result": "created",
  43. "_shards": {
  44. "total": 2,
  45. "successful": 2,
  46. "failed": 0
  47. },
  48. "_seq_no": 3,
  49. "_primary_term": 1,
  50. "status": 201
  51. }
  52. },
  53. {
  54. "index": {
  55. "_index": "books",
  56. "_id": "RUlI2IsBaSa7VYx_Qkh-",
  57. "_version": 1,
  58. "result": "created",
  59. "_shards": {
  60. "total": 2,
  61. "successful": 2,
  62. "failed": 0
  63. },
  64. "_seq_no": 4,
  65. "_primary_term": 1,
  66. "status": 201
  67. }
  68. },
  69. {
  70. "index": {
  71. "_index": "books",
  72. "_id": "RklI2IsBaSa7VYx_Qkh-",
  73. "_version": 1,
  74. "result": "created",
  75. "_shards": {
  76. "total": 2,
  77. "successful": 2,
  78. "failed": 0
  79. },
  80. "_seq_no": 5,
  81. "_primary_term": 1,
  82. "status": 201
  83. }
  84. }
  85. ]
  86. }

データを検索する

インデックスされたドキュメントは、ほぼリアルタイムで検索可能です。

すべてのドキュメントを検索する

次のコマンドを実行して、booksインデックス内のすべてのドキュメントを検索します:

Python

  1. resp = client.search(
  2. index="books",
  3. )
  4. print(resp)

Ruby

  1. response = client.search(
  2. index: 'books'
  3. )
  4. puts response

Js

  1. const response = await client.search({
  2. index: "books",
  3. });
  4. console.log(response);

コンソール

  1. GET books/_search

各ヒットの_sourceには、インデックス時に送信された元のJSONオブジェクトが含まれています。

マッチクエリ

特定のフィールドに特定の値を含むドキュメントを検索するには、matchクエリを使用できます。これは、ファジーマッチやフレーズ検索を含むフルテキスト検索を実行するための標準的なクエリです。

次のコマンドを実行して、booksインデックス内のnameフィールドにbraveを含むドキュメントを検索します:

Python

  1. resp = client.search(
  2. index="books",
  3. query={
  4. "match": {
  5. "name": "brave"
  6. }
  7. },
  8. )
  9. print(resp)

Ruby

  1. response = client.search(
  2. index: 'books',
  3. body: {
  4. query: {
  5. match: {
  6. name: 'brave'
  7. }
  8. }
  9. }
  10. )
  11. puts response

Js

  1. const response = await client.search({
  2. index: "books",
  3. query: {
  4. match: {
  5. name: "brave",
  6. },
  7. },
  8. });
  9. console.log(response);

コンソール

  1. GET books/_search
  2. {
  3. "query": {
  4. "match": {
  5. "name": "brave"
  6. }
  7. }
  8. }