search method
Searches for resources in the given FHIR store according to criteria specified as query parameters.
Implements the FHIR standard search interaction
(DSTU2,
STU3,
R4,
R5) using the search semantics
described in the FHIR Search specification
(DSTU2,
STU3,
R4,
R5). Supports four methods of
search defined by the specification: * GET [base]?[parameters]
to search
across all resources. * GET [base]/[type]?[parameters]
to search
resources of a specified type. * POST [base]/_search?[parameters]
as an
alternate form having the same semantics as the GET
method across all
resources. * POST [base]/[type]/_search?[parameters]
as an alternate
form having the same semantics as the GET
method for the specified type.
The GET
and POST
methods do not support compartment searches. The
POST
method does not support application/x-www-form-urlencoded
search
parameters. On success, the response body contains a JSON-encoded
representation of a Bundle
resource of type searchset
, containing the
results of the search. Errors generated by the FHIR store contain a
JSON-encoded OperationOutcome
resource describing the reason for the
error. If the request cannot be mapped to a valid API method on a FHIR
store, a generic GCP error might be returned instead. The server's
capability statement, retrieved through capabilities, indicates what
search parameters are supported on each FHIR resource. A list of all
search parameters defined by the specification can be found in the FHIR
Search Parameter Registry
(STU3,
R4,
R5). FHIR search
parameters for DSTU2 can be found on each resource's definition page.
Supported search modifiers: :missing
, :exact
, :contains
, :text
,
:in
, :not-in
, :above
, :below
, :[type]
, :not
, and recurse
(DSTU2 and STU3) or :iterate
(R4 and R5). Supported search result
parameters: _sort
, _count
, _include
, _revinclude
, _summary=text
,
_summary=data
, and _elements
. The maximum number of search results
returned defaults to 100, which can be overridden by the _count
parameter up to a maximum limit of 1000. The server might return fewer
resources than requested to prevent excessively large responses. If there
are additional results, the returned Bundle
contains a link of
relation
"next", which has a _page_token
parameter for an opaque
pagination token that can be used to retrieve the next page. Resources
with a total size larger than 5MB or a field count larger than 50,000
might not be fully searchable as the server might trim its generated
search index in those cases. Note: FHIR resources are indexed
asynchronously, so there might be a slight delay between the time a
resource is created or changed, and the time when the change reflects in
search results. The only exception is resource identifier data, which is
indexed synchronously as a special index. As a result, searching using
resource identifier is not subject to indexing delay. To use the special
synchronous index, the search term for identifier should be in the pattern
identifier=[system]|[value]
or identifier=[value]
, and any of the
following search result parameters can be used: * _count
* _include
*
_revinclude
* _summary
* _elements
If your query contains any other
search parameters, the standard asynchronous index will be used instead.
Note that searching against the special index is optimized for resolving a
small number of matches. The search isn't optimized if your identifier
search criteria matches a large number (i.e. more than 2,000) of
resources. For a search query that will match a large number of resources,
you can avoiding using the special synchronous index by including an
additional _sort
parameter in your query. Use _sort=-_lastUpdated
if
you want to keep the default sorting order. For samples and detailed
information, see
Searching for FHIR resources
and
Advanced FHIR search features.
request
- The metadata request object.
Request parameters:
parent
- Required. Name of the FHIR store to retrieve resources from.
Value must have pattern
^projects/\[^/\]+/locations/\[^/\]+/datasets/\[^/\]+/fhirStores/\[^/\]+$
.
$fields
- Selector specifying which fields to include in a partial
response.
Completes with a HttpBody.
Completes with a commons.ApiRequestError if the API endpoint returned an error.
If the used http.Client
completes with an error when making a REST call,
this method will complete with the same error.
Implementation
async.Future<HttpBody> search(
SearchResourcesRequest request,
core.String parent, {
core.String? $fields,
}) async {
final body_ = convert.json.encode(request);
final queryParams_ = <core.String, core.List<core.String>>{
if ($fields != null) 'fields': [$fields],
};
final url_ = 'v1/' + core.Uri.encodeFull('$parent') + '/fhir/_search';
final response_ = await _requester.request(
url_,
'POST',
body: body_,
queryParams: queryParams_,
);
return HttpBody.fromJson(response_ as core.Map<core.String, core.dynamic>);
}