【问题标题】:Elasticsearch aggregate function error on laravellaravel 上的 Elasticsearch 聚合函数错误
【发布时间】:2023-04-02 20:11:01
【问题描述】:

在使用聚合与 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","re​​ason":"失败 解析搜索源。预期的字段名称,但得到 [START_OBJECT]"}],"type":"search_phase_execution_exception","re​​ason":"all 碎片 失败","阶段":"查询","分组":true,"failed_shards":[{"shard":0,"index":"default","node":"BcRQOVhkS1SwTlvYPCEfHg","re​​ason":{ “类型”:“解析异常”,“原因”:“失败 解析搜索源。预期的字段名称,但得到 [START_OBJECT]"}}]},"状态":400}

有人知道解决办法吗?

【问题讨论】:

    标签: php laravel elasticsearch


    【解决方案1】:

    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"]]
         ]);
    

    【讨论】:

    • 是的,解决了这个错误,但我仍然在 GuzzleConnection.php 第 277 行收到另一个错误 BadRequest400Exception:{"error":{"root_cause":[{"type":"search_parse_exception","re​​ason ":"在 [aggs] 中找不到聚合器类型 [group_by_law_year]","line":1,"col":92}],"type":"search_phase_execution_exception","re​​ason":"所有分片失败","阶段":"查询","分组":true,"failed_shards":[{"shard":0,"index":"default","node":"BcRQOVhkS1SwTlvYPCEfHg","re​​ason":{"type": "search_parse_exception","re​​ason":"在 [aggs] 中找不到聚合器类型 [group_by_law_year]","line":1,"col":92}}]},"status":400}
    • 您的第二个参数中是否包含aggs 令牌?
    • 这是我运行 dd($years): "2013 2012 2013 "时的结果。有帮助吗?
    • 这是映射属性:protected $mappingProperties = array( 'law_year' => [ 'type' => 'string', "analyzer" => "standard", ], );在数据库中 law_year 字段是一个整数,也许是这个问题?
    • 不,这可能不是问题所在。您使用的代码与我在回答中写的完全相同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2022-01-17
    相关资源
    最近更新 更多