enabled

Elasticsearchは、与えられたすべてのフィールドをインデックスしようとしますが、時にはフィールドをインデックスせずに保存したい場合があります。たとえば、ElasticsearchをWebセッションストアとして使用していると想像してください。セッションIDと最終更新時刻をインデックスしたいかもしれませんが、セッションデータ自体をクエリしたり集計したりする必要はありません。

  1. #### Python
  2. ``````python
  3. resp = client.indices.create(
  4. index="my-index-000001",
  5. mappings={
  6. "properties": {
  7. "user_id": {
  8. "type": "keyword"
  9. },
  10. "last_updated": {
  11. "type": "date"
  12. },
  13. "session_data": {
  14. "type": "object",
  15. "enabled": False
  16. }
  17. }
  18. },
  19. )
  20. print(resp)
  21. resp1 = client.index(
  22. index="my-index-000001",
  23. id="session_1",
  24. document={
  25. "user_id": "kimchy",
  26. "session_data": {
  27. "arbitrary_object": {
  28. "some_array": [
  29. "foo",
  30. "bar",
  31. {
  32. "baz": 2
  33. }
  34. ]
  35. }
  36. },
  37. "last_updated": "2015-12-06T18:20:22"
  38. },
  39. )
  40. print(resp1)
  41. resp2 = client.index(
  42. index="my-index-000001",
  43. id="session_2",
  44. document={
  45. "user_id": "jpountz",
  46. "session_data": "none",
  47. "last_updated": "2015-12-06T18:22:13"
  48. },
  49. )
  50. print(resp2)
  51. `

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. user_id: {
  7. type: 'keyword'
  8. },
  9. last_updated: {
  10. type: 'date'
  11. },
  12. session_data: {
  13. type: 'object',
  14. enabled: false
  15. }
  16. }
  17. }
  18. }
  19. )
  20. puts response
  21. response = client.index(
  22. index: 'my-index-000001',
  23. id: 'session_1',
  24. body: {
  25. user_id: 'kimchy',
  26. session_data: {
  27. arbitrary_object: {
  28. some_array: [
  29. 'foo',
  30. 'bar',
  31. {
  32. baz: 2
  33. }
  34. ]
  35. }
  36. },
  37. last_updated: '2015-12-06T18:20:22'
  38. }
  39. )
  40. puts response
  41. response = client.index(
  42. index: 'my-index-000001',
  43. id: 'session_2',
  44. body: {
  45. user_id: 'jpountz',
  46. session_data: 'none',
  47. last_updated: '2015-12-06T18:22:13'
  48. }
  49. )
  50. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. user_id: {
  6. type: "keyword",
  7. },
  8. last_updated: {
  9. type: "date",
  10. },
  11. session_data: {
  12. type: "object",
  13. enabled: false,
  14. },
  15. },
  16. },
  17. });
  18. console.log(response);
  19. const response1 = await client.index({
  20. index: "my-index-000001",
  21. id: "session_1",
  22. document: {
  23. user_id: "kimchy",
  24. session_data: {
  25. arbitrary_object: {
  26. some_array: [
  27. "foo",
  28. "bar",
  29. {
  30. baz: 2,
  31. },
  32. ],
  33. },
  34. },
  35. last_updated: "2015-12-06T18:20:22",
  36. },
  37. });
  38. console.log(response1);
  39. const response2 = await client.index({
  40. index: "my-index-000001",
  41. id: "session_2",
  42. document: {
  43. user_id: "jpountz",
  44. session_data: "none",
  45. last_updated: "2015-12-06T18:22:13",
  46. },
  47. });
  48. console.log(response2);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "user_id": {
  6. "type": "keyword"
  7. },
  8. "last_updated": {
  9. "type": "date"
  10. },
  11. "session_data": {
  12. "type": "object",
  13. "enabled": false
  14. }
  15. }
  16. }
  17. }
  18. PUT my-index-000001/_doc/session_1
  19. {
  20. "user_id": "kimchy",
  21. "session_data": {
  22. "arbitrary_object": {
  23. "some_array": [ "foo", "bar", { "baz": 2 } ]
  24. }
  25. },
  26. "last_updated": "2015-12-06T18:20:22"
  27. }
  28. PUT my-index-000001/_doc/session_2
  29. {
  30. "user_id": "jpountz",
  31. "session_data": "none",
  32. "last_updated": "2015-12-06T18:22:13"
  33. }
session_dataフィールドは無効です。
任意のデータはsession_dataフィールドに渡すことができますが、完全に無視されます。
session_dataはJSONオブジェクトでない値も無視します。

マッピング全体も無効にすることができ、その場合、ドキュメントは_sourceフィールドに保存され、取得可能ですが、その内容はどのようにもインデックスされません。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "enabled": False
  5. },
  6. )
  7. print(resp)
  8. resp1 = client.index(
  9. index="my-index-000001",
  10. id="session_1",
  11. document={
  12. "user_id": "kimchy",
  13. "session_data": {
  14. "arbitrary_object": {
  15. "some_array": [
  16. "foo",
  17. "bar",
  18. {
  19. "baz": 2
  20. }
  21. ]
  22. }
  23. },
  24. "last_updated": "2015-12-06T18:20:22"
  25. },
  26. )
  27. print(resp1)
  28. resp2 = client.get(
  29. index="my-index-000001",
  30. id="session_1",
  31. )
  32. print(resp2)
  33. resp3 = client.indices.get_mapping(
  34. index="my-index-000001",
  35. )
  36. print(resp3)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. enabled: false
  6. }
  7. }
  8. )
  9. puts response
  10. response = client.index(
  11. index: 'my-index-000001',
  12. id: 'session_1',
  13. body: {
  14. user_id: 'kimchy',
  15. session_data: {
  16. arbitrary_object: {
  17. some_array: [
  18. 'foo',
  19. 'bar',
  20. {
  21. baz: 2
  22. }
  23. ]
  24. }
  25. },
  26. last_updated: '2015-12-06T18:20:22'
  27. }
  28. )
  29. puts response
  30. response = client.get(
  31. index: 'my-index-000001',
  32. id: 'session_1'
  33. )
  34. puts response
  35. response = client.indices.get_mapping(
  36. index: 'my-index-000001'
  37. )
  38. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. enabled: false,
  5. },
  6. });
  7. console.log(response);
  8. const response1 = await client.index({
  9. index: "my-index-000001",
  10. id: "session_1",
  11. document: {
  12. user_id: "kimchy",
  13. session_data: {
  14. arbitrary_object: {
  15. some_array: [
  16. "foo",
  17. "bar",
  18. {
  19. baz: 2,
  20. },
  21. ],
  22. },
  23. },
  24. last_updated: "2015-12-06T18:20:22",
  25. },
  26. });
  27. console.log(response1);
  28. const response2 = await client.get({
  29. index: "my-index-000001",
  30. id: "session_1",
  31. });
  32. console.log(response2);
  33. const response3 = await client.indices.getMapping({
  34. index: "my-index-000001",
  35. });
  36. console.log(response3);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "enabled": false
  5. }
  6. }
  7. PUT my-index-000001/_doc/session_1
  8. {
  9. "user_id": "kimchy",
  10. "session_data": {
  11. "arbitrary_object": {
  12. "some_array": [ "foo", "bar", { "baz": 2 } ]
  13. }
  14. },
  15. "last_updated": "2015-12-06T18:20:22"
  16. }
  17. GET my-index-000001/_doc/session_1
  18. GET my-index-000001/_mapping
マッピング全体が無効です。
ドキュメントは取得可能です。
マッピングを確認すると、フィールドが追加されていないことがわかります。

既存のフィールドと最上位のマッピング定義に対するenabled設定は更新できません。

Elasticsearchがフィールドの内容の解析を完全にスキップするため、無効なフィールドに非オブジェクトデータを追加することが可能です。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "session_data": {
  6. "type": "object",
  7. "enabled": False
  8. }
  9. }
  10. },
  11. )
  12. print(resp)
  13. resp1 = client.index(
  14. index="my-index-000001",
  15. id="session_1",
  16. document={
  17. "session_data": "foo bar"
  18. },
  19. )
  20. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. session_data: {
  7. type: 'object',
  8. enabled: false
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response
  15. response = client.index(
  16. index: 'my-index-000001',
  17. id: 'session_1',
  18. body: {
  19. session_data: 'foo bar'
  20. }
  21. )
  22. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. session_data: {
  6. type: "object",
  7. enabled: false,
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);
  13. const response1 = await client.index({
  14. index: "my-index-000001",
  15. id: "session_1",
  16. document: {
  17. session_data: "foo bar",
  18. },
  19. });
  20. console.log(response1);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "session_data": {
  6. "type": "object",
  7. "enabled": false
  8. }
  9. }
  10. }
  11. }
  12. PUT my-index-000001/_doc/session_1
  13. {
  14. "session_data": "foo bar"
  15. }
ドキュメントは正常に追加されましたが、session_dataには非オブジェクトデータが含まれています。