store

デフォルトでは、フィールド値はインデックス化されて検索可能になりますが、保存されません。これは、フィールドをクエリできることを意味しますが、元のフィールド値を取得することはできません。

通常、これは問題になりません。フィールド値はすでに_sourceフィールドの一部であり、デフォルトで保存されています。全体の_sourceの代わりに、単一のフィールドまたはいくつかのフィールドの値だけを取得したい場合は、ソースフィルタリングを使用してこれを実現できます。

特定の状況では、フィールドをstoreすることが意味を持つ場合があります。たとえば、titledate、非常に大きなcontentフィールドを持つドキュメントがある場合、titledateだけを取得したい場合があります。大きな_sourceフィールドからこれらのフィールドを抽出する必要はありません:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "title": {
  6. "type": "text",
  7. "store": True
  8. },
  9. "date": {
  10. "type": "date",
  11. "store": True
  12. },
  13. "content": {
  14. "type": "text"
  15. }
  16. }
  17. },
  18. )
  19. print(resp)
  20. resp1 = client.index(
  21. index="my-index-000001",
  22. id="1",
  23. document={
  24. "title": "Some short title",
  25. "date": "2015-01-01",
  26. "content": "A very long content field..."
  27. },
  28. )
  29. print(resp1)
  30. resp2 = client.search(
  31. index="my-index-000001",
  32. stored_fields=[
  33. "title",
  34. "date"
  35. ],
  36. )
  37. print(resp2)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. title: {
  7. type: 'text',
  8. store: true
  9. },
  10. date: {
  11. type: 'date',
  12. store: true
  13. },
  14. content: {
  15. type: 'text'
  16. }
  17. }
  18. }
  19. }
  20. )
  21. puts response
  22. response = client.index(
  23. index: 'my-index-000001',
  24. id: 1,
  25. body: {
  26. title: 'Some short title',
  27. date: '2015-01-01',
  28. content: 'A very long content field...'
  29. }
  30. )
  31. puts response
  32. response = client.search(
  33. index: 'my-index-000001',
  34. body: {
  35. stored_fields: [
  36. 'title',
  37. 'date'
  38. ]
  39. }
  40. )
  41. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. title: {
  6. type: "text",
  7. store: true,
  8. },
  9. date: {
  10. type: "date",
  11. store: true,
  12. },
  13. content: {
  14. type: "text",
  15. },
  16. },
  17. },
  18. });
  19. console.log(response);
  20. const response1 = await client.index({
  21. index: "my-index-000001",
  22. id: 1,
  23. document: {
  24. title: "Some short title",
  25. date: "2015-01-01",
  26. content: "A very long content field...",
  27. },
  28. });
  29. console.log(response1);
  30. const response2 = await client.search({
  31. index: "my-index-000001",
  32. stored_fields: ["title", "date"],
  33. });
  34. console.log(response2);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "title": {
  6. "type": "text",
  7. "store": true
  8. },
  9. "date": {
  10. "type": "date",
  11. "store": true
  12. },
  13. "content": {
  14. "type": "text"
  15. }
  16. }
  17. }
  18. }
  19. PUT my-index-000001/_doc/1
  20. {
  21. "title": "Some short title",
  22. "date": "2015-01-01",
  23. "content": "A very long content field..."
  24. }
  25. GET my-index-000001/_search
  26. {
  27. "stored_fields": [ "title", "date" ]
  28. }
titleおよびdateフィールドは保存されています。
このリクエストはtitleおよびdateフィールドの値を取得します。

Stored fields returned as arrays

一貫性のために、保存されたフィールドは常に配列として返されます。元のフィールド値が単一の値、複数の値、または空の配列であったかどうかを知る方法がないためです。

元の値が必要な場合は、_sourceフィールドから取得する必要があります。