From b8de82d6f5c6fe7e1b7375e6bd6601d9d21610cf Mon Sep 17 00:00:00 2001 From: Kurt Thiemann Date: Wed, 9 Jul 2025 14:47:44 +0200 Subject: [PATCH] accept opensearch responses without a _source field --- src/Driver/OpenSearch/OpenSearch.php | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Driver/OpenSearch/OpenSearch.php b/src/Driver/OpenSearch/OpenSearch.php index 756dcf7..d99a64a 100644 --- a/src/Driver/OpenSearch/OpenSearch.php +++ b/src/Driver/OpenSearch/OpenSearch.php @@ -150,14 +150,16 @@ public function get(string $modelClass, mixed $id, ?ModelInterface $model = null throw $e; } - if (!isset($response->_source) || !is_object($response->_source)) { - throw new SerializeException("Received invalid document _source from OpenSearch"); - } if (!isset($response->_id) || !is_string($response->_id)) { throw new SerializeException("Received invalid document _id from OpenSearch"); } - $data = get_object_vars($response->_source); + if (isset($response->_source) && is_object($response->_source)) { + $data = get_object_vars($response->_source); + } else { + $data = []; + } + $data[$modelClass::getIdField()] = $response->_id; if ($model) { @@ -214,19 +216,21 @@ public function search(Search $search): SearchResult $result = new SearchResult(true); foreach ($response->hits->hits as $resultDocument) { - if (!isset($resultDocument->_source) || !is_object($resultDocument->_source)) { - throw new SerializeException("Received invalid document _source from OpenSearch"); - } if (!isset($resultDocument->_id) || !is_string($resultDocument->_id)) { throw new SerializeException("Received invalid document _id from OpenSearch"); } - $data = $resultDocument->_source; - $data->{$modelClassName::getIdField()} = $resultDocument->_id; + if (isset($resultDocument->_source) && is_object($resultDocument->_source)) { + $data = get_object_vars($resultDocument->_source); + } else { + $data = []; + } + + $data[$modelClassName::getIdField()] = $resultDocument->_id; /** @var ModelInterface $model */ $model = new $modelClassName(); - $model->applyData(get_object_vars($resultDocument->_source)); + $model->applyData($data); $result->add($model); } return $result;