首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用elasticsearch获得嵌套字段的所有值?

如何使用elasticsearch获得嵌套字段的所有值?
EN

Stack Overflow用户
提问于 2021-07-23 13:17:34
回答 2查看 529关注 0票数 0

我能够使用弹性搜索6.8中的聚合查询获取数据库中文本字段的所有值:

代码语言:javascript
复制
{
  aggs: {
    values: {
      terms: { field: 'City.keyword', size: 200 },
    },
  },
  size: 0,
};

我试图对嵌套字段执行同样的操作。

下面是一个文本字段(City)和嵌套字段(冷却)的示例。

代码语言:javascript
复制
"City": "Fredericksburg",
"Cooling": [
    {
        "key": "Fuel",
        "value": "Electric"
    },
    {
        "key": "Central Air",
        "value": "Y"
    },
    {
        "key": "Central A/C",
        "value": "true"
    }
],

这是我一直在参考的文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-aggregations-bucket-terms-aggregation.html

以下是相关的映射:

代码语言:javascript
复制
{
  "listings:366": {
    "mappings": {
      "_default_": {
        "_all": {
          "enabled": false
        },
        "dynamic_templates": [
          ...
          {
            "Cooling": {
              "path_match": "Cooling.*",
              "mapping": {
                "type": "text"
              }
            }
          },
          ...
        ],
        "properties": {
          ...
          "Cooling": {
            "type": "nested"
          },
          ...
        }
      },
      "listings": {
        "_all": {
          "enabled": false
        },
        "dynamic_templates": [
          ...
          {
            "Cooling": {
              "path_match": "Cooling.*",
              "mapping": {
                "type": "text"
              }
            }
          },
          ...
        ],
        "properties": {
          ...
          "Cooling": {
            "type": "nested",
            "properties": {
              "key": {
                "type": "text"
              },
              "value": {
                "type": "text"
              }
            }
          },
        }
      }
    }
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-23 15:35:12

如果Coolingnested类型的,那么您可以通过首先在聚合中嵌套terms聚合来实现您想要的结果,以便“深入”冷却嵌套文档:

代码语言:javascript
复制
{
  "size": 0,
  "aggs": {
    "cooling": {
      "nested": {
        "path": " Cooling"
      },
      "aggs": {
        "values": {
          "terms": {
            "field": "Cooling.key",  <--- make sure this field is mapped as keyword
            "size": 200
          }
        }
      }
    }
  }
}

更新

您的映射需要更改为:

代码语言:javascript
复制
    "properties": {
      ...
      "Cooling": {
        "type": "nested",
        "properties": {
          "key": {
            "type": "keyword"       <--- change this
          },
          "value": {
            "type": "text"
          }
        }
      },
    }
票数 1
EN

Stack Overflow用户

发布于 2021-07-23 13:35:25

尝试使用复合聚合:参见复合聚集

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68499831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档