Caching on Searching
Client-side caching is, as caching in general, a mechanism for achieving better performance although it must be applied with caution, especially when used with clinical content.
Use of events for cache invalidation, as described in Client-side caching , might not be immediately available to a client. As described in Client-side caching, caching of information from services in the Clinical Domain is not recommended, with the Patient service being an exception.
Client-side caching of information from the more stable Administrative Domain must be considered.
In the following, focus is on server-side caching applied upon search operations and how a client can influence it.
eHealth Infrastructure Services with Server-side Caching on Searching
It can generally be assumed that the caching is based on the principles described in HAPI FHIR Search Result Caching. When interacting with custom operations, caching is specific to the operation itself.
Patient Service
Search results will be reused for 1 minute
This cache is used when identical searches are performed (same search parameters)
This means search results can be up to 1 minute stale!
Search results for a particular bundle ID is cached in the database for 1 hour
This cache is used when paging through the result bundle of a particular search
Max value for
max-results
header is1000
Cache-Control: nostore, max-results=1000
Default page size is 20
Maximum page size is 200
Clients can request a particular page size by setting the
_count
parameter
Person$match does not employ any caching
internally, it first searches for a Patient with the provided CRN in the local database (does not use the search result cache, for technical reasons)
If a patient exists, the information from that patient is returned
If a patient does not exist, a request is sent to the CPR registry to lookup the information
The result of this request is not cached or persisted
Infrastructure note: Sticky sessions are not required as the cache is stored in the database.
Disabling Server-side Caching on Searching
If your use case requires that search results are not cached you have the opportunity to opt out of this using http-headers on your client request:
In a HAPI FHIR-based client, opt-out can be achieved like this:
Filtering on Searching with Included Resources
This functionality is available from eHealth Infrastructure Release 6.1 when including referenced ClinicalImpression in a Task search. It may later be extended to other resource types.
For the primary resource, it is possible to verify search parameters against the security token before performing the actual search against the database. This ensures that the user is allowed access to all resources found by the search.
When a search operation includes references resources, however, this cannot be determined up front. In that case, access is checked for each included resource just before a page of search results is returned to the client. Previously, an error would be returned to the client in case of inadvertent security violations. This behavior has now been changed to a filtering mechanism instead. Any included resources that the user is not allowed to access are removed from the search result returned to the client.
When resources have been removed due to access control, an OperationOutcome is included in the search result, where particular elements contains the following:
OperationOutcome.issue.severity:
warning
OperationOutcome.issue.code:
suppressed
OperationOutcome.issue.diagnostics:
Some included resources were filtered due to access constraints for the user