properties

タイプマッピング、object fields および nested fields には、properties と呼ばれるサブフィールドが含まれています。これらのプロパティは、objectnested を含む任意の データ型 である可能性があります。プロパティは次のように追加できます:

以下は、properties をマッピングタイプに追加する例であり、object フィールドおよび nested フィールドです:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "manager": {
  6. "properties": {
  7. "age": {
  8. "type": "integer"
  9. },
  10. "name": {
  11. "type": "text"
  12. }
  13. }
  14. },
  15. "employees": {
  16. "type": "nested",
  17. "properties": {
  18. "age": {
  19. "type": "integer"
  20. },
  21. "name": {
  22. "type": "text"
  23. }
  24. }
  25. }
  26. }
  27. },
  28. )
  29. print(resp)
  30. resp1 = client.index(
  31. index="my-index-000001",
  32. id="1",
  33. document={
  34. "region": "US",
  35. "manager": {
  36. "name": "Alice White",
  37. "age": 30
  38. },
  39. "employees": [
  40. {
  41. "name": "John Smith",
  42. "age": 34
  43. },
  44. {
  45. "name": "Peter Brown",
  46. "age": 26
  47. }
  48. ]
  49. },
  50. )
  51. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. manager: {
  7. properties: {
  8. age: {
  9. type: 'integer'
  10. },
  11. name: {
  12. type: 'text'
  13. }
  14. }
  15. },
  16. employees: {
  17. type: 'nested',
  18. properties: {
  19. age: {
  20. type: 'integer'
  21. },
  22. name: {
  23. type: 'text'
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }
  30. )
  31. puts response
  32. response = client.index(
  33. index: 'my-index-000001',
  34. id: 1,
  35. body: {
  36. region: 'US',
  37. manager: {
  38. name: 'Alice White',
  39. age: 30
  40. },
  41. employees: [
  42. {
  43. name: 'John Smith',
  44. age: 34
  45. },
  46. {
  47. name: 'Peter Brown',
  48. age: 26
  49. }
  50. ]
  51. }
  52. )
  53. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. manager: {
  6. properties: {
  7. age: {
  8. type: "integer",
  9. },
  10. name: {
  11. type: "text",
  12. },
  13. },
  14. },
  15. employees: {
  16. type: "nested",
  17. properties: {
  18. age: {
  19. type: "integer",
  20. },
  21. name: {
  22. type: "text",
  23. },
  24. },
  25. },
  26. },
  27. },
  28. });
  29. console.log(response);
  30. const response1 = await client.index({
  31. index: "my-index-000001",
  32. id: 1,
  33. document: {
  34. region: "US",
  35. manager: {
  36. name: "Alice White",
  37. age: 30,
  38. },
  39. employees: [
  40. {
  41. name: "John Smith",
  42. age: 34,
  43. },
  44. {
  45. name: "Peter Brown",
  46. age: 26,
  47. },
  48. ],
  49. },
  50. });
  51. console.log(response1);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "manager": {
  6. "properties": {
  7. "age": { "type": "integer" },
  8. "name": { "type": "text" }
  9. }
  10. },
  11. "employees": {
  12. "type": "nested",
  13. "properties": {
  14. "age": { "type": "integer" },
  15. "name": { "type": "text" }
  16. }
  17. }
  18. }
  19. }
  20. }
  21. PUT my-index-000001/_doc/1
  22. {
  23. "region": "US",
  24. "manager": {
  25. "name": "Alice White",
  26. "age": 30
  27. },
  28. "employees": [
  29. {
  30. "name": "John Smith",
  31. "age": 34
  32. },
  33. {
  34. "name": "Peter Brown",
  35. "age": 26
  36. }
  37. ]
  38. }
トップレベルのマッピング定義におけるプロパティ。
manager オブジェクトフィールドの下のプロパティ。
employees ネストされたフィールドの下のプロパティ。
上記のマッピングに対応する例のドキュメント。

properties 設定は、同じインデックス内の同じ名前のフィールドに対して異なる設定を持つことが許可されています。新しいプロパティは、更新マッピングAPI を使用して既存のフィールドに追加できます。

Dot notation

内部フィールドは、ドット表記を使用してクエリ、集計などで参照できます:

Python

  1. resp = client.search(
  2. index="my-index-000001",
  3. query={
  4. "match": {
  5. "manager.name": "Alice White"
  6. }
  7. },
  8. aggs={
  9. "Employees": {
  10. "nested": {
  11. "path": "employees"
  12. },
  13. "aggs": {
  14. "Employee Ages": {
  15. "histogram": {
  16. "field": "employees.age",
  17. "interval": 5
  18. }
  19. }
  20. }
  21. }
  22. },
  23. )
  24. print(resp)

Ruby

  1. response = client.search(
  2. index: 'my-index-000001',
  3. body: {
  4. query: {
  5. match: {
  6. 'manager.name' => 'Alice White'
  7. }
  8. },
  9. aggregations: {
  10. "Employees": {
  11. nested: {
  12. path: 'employees'
  13. },
  14. aggregations: {
  15. "Employee Ages": {
  16. histogram: {
  17. field: 'employees.age',
  18. interval: 5
  19. }
  20. }
  21. }
  22. }
  23. }
  24. }
  25. )
  26. puts response

Js

  1. const response = await client.search({
  2. index: "my-index-000001",
  3. query: {
  4. match: {
  5. "manager.name": "Alice White",
  6. },
  7. },
  8. aggs: {
  9. Employees: {
  10. nested: {
  11. path: "employees",
  12. },
  13. aggs: {
  14. "Employee Ages": {
  15. histogram: {
  16. field: "employees.age",
  17. interval: 5,
  18. },
  19. },
  20. },
  21. },
  22. },
  23. });
  24. console.log(response);

Console

  1. GET my-index-000001/_search
  2. {
  3. "query": {
  4. "match": {
  5. "manager.name": "Alice White"
  6. }
  7. },
  8. "aggs": {
  9. "Employees": {
  10. "nested": {
  11. "path": "employees"
  12. },
  13. "aggs": {
  14. "Employee Ages": {
  15. "histogram": {
  16. "field": "employees.age",
  17. "interval": 5
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }

内部フィールドへの完全なパスを指定する必要があります。