'Creates or updates a Search service in the given resource group. If the
Search service already exists, all properties will be updated with the
given values.
:param resource_group_name: The name of the resource group within the
current subscription. You can obtain this value from the Azure
Resource Manager API or the portal.
:type resource_group_name: str
:param search_service_name: The name of the Azure Search service to
create or update. Search service names must only contain lowercase
letters, digits or dashes, cannot use dash as the first two or last
one characters, cannot contain consecutive dashes, and must be between
2 and 60 characters in length. Search service names must be globally
unique since they are part of the service URI
(https://<name>.search.windows.net). You cannot change the service
name after the service is created.
:type search_service_name: str
:param service: The definition of the Search service to create or
update.
:type service: :class:`SearchService
<azure.mgmt.search.models.SearchService>`
:param search_management_request_options: Additional parameters for
the operation
:type search_management_request_options:
:class:`SearchManagementRequestOptions
<azure.mgmt.search.models.SearchManagementRequestOptions>`
:param dict custom_headers: headers that will be added to the request
:param bool raw: returns the direct response alongside the
deserialized response
:param operation_config: :ref:`Operation configuration
overrides<msrest:optionsforoperations>`.
:rtype: :class:`SearchService
<azure.mgmt.search.models.SearchService>`
:rtype: :class:`ClientRawResponse<msrest.pipeline.ClientRawResponse>`
if raw=true
:raises: :class:`CloudError<msrestazure.azure_exceptions.CloudError>`'

def create_or_update(self, resource_group_name, search_service_name, service, search_management_request_options=None, custom_headers=None, raw=False, **operation_config):

    client_request_id = None
    if (search_management_request_options is not None):
        client_request_id = search_management_request_options.client_request_id
    url = '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Search/searchServices/{searchServiceName}'
    path_format_arguments = {'resourceGroupName': self._serialize.url('resource_group_name', resource_group_name, 'str'), 'searchServiceName': self._serialize.url('search_service_name', search_service_name, 'str'), 'subscriptionId': self._serialize.url('self.config.subscription_id', self.config.subscription_id, 'str')}
    url = self._client.format_url(url, **path_format_arguments)
    query_parameters = {}
    query_parameters['api-version'] = self._serialize.query('self.api_version', self.api_version, 'str')
    header_parameters = {}
    header_parameters['Content-Type'] = 'application/json;    charset=utf-8'
    if self.config.generate_client_request_id:
        header_parameters['x-ms-client-request-id'] = str(uuid.uuid1())
    if custom_headers:
        header_parameters.update(custom_headers)
    if (self.config.accept_language is not None):
        header_parameters['accept-language'] = self._serialize.header('self.config.accept_language', self.config.accept_language, 'str')
    if (client_request_id is not None):
        header_parameters['x-ms-client-request-id'] = self._serialize.header('client_request_id', client_request_id, 'str')
    body_content = self._serialize.body(service, 'SearchService')
    request = self._client.put(url, query_parameters)
    response = self._client.send(request, header_parameters, body_content, **operation_config)
    if (response.status_code not in [200, 201]):
        exp = CloudError(response)
        exp.request_id = response.headers.get('x-ms-request-id')
        raise exp
    deserialized = None
    if (response.status_code == 200):
        deserialized = self._deserialize('SearchService', response)
    if (response.status_code == 201):
        deserialized = self._deserialize('SearchService', response)
    if raw:
        client_raw_response = ClientRawResponse(deserialized, response)
        return client_raw_response
    return deserialized
