properties编辑

类型映射、object 字段nested 字段 包含子字段,称为 properties。这些属性可以是任何 数据类型,包括 objectnested。属性可以

  • 通过在 创建索引 时定义它们来显式添加。
  • 通过使用 更新映射 API 在添加或更新映射类型时显式定义它们。
  • 通过 动态 地索引包含新字段的文档来添加。

以下是如何将 properties 添加到映射类型、object 字段和 nested 字段的示例

response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        manager: {
          properties: {
            age: {
              type: 'integer'
            },
            name: {
              type: 'text'
            }
          }
        },
        employees: {
          type: 'nested',
          properties: {
            age: {
              type: 'integer'
            },
            name: {
              type: 'text'
            }
          }
        }
      }
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    region: 'US',
    manager: {
      name: 'Alice White',
      age: 30
    },
    employees: [
      {
        name: 'John Smith',
        age: 34
      },
      {
        name: 'Peter Brown',
        age: 26
      }
    ]
  }
)
puts response
PUT my-index-000001
{
  "mappings": {
    "properties": { 
      "manager": {
        "properties": { 
          "age":  { "type": "integer" },
          "name": { "type": "text"  }
        }
      },
      "employees": {
        "type": "nested",
        "properties": { 
          "age":  { "type": "integer" },
          "name": { "type": "text"  }
        }
      }
    }
  }
}

PUT my-index-000001/_doc/1 
{
  "region": "US",
  "manager": {
    "name": "Alice White",
    "age": 30
  },
  "employees": [
    {
      "name": "John Smith",
      "age": 34
    },
    {
      "name": "Peter Brown",
      "age": 26
    }
  ]
}

顶层映射定义中的属性。

manager 对象字段下的属性。

employees 嵌套字段下的属性。

与上述映射相对应的示例文档。

properties 设置允许在同一个索引中对相同名称的字段具有不同的设置。可以使用 更新映射 API 将新属性添加到现有字段。

点表示法编辑

可以使用点表示法在查询、聚合等中引用内部字段

response = client.search(
  index: 'my-index-000001',
  body: {
    query: {
      match: {
        'manager.name' => 'Alice White'
      }
    },
    aggregations: {
      "Employees": {
        nested: {
          path: 'employees'
        },
        aggregations: {
          "Employee Ages": {
            histogram: {
              field: 'employees.age',
              interval: 5
            }
          }
        }
      }
    }
  }
)
puts response
GET my-index-000001/_search
{
  "query": {
    "match": {
      "manager.name": "Alice White"
    }
  },
  "aggs": {
    "Employees": {
      "nested": {
        "path": "employees"
      },
      "aggs": {
        "Employee Ages": {
          "histogram": {
            "field": "employees.age",
            "interval": 5
          }
        }
      }
    }
  }
}

必须指定内部字段的完整路径。