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
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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