diff --git a/src/Driver/OpenSearch/OpenSearch.php b/src/Driver/OpenSearch/OpenSearch.php index 6b68983..854ad31 100644 --- a/src/Driver/OpenSearch/OpenSearch.php +++ b/src/Driver/OpenSearch/OpenSearch.php @@ -109,6 +109,21 @@ protected function buildUrl(string ...$path): string return "/" . implode("/", array_map(rawurlencode(...), $path)); } + /** + * Build a URL with query parameters + * @param string[] $path + * @param string[] $parameters + * @return string + */ + protected function buildParameterizedUrl(array $path, array $parameters = []): string + { + $url = $this->buildUrl(...$path); + if (!empty($parameters)) { + $url .= "?" . http_build_query($parameters); + } + return $url; + } + /** * Save the model * @@ -212,7 +227,7 @@ public function search(Search $search): SearchResult $response = $this->request( "GET", - $this->buildUrl($modelClassName::getName(), "_search"), + $this->buildParameterizedUrl([$modelClassName::getName(), "_search"], $search->getParameters()), $search->getSearchQuery() ); if (!isset($response->hits) || !is_object($response->hits) || !isset($response->hits->hits) || !is_array($response->hits->hits)) { diff --git a/src/Search/Search.php b/src/Search/Search.php index 3f8a0cc..fb83de9 100644 --- a/src/Search/Search.php +++ b/src/Search/Search.php @@ -11,22 +11,35 @@ class Search { /** - * @var string|null + * The class name of the model to search + * @var class-string|null */ protected ?string $modelClassName = null; /** + * The search query * @var array */ protected array $searchQuery = []; + /** + * Additional parameters for the search + * @var string[] + */ + protected array $parameters = []; + /** * Search constructor. * @param array $searchQuery + * @param array $parameters */ - public function __construct(array $searchQuery = []) + public function __construct( + array $searchQuery = [], + array $parameters = [], + ) { $this->searchQuery = $searchQuery; + $this->parameters = $parameters; } /** @@ -38,7 +51,15 @@ public function getSearchQuery(): array } /** - * @param string|null $modelClassName + * @return string[] + */ + public function getParameters(): array + { + return $this->parameters; + } + + /** + * @param class-string|null $modelClassName * @return Search */ public function setModelClassName(?string $modelClassName): Search @@ -54,4 +75,4 @@ public function getModelClassName(): ?string { return $this->modelClassName; } -} \ No newline at end of file +}