账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    elasticsearch的bucket_script怎么使用上一级的bucket_path,如果不能使用有什么其他解决方式?
    • 纯天然无毒无添加防腐剂2020-01-01 00:00
    61
    0

    如题目,我的请求json如下:

    {
      "size": 0, 
      "aggs": {
        "car_type": {
          "terms": {
            "field": "screenName",
            "size": 10
          },
          "aggs": {
            "active_num": {
              "terms": {
                "field": "activeNum",
                "size": 10
              },
              "aggs": {
                "active_count": {
                  "value_count": {
                    "field": "activeNum"
                  }
                },
                "result" : {
                  "bucket_script": {
                    "buckets_path": {
                      "count1" : "car_type>all_count",
                      "count2" : "active_count"
                },
                    "script": "params.count2/params.count1"
                  }
                }
              }
            },
            "all_count": {
              "value_count": {
                "field": "activeNum"
              }
            }
          }
        }
      }
    }

    我想在result中使用car_type>all_count这样使用的话会报错如下:

    No aggregation found for path [car_type>all_count]

    找不到这个path,看了官网确实不能这么实用,然后我更换了使用的位置,请求如下:

    {
      "size": 0, 
      "aggs": {
        "car_type": {
          "terms": {
            "field": "screenName",
            "size": 10
          },
          "aggs": {
            "active_num": {
              "terms": {
                "field": "activeNum",
                "size": 10
              },
              "aggs": {
                "active_count": {
                  "value_count": {
                    "field": "activeNum"
                  }
                }
              }
            },
            "all_count": {
              "value_count": {
                "field": "activeNum"
              }
            },
            "result" : {
              "bucket_script": {
                 "buckets_path": {
                    "count1" : "all_count",
                    "count2" : "active_num>active_count"
                  },
                  "script": "params.count2/params.count1"
              }
            }
          }
        }
      }
    }

    这样的话就有了另一个错,因为active_count的值会有多个,报错如下:

    buckets_path must reference either a number value or a single value numeric metric aggregation, got: java.lang.Object[]

    我该怎样才能达到我的目的呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Elasticsearch中,bucket_script是用来处理和管理索引级别的配置的。默认情况下,索引级别配置是存储在当前索引的顶级级别的bucket_path中。但是,如果你想在其他索引中使用同一个bucket_script,你需要创建一个新的索引,并将你想要在其中使用的bucket_path设置为该索引的顶级级别。

      以下是一个示例:

      1. 创建一个新的索引:

      PUT /new_index { "name": "my_new_index", "settings": { "bucket_path": "/path/to/your/bucket" } }

      1. 在你想要使用这个bucket_script的索引中创建一个bucket_script:

      PUT /my_new_index/_source/_script { "script": "put" }

      在这个示例中,"put"是一个简单的put命令,它将在索引的"put"级别配置中使用你的bucket_script。

      如果你不能在其他索引中使用同一个bucket_script,你可能需要创建一个独立的索引,或者在你想要使用它的地方直接在该索引中使用它。然而,这可能会增加索引的复杂性和维护成本。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部