首页 文章

lalavel上的弹性搜索聚合函数错误

提问于
浏览
1

使用聚合与laravel集成时,Elasticsearch会出错 . 这是我的代码:

$laws_y = Law::searchByQuery([
            'multi_match' => [
                'query' => $years,
                'fields' => ["law_year"]
            ],
            "aggs" => [
                "group_by_law_year" => ["terms" => ['field' => ["law_year"]]]
            ]
        ]);

我收到以下错误:

GuzzleConnection.php第277行中的BadRequest400Exception:{“error”:{“root_cause”:[{“type”:“parse_exception”,“reason”:“无法解析搜索源 . 预期字段名称但得到[START_OBJECT]”} ],“type”:“search_phase_execution_exception”,“reason”:“所有分片失败”,“阶段”:“查询”,“分组”:true,“failed_shards”:[{“shard”:0,“index”: “default”,“node”:“BcRQOVhkS1SwTlvYPCEfHg”,“reason”:{“type”:“parse_exception”,“reason”:“未能解析搜索源 . 预期字段名称但得到[START_OBJECT]”}}}}, “状态”:400}

有谁知道解决方案?

1 回答

  • 2

    the Elasticquent documentation开始, searchByQuery 函数采用以下参数(请参阅source here):

    • query - 您的ElasticSearch查询

    • aggregations - 您希望返回的聚合 .

    • sourceFields - 仅返回设置为所选字段的限制

    • limit - 要返回的记录数

    • offset - 设置记录偏移量(用于分页结果)

    • sort - 您的排序查询

    在您的调用中,您需要将查询(第一个参数)与聚合(第二个参数)分开 . 这样做是这样的:

    $laws_y = Law::searchByQuery([
            'multi_match' => [
                'query' => $years,
                'fields' => ["law_year"]
            ]
         ],
         [
            "group_by_law_year" => ["terms" => ['field' => "law_year"]]
         ]);
    

相关问题