null_value

null 値はインデックス化または検索することができません。フィールドが null に設定されている場合(または空の配列や null 値の配列の場合)、そのフィールドには値がないかのように扱われます。

null_value パラメータを使用すると、指定された値で明示的な null 値を置き換えることができ、インデックス化および検索が可能になります。例えば:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "status_code": {
  6. "type": "keyword",
  7. "null_value": "NULL"
  8. }
  9. }
  10. },
  11. )
  12. print(resp)
  13. resp1 = client.index(
  14. index="my-index-000001",
  15. id="1",
  16. document={
  17. "status_code": None
  18. },
  19. )
  20. print(resp1)
  21. resp2 = client.index(
  22. index="my-index-000001",
  23. id="2",
  24. document={
  25. "status_code": []
  26. },
  27. )
  28. print(resp2)
  29. resp3 = client.search(
  30. index="my-index-000001",
  31. query={
  32. "term": {
  33. "status_code": "NULL"
  34. }
  35. },
  36. )
  37. print(resp3)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. status_code: {
  7. type: 'keyword',
  8. nil_value: 'NULL'
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response
  15. response = client.index(
  16. index: 'my-index-000001',
  17. id: 1,
  18. body: {
  19. status_code: nil
  20. }
  21. )
  22. puts response
  23. response = client.index(
  24. index: 'my-index-000001',
  25. id: 2,
  26. body: {
  27. status_code: []
  28. }
  29. )
  30. puts response
  31. response = client.search(
  32. index: 'my-index-000001',
  33. body: {
  34. query: {
  35. term: {
  36. status_code: 'NULL'
  37. }
  38. }
  39. }
  40. )
  41. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. status_code: {
  6. type: "keyword",
  7. null_value: "NULL",
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);
  13. const response1 = await client.index({
  14. index: "my-index-000001",
  15. id: 1,
  16. document: {
  17. status_code: null,
  18. },
  19. });
  20. console.log(response1);
  21. const response2 = await client.index({
  22. index: "my-index-000001",
  23. id: 2,
  24. document: {
  25. status_code: [],
  26. },
  27. });
  28. console.log(response2);
  29. const response3 = await client.search({
  30. index: "my-index-000001",
  31. query: {
  32. term: {
  33. status_code: "NULL",
  34. },
  35. },
  36. });
  37. console.log(response3);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "status_code": {
  6. "type": "keyword",
  7. "null_value": "NULL"
  8. }
  9. }
  10. }
  11. }
  12. PUT my-index-000001/_doc/1
  13. {
  14. "status_code": null
  15. }
  16. PUT my-index-000001/_doc/2
  17. {
  18. "status_code": []
  19. }
  20. GET my-index-000001/_search
  21. {
  22. "query": {
  23. "term": {
  24. "status_code": "NULL"
  25. }
  26. }
  27. }
明示的な null 値を NULL という用語で置き換えます。
空の配列には明示的な null が含まれていないため、null_value で置き換えられません。
NULL のクエリはドキュメント 1 を返しますが、ドキュメント 2 は返しません。

null_value はフィールドと同じデータ型である必要があります。例えば、long フィールドには文字列 null_value を持つことはできません。

null_value はデータがインデックス化される方法にのみ影響し、_source ドキュメントを変更することはありません。