array:1 [
  "DEBUG_OPENSEARCH_QUERY" => array:2 [
    "index" => "events"
    "body" => array:3 [
      "query" => array:1 [
        "script_score" => array:2 [
          "query" => array:1 [
            "bool" => array:2 [
              "must" => array:1 [
                0 => array:1 [
                  "wildcard" => array:1 [
                    "dep" => "35*"
                  ]
                ]
              ]
              "filter" => array:1 [
                0 => array:1 [
                  "range" => array:1 [
                    "date_fin" => array:1 [
                      "gte" => "now/d"
                    ]
                  ]
                ]
              ]
            ]
          ]
          "script" => array:1 [
            "source" => """
              \n
                                          double base = _score;\n
              \n
                                          // 1) Booster les événements qui finissent bientôt\n
                                          if (doc['date_fin'].size() > 0) {\n
                                              long today = new Date().getTime();\n
                                              long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n
                                              long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n
              \n
                                              base += (100.0 / (diffDays + 1));\n
                                          }\n
              \n
                                          // 2) Booster les événements courts\n
                                          if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n
                                              long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n
                                              long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n
                                              long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n
              \n
                                              base += (50.0 / Math.max(duration + 1, 1));\n
                                          }\n
              \n
                                          return base;\n
                                      
              """
          ]
        ]
      ]
      "from" => 100
      "size" => 20
    ]
  ]
]
{"error":{"root_cause":[{"type":"script_exception","reason":"compile error","script_stack":["... long diffDays = Math.abs(fin - today) / ( ..."," ^---- HERE"],"script":"\n double base = _score;\n\n // 1) Booster les événements qui finissent bientôt\n if (doc['date_fin'].size() > 0) {\n long today = new Date().getTime();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n base += (100.0 / (diffDays + 1));\n }\n\n // 2) Booster les événements courts\n if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n base += (50.0 / Math.max(duration + 1, 1));\n }\n\n return base;\n ","lang":"painless","position":{"offset":401,"start":376,"end":426}}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"events","node":"YcnZBNnhQ2OSMo7JVAsJYA","reason":{"type":"query_shard_exception","reason":"failed to create query: compile error","index":"events","index_uuid":"17_tYZt_TLObmDDYp0bjBQ","caused_by":{"type":"script_exception","reason":"compile error","script_stack":["... long diffDays = Math.abs(fin - today) / ( ..."," ^---- HERE"],"script":"\n double base = _score;\n\n // 1) Booster les événements qui finissent bientôt\n if (doc['date_fin'].size() > 0) {\n long today = new Date().getTime();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n base += (100.0 / (diffDays + 1));\n }\n\n // 2) Booster les événements courts\n if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n base += (50.0 / Math.max(duration + 1, 1));\n }\n\n return base;\n ","lang":"painless","position":{"offset":401,"start":376,"end":426},"caused_by":{"type":"class_cast_exception","reason":"Cannot cast from [double] to [long]."}}}}],"caused_by":{"type":"script_exception","reason":"compile error","script_stack":["... long diffDays = Math.abs(fin - today) / ( ..."," ^---- HERE"],"script":"\n double base = _score;\n\n // 1) Booster les événements qui finissent bientôt\n if (doc['date_fin'].size() > 0) {\n long today = new Date().getTime();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n base += (100.0 / (diffDays + 1));\n }\n\n // 2) Booster les événements courts\n if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n base += (50.0 / Math.max(duration + 1, 1));\n }\n\n return base;\n ","lang":"painless","position":{"offset":401,"start":376,"end":426},"caused_by":{"type":"class_cast_exception","reason":"Cannot cast from [double] to [long]."}}},"status":400} (500 Internal Server Error)

Symfony Exception

BadRequest400Exception

HTTP 500 Internal Server Error

{"error":{"root_cause":[{"type":"script_exception","reason":"compile error","script_stack":["... long diffDays = Math.abs(fin - today) / ( ..."," ^---- HERE"],"script":"\n double base = _score;\n\n // 1) Booster les événements qui finissent bientôt\n if (doc['date_fin'].size() > 0) {\n long today = new Date().getTime();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n base += (100.0 / (diffDays + 1));\n }\n\n // 2) Booster les événements courts\n if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n base += (50.0 / Math.max(duration + 1, 1));\n }\n\n return base;\n ","lang":"painless","position":{"offset":401,"start":376,"end":426}}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"events","node":"YcnZBNnhQ2OSMo7JVAsJYA","reason":{"type":"query_shard_exception","reason":"failed to create query: compile error","index":"events","index_uuid":"17_tYZt_TLObmDDYp0bjBQ","caused_by":{"type":"script_exception","reason":"compile error","script_stack":["... long diffDays = Math.abs(fin - today) / ( ..."," ^---- HERE"],"script":"\n double base = _score;\n\n // 1) Booster les événements qui finissent bientôt\n if (doc['date_fin'].size() > 0) {\n long today = new Date().getTime();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n base += (100.0 / (diffDays + 1));\n }\n\n // 2) Booster les événements courts\n if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n base += (50.0 / Math.max(duration + 1, 1));\n }\n\n return base;\n ","lang":"painless","position":{"offset":401,"start":376,"end":426},"caused_by":{"type":"class_cast_exception","reason":"Cannot cast from [double] to [long]."}}}}],"caused_by":{"type":"script_exception","reason":"compile error","script_stack":["... long diffDays = Math.abs(fin - today) / ( ..."," ^---- HERE"],"script":"\n double base = _score;\n\n // 1) Booster les événements qui finissent bientôt\n if (doc['date_fin'].size() > 0) {\n long today = new Date().getTime();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n base += (100.0 / (diffDays + 1));\n }\n\n // 2) Booster les événements courts\n if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n base += (50.0 / Math.max(duration + 1, 1));\n }\n\n return base;\n ","lang":"painless","position":{"offset":401,"start":376,"end":426},"caused_by":{"type":"class_cast_exception","reason":"Cannot cast from [double] to [long]."}}},"status":400}

Exception

OpenSearch\Common\Exceptions\ BadRequest400Exception

  1.         } elseif ($statusCode === 400 && strpos($responseBody'script_lang not supported') !== false) {
  2.             $exception = new ScriptLangNotSupportedException($responseBody);
  3.         } elseif ($statusCode === 408) {
  4.             $exception = new RequestTimeout408Exception($responseBody);
  5.         } else {
  6.             $exception = new BadRequest400Exception($responseBody);
  7.         }
  8.         $this->logRequestFail($request$response$exception);
  9.         throw $exception;
  1.                             // Skip 404 if succeeded true in the body (e.g. clear_scroll)
  2.                             $body $response['body'] ?? '';
  3.                             if (strpos($body'"succeeded":true') !== false) {
  4.                                 $ignore[] = 404;
  5.                             }
  6.                             $this->process4xxError($request$response$ignore);
  7.                         } elseif ($response['status'] >= 500) {
  8.                             $ignore $request['client']['ignore'] ?? [];
  9.                             $this->process5xxError($request$response$ignore);
  10.                         }
in vendor/react/promise/src/Internal/FulfilledPromise.php -> OpenSearch\Connections\{closure} (line 47)
  1.         try {
  2.             /**
  3.              * @var PromiseInterface<T>|T $result
  4.              */
  5.             $result $onFulfilled($this->value);
  6.             return resolve($result);
  7.         } catch (\Throwable $exception) {
  8.             return new RejectedPromise($exception);
  9.         }
  10.     }
  1.      */
  2.     public function then(
  3.         ?callable $onFulfilled null,
  4.         ?callable $onRejected null
  5.     ) {
  6.         return $this->promise()->then($onFulfilled$onRejected);
  7.     }
  8. }
  1.         ?callable $onFulfilled null,
  2.         ?callable $onRejected null,
  3.         ?callable $onProgress null
  4.     ) {
  5.         return new FutureArray(
  6.             $future->then($onFulfilled$onRejected$onProgress),
  7.             [$future'wait'],
  8.             [$future'cancel']
  9.         );
  10.     }
  1.         return function (array $requestConnection $connection, ?Transport $transport$options) use ($handler) {
  2.             $this->lastRequest = [];
  3.             $this->lastRequest['request'] = $request;
  4.             // Send the request using the wrapped handler.
  5.             $response =  Core::proxy(
  6.                 $handler($request),
  7.                 function ($response) use ($connection$transport$request$options) {
  8.                     $this->lastRequest['response'] = $response;
  9.                     if (isset($response['error']) === true) {
  1.         if (empty($request['client'])) {
  2.             unset($request['client']);
  3.         }
  4.         $handler $this->handler;
  5.         $future $handler($request$this$transport$options);
  6.         return $future;
  7.     }
  8.     public function getTransportSchema(): string
  1.         $response             = [];
  2.         $caughtException      null;
  3.         $this->lastConnection $connection;
  4.         $future $connection->performRequest(
  5.             $method,
  6.             $uri,
  7.             $params,
  8.             $body,
  9.             $options,
  1.         mixed $body null,
  2.         array $headers = [],
  3.     ): iterable|string|null {
  4.         // Provide legacy support for options.
  5.         $options $headers;
  6.         $promise $this->transport->performRequest($method$uri$params$body$options);
  7.         return $this->transport->resultOrFuture($promise$options);
  8.     }
  9. }
  1.      * @throws \Psr\Http\Client\ClientExceptionInterface
  2.      * @throws \OpenSearch\Exception\HttpExceptionInterface
  3.      */
  4.     private function performRequest(AbstractEndpoint $endpoint): iterable|string|null
  5.     {
  6.         return $this->httpTransport->sendRequest(
  7.             $endpoint->getMethod(),
  8.             $endpoint->getURI(),
  9.             $endpoint->getParams(),
  10.             $endpoint->getBody(),
  11.             $endpoint->getOptions()
  1.         $endpoint $this->endpointFactory->getEndpoint(Search::class);
  2.         $endpoint->setParams($params);
  3.         $endpoint->setIndex($index);
  4.         $endpoint->setBody($body);
  5.         return $this->performRequest($endpoint);
  6.     }
  7.     /**
  8.      * Returns information about the indexes and shards that a search request would be executed against.
  9.      *
Client->search() in src/Service/EventSearchService.php (line 244)
  1.         ];
  2.         // DEBUG OpenSearch dans les logs de Symfony
  3.         dump(['DEBUG_OPENSEARCH_QUERY' => $params]);
  4.         $response $this->client->search($params);
  5.         return [
  6.             'total'   => $response['hits']['total']['value'] ?? 0,
  7.             'results' => array_map(
  8.                 fn ($hit) => $hit['_source'],
EventSearchService->search() in src/Controller/SearchController.php (line 55)
  1.         'cp'         => $filters['cp']         ?? null,
  2.         'future_only'=> true
  3.     ];
  4.     // 🔍 Recherche OpenSearch
  5.     $osResult $search->search($osFilters$page20);
  6.     // Hydratation SQL via prepareEvent
  7.     $events = [];
  8.     foreach ($osResult['results'] as $doc) {
  1.         $this->dispatcher->dispatch($eventKernelEvents::CONTROLLER_ARGUMENTS);
  2.         $controller $event->getController();
  3.         $arguments $event->getArguments();
  4.         // call controller
  5.         $response $controller(...$arguments);
  6.         // view
  7.         if (!$response instanceof Response) {
  8.             $event = new ViewEvent($this$request$type$response$event);
  9.             $this->dispatcher->dispatch($eventKernelEvents::VIEW);
  1.         $request->headers->set('X-Php-Ob-Level', (string) ob_get_level());
  2.         $this->requestStack->push($request);
  3.         $response null;
  4.         try {
  5.             return $response $this->handleRaw($request$type);
  6.         } catch (\Throwable $e) {
  7.             if ($e instanceof \Error && !$this->handleAllThrowables) {
  8.                 throw $e;
  9.             }
  1.         $this->boot();
  2.         ++$this->requestStackSize;
  3.         $this->resetServices true;
  4.         try {
  5.             return $this->getHttpKernel()->handle($request$type$catch);
  6.         } finally {
  7.             --$this->requestStackSize;
  8.         }
  9.     }
  1.     ) {
  2.     }
  3.     public function run(): int
  4.     {
  5.         $response $this->kernel->handle($this->request);
  6.         if (Kernel::VERSION_ID >= 60400) {
  7.             $response->send(false);
  8.             if (\function_exists('fastcgi_finish_request') && !$this->debug) {
in vendor/autoload_runtime.php -> run (line 29)
  1. $app $app(...$args);
  2. exit(
  3.     $runtime
  4.         ->getRunner($app)
  5.         ->run()
  6. );
require_once('/var/www/vhosts/sortir-en-bretagne.fr/httpdocs/vendor/autoload_runtime.php') in public/index.php (line 5)
  1. <?php
  2. use App\Kernel;
  3. require_once dirname(__DIR__).'/vendor/autoload_runtime.php';
  4. return function (array $context) {
  5.     return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);
  6. };

Stack Trace

BadRequest400Exception
OpenSearch\Common\Exceptions\BadRequest400Exception:
{"error":{"root_cause":[{"type":"script_exception","reason":"compile error","script_stack":["...          long diffDays = Math.abs(fin - today) / ( ...","                             ^---- HERE"],"script":"\n                            double base = _score;\n\n                            // 1) Booster les événements qui finissent bientôt\n                            if (doc['date_fin'].size() > 0) {\n                                long today = new Date().getTime();\n                                long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n                                long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n                                base += (100.0 / (diffDays + 1));\n                            }\n\n                            // 2) Booster les événements courts\n                            if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n                                long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n                                long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n                                long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n                                base += (50.0 / Math.max(duration + 1, 1));\n                            }\n\n                            return base;\n                        ","lang":"painless","position":{"offset":401,"start":376,"end":426}}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"events","node":"YcnZBNnhQ2OSMo7JVAsJYA","reason":{"type":"query_shard_exception","reason":"failed to create query: compile error","index":"events","index_uuid":"17_tYZt_TLObmDDYp0bjBQ","caused_by":{"type":"script_exception","reason":"compile error","script_stack":["...          long diffDays = Math.abs(fin - today) / ( ...","                             ^---- HERE"],"script":"\n                            double base = _score;\n\n                            // 1) Booster les événements qui finissent bientôt\n                            if (doc['date_fin'].size() > 0) {\n                                long today = new Date().getTime();\n                                long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n                                long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n                                base += (100.0 / (diffDays + 1));\n                            }\n\n                            // 2) Booster les événements courts\n                            if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n                                long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n                                long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n                                long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n                                base += (50.0 / Math.max(duration + 1, 1));\n                            }\n\n                            return base;\n                        ","lang":"painless","position":{"offset":401,"start":376,"end":426},"caused_by":{"type":"class_cast_exception","reason":"Cannot cast from [double] to [long]."}}}}],"caused_by":{"type":"script_exception","reason":"compile error","script_stack":["...          long diffDays = Math.abs(fin - today) / ( ...","                             ^---- HERE"],"script":"\n                            double base = _score;\n\n                            // 1) Booster les événements qui finissent bientôt\n                            if (doc['date_fin'].size() > 0) {\n                                long today = new Date().getTime();\n                                long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n                                long diffDays = Math.abs(fin - today) / (1000L * 60 * 60 * 24);\n\n                                base += (100.0 / (diffDays + 1));\n                            }\n\n                            // 2) Booster les événements courts\n                            if (doc['date_deb'].size() > 0 && doc['date_fin'].size() > 0) {\n                                long deb = doc['date_deb'].value.toInstant().toEpochMilli();\n                                long fin = doc['date_fin'].value.toInstant().toEpochMilli();\n                                long duration = (fin - deb) / (1000L * 60 * 60 * 24);\n\n                                base += (50.0 / Math.max(duration + 1, 1));\n                            }\n\n                            return base;\n                        ","lang":"painless","position":{"offset":401,"start":376,"end":426},"caused_by":{"type":"class_cast_exception","reason":"Cannot cast from [double] to [long]."}}},"status":400}

  at vendor/opensearch-project/opensearch-php/src/OpenSearch/Connections/Connection.php:680
  at OpenSearch\Connections\Connection->process4xxError()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/Connections/Connection.php:338)
  at OpenSearch\Connections\Connection->OpenSearch\Connections\{closure}()
     (vendor/react/promise/src/Internal/FulfilledPromise.php:47)
  at React\Promise\Internal\FulfilledPromise->then()
     (vendor/ezimuel/ringphp/src/Future/CompletedFutureValue.php:66)
  at GuzzleHttp\Ring\Future\CompletedFutureValue->then()
     (vendor/ezimuel/ringphp/src/Core.php:341)
  at GuzzleHttp\Ring\Core::proxy()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/Connections/Connection.php:270)
  at OpenSearch\Connections\Connection->OpenSearch\Connections\{closure}()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/Connections/Connection.php:248)
  at OpenSearch\Connections\Connection->performRequest()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/Transport.php:117)
  at OpenSearch\Transport->performRequest()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/LegacyTransportWrapper.php:34)
  at OpenSearch\LegacyTransportWrapper->sendRequest()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/Client.php:2285)
  at OpenSearch\Client->performRequest()
     (vendor/opensearch-project/opensearch-php/src/OpenSearch/Client.php:1622)
  at OpenSearch\Client->search()
     (src/Service/EventSearchService.php:244)
  at App\Service\EventSearchService->search()
     (src/Controller/SearchController.php:55)
  at App\Controller\SearchController->index()
     (vendor/symfony/http-kernel/HttpKernel.php:183)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
     (vendor/symfony/http-kernel/HttpKernel.php:76)
  at Symfony\Component\HttpKernel\HttpKernel->handle()
     (vendor/symfony/http-kernel/Kernel.php:182)
  at Symfony\Component\HttpKernel\Kernel->handle()
     (vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35)
  at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run()
     (vendor/autoload_runtime.php:29)
  at require_once('/var/www/vhosts/sortir-en-bretagne.fr/httpdocs/vendor/autoload_runtime.php')
     (public/index.php:5)