没想到取啥名 2019-11-23 11:06 采纳率: 0%
浏览 632

关于es中integer_range类型字段聚合的问题

该字段索引结构如下
图片说明

索引聚合语句如下

图片说明

求大家帮忙看看,怎么解决这问题

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-29 09:23
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在 Elasticsearch 中,integer_range 类型的字段不支持索引和聚合。为了处理这个 integer_range 字段,你需要将其转换为一个日期字段,并使用日期字段进行聚合。

    以下是修复后的示例:

    首先,我们需要创建一个新的字段来存储年份信息,并将其与 integer_range 字段关联起来。

    {
        "type": "object",
        "properties": {
            "year_info": {
                "type": "object",
                "properties": {
                    "level": {
                        "type": "string"
                    },
                    "year": {
                        "type": "number"
                    }
                },
                "required": ["level", "year"]
            }
        }
    }
    

    然后,在你的聚合查询中,你可以这样操作:

    {
      "query": {
        "bool": {
          "must": [
            {
              "match_all": {}
            }
          ],
          "filter": [
            {
              "range": {
                "year": {
                  "gte": 2011,
                  "lte": 2019
                }
              }
            }
          ]
        }
      },
      "aggs": {
        "nodes": {
          "terms": {
            "field": "indexing_db.year_info.year",
            "size": 50
          }
        }
      }
    }
    

    在这个例子中,我们首先确保所有年份都在 2011 到 2019 的范围内。然后,我们根据这些年份计算每个节点的数量。

    请注意,这个方法可能不是最优化的解决方案,因为这会生成大量的子文档(即每个年份的节点数量)。如果你的数据量非常大,你可能需要考虑其他策略,例如使用分片或使用分页功能。

    评论

报告相同问题?