在 Elasticsearch 中,可以使用嵌套文档和子文档来组织和存储数据。这可以帮助您构建更复杂的数据结构,并使查询更加灵活和强大。

创建子文档和嵌套文档

以下是如何创建子文档和嵌套文档的步骤:

  1. 创建一个主文档,其中包含一个或多个字段。
  2. 在主文档中创建一个嵌套字段或子文档字段。
  3. 在嵌套字段或子文档字段中添加一个或多个字段。

示例:

PUT my_index/_doc/1
{
  'title': 'My Book',
  'author': {
    'first_name': 'John',
    'last_name': 'Doe'
  },
  'publisher': {
    'name': 'My Publisher',
    'address': {
      'street': '123 Main St',
      'city': 'Anytown',
      'state': 'CA',
      'zip': '12345'
    }
  }
}

在这个示例中,author 和 publisher 字段都是嵌套字段,它们包含了子字段。address 是 publisher 字段的子字段。

查询嵌套或子文档

要查询嵌套或子文档,可以使用嵌套查询 (nested query) 或 has_child 查询。

例如,要查找所有具有特定地址的出版商,可以使用以下查询:

GET my_index/_search
{
  'query': {
    'nested': {
      'path': 'publisher',
      'query': {
        'bool': {
          'must': [
            { 'match': { 'publisher.name': 'My Publisher' }},
            { 'match': { 'publisher.address.city': 'Anytown' }}
          ]
        }
      }
    }
  }
}

在这个查询中,我们使用了嵌套查询来查找所有具有特定地址的出版商。我们指定了嵌套字段的路径,并使用布尔查询来匹配出版商的名称和地址的城市。

总结

使用子文档和嵌套文档可以组织和存储复杂的数据结构,并使查询更加灵活和强大。这对于需要存储和检索具有层次结构关系的数据的应用程序来说非常有用。

ES7.0 子文档和嵌套文档创建指南 | 优化数据结构和查询

原文地址: https://www.cveoy.top/t/topic/oZEX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录