Запрос агрегации эластичного поиска BadRequest400Exception

#php #elasticsearch

#php #elasticsearch

Вопрос:

Я пытаюсь выполнить запрос эластичного поиска в своем php-коде, но получаю эту ошибку:

 Uncaught PHP Exception ElasticsearchCommonExceptionsBadRequest400Exception: 
"{"error":{"root_cause":[{"type":"named_object_not_found_exception","reason":"[1:834] 
unable to parse BaseAggregationBuilder with name [highlight_properties]: parser not found"}]
 

Это часть моего aggs-кода моего запроса ElasticSearch:

 'aggs' => [
        'highlight_dealers' => [
            'terms' => [
                'field' => 'sorting.Id',
                'size' => 4
            ]
        ],
        'aggs' => [
            'highlight_properties' => [
                'terms' => [
                    'field' => '_id',
                    'size' => 2,
                ],
                'aggs' => [
                    'property' => [
                        'top_hits' => [
                            'size' => 1
                        ]
                    ],
                    'randomProperty' => [
                        'max' => [
                            'script' => [
                                'source' => 'new Random().nextInt()',
                                'lang' => 'painless'
                            ]
                        ]
                    ]
                ]
            ],
            'randomDealer' => [
                'avg' => [
                    'script' => [
                        'source' => 'Math.sin(109813 * doc["sorting.id"].value)',
                        'lang' => 'painless',
                    ]
                ]
            ]
        ]
    ];
 

Может быть, я неправильно вложен?

Ответ №1:

Попробуйте удалить aggs из этой части запроса

   'aggs' => [                                        <-- remove this
                'highlight_properties' => [
                    'terms' => [
                        'field' => '_id',
                        'size' => 2,
                    ],
 

Ваш новый запрос должен выглядеть следующим образом:

 'aggs' => [
        'highlight_dealers' => [
            'terms' => [
                'field' => 'sorting.Id',
                'size' => 4
            ]
        ],
            'highlight_properties' => [
                'terms' => [
                    'field' => '_id',
                    'size' => 2,
                ],
                'aggs' => [
                    'property' => [
                        'top_hits' => [
                            'size' => 1
                        ]
                    ],
                    'randomProperty' => [
                        'max' => [
                            'script' => [
                                'source' => 'new Random().nextInt()',
                                'lang' => 'painless'
                            ]
                        ]
                    ]
                ]
            ],
            'randomDealer' => [
                'avg' => [
                    'script' => [
                        'source' => 'Math.sin(109813 * doc["sorting.id"].value)',
                        'lang' => 'painless',
                    ]
                ]
        ]
    ];
 

Поскольку я не знаю вашего варианта использования, вы даже можете попробовать форматировать свой запрос в этом формате :

 {
  "aggs": {
    "highlight_dealers": {
      "terms": {
        "field": "sorting.Id",
        "size": 4
      },                              <-- note the brackets here
      "aggs": {
        "highlight_properties": {
          "terms": {
            "field": "_id",
            "size": 2
          },
          "aggs": {
            "property": {
              "top_hits": {
                "size": 1
              }
            },
            "randomProperty": {
              "max": {
                "script": {
                  "source": "new Random().nextInt()",
                  "lang": "painless"
                }
              }
            }
          }
        }
      }
    }
  }
}
 

Комментарии:

1. Я вижу, что я сделал не так, вы правы, я закрыл «highlight_dealers» слишком рано, большое спасибо!

2. @Thomas Britsom рад, что я смог вам помочь 🙂 Спасибо за принятие ответа, не могли бы вы также поддержать ответ 🙂