PHP 调用 ES API 小插曲

描述

kibana测试语句

GET products/products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "category_id": "1"
          }
        }
      ]
    }
  },
  "aggs": {
    "single_category_avg_price": {
      "avg": {
        "field": "price"
      }
    },
    "all":{
      "global": {},
      "aggs": {
        "all_brand_avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}

复制到php执行,结果额~~~,弱类型语言的悲剧

$result = Product::searchRaw( [
            "query" => [
                "bool" => [
                    "must" => [
                        [
                            "match" => [
                                "category_id" => $categoryId
                            ]
                        ]
                    ]
                ]
            ],
            "aggs"  => [
                "single_category_avg_price" => [
                    "avg" => [
                        "field" => "price"
                    ]
                ],
                "all"                       => [
                    "global" =>[],
                    "aggs"   => [
                        "all_category_avg_price" => [
                            "avg" => [
                                "field" => "price"
                            ]
                        ]
                    ]
                ]
            ]
        ] );

报错global应该是一个对象

{
    "error": {
        "root_cause": [{
            "type": "parsing_exception",
            "reason": "Expected [START_OBJECT] under [global], but got a [START_ARRAY] in [all]",
            "line": 1,
            "col": 139
        }],
        "type": "parsing_exception",
        "reason": "Expected [START_OBJECT] under [global], but got a [START_ARRAY] in [all]",
        "line": 1,
        "col": 139
    },
    "status": 400
}

修改代码解决

$result = Product::searchRaw( [
            "query" => [
                "bool" => [
                    "must" => [
                        [
                            "match" => [
                                "category_id" => $categoryId
                            ]
                        ]
                    ]
                ]
            ],
            "aggs"  => [
                "single_category_avg_price" => [
                    "avg" => [
                        "field" => "price"
                    ]
                ],
                "all"                       => [
                    "global" =>new \stdClass(),//修改这里 传递对象
                    "aggs"   => [
                        "all_category_avg_price" => [
                            "avg" => [
                                "field" => "price"
                            ]
                        ]
                    ]
                ]
            ]
        ] );
本作品采用《CC 协议》,转载必须注明作者和本文链接
yourself
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!