Примеры поиска FHIR для Azure API для FHIR
Ниже приведены некоторые примеры операций поиска ресурсов быстрого взаимодействия в сфере здравоохранения (FHIR®), включая параметры и модификаторы поиска, поиск по цепочке и обратной цепочке, составной поиск, просмотр следующего набора записей для результатов поиска и поиск по запросу POST
. Дополнительные сведения о поиске см. в статье Обзор поиска FHIR.
Параметры результатов поиска
_Включают
_include
выполняет поиск ресурсов, которые содержат указанный параметр ресурса. Например, можно выполнить поиск по MedicationRequest
ресурсам, чтобы найти только те, которые содержат сведения о рецептах для конкретного пациента, то есть reference
параметр patient
. В приведенном ниже примере это приведет к извлечению MedicationRequests
всех пациентов и всех пациентов, на которые ссылается :MedicationRequests
GET [your-fhir-server]/MedicationRequest?_include=MedicationRequest:patient
Примечание
_include и _revinclude ограничены 100 элементами.
_revinclude
_revinclude
позволяет выполнять поиск в противоположном направлении как _include
. Например, можно искать пациентов, а затем обратно включать все встречи, ссылающиеся на пациентов:
GET [your-fhir-server]/Patient?_revinclude=Encounter:subject
_Элементы
_elements
сужает результат поиска до подмножества полей, чтобы уменьшить размер ответа, пропуская ненужные данные. Параметр принимает разделенный запятыми список базовых элементов:
GET [your-fhir-server]/Patient?_elements=identifier,active
В этом запросе вы получите пакет пациентов, но каждый ресурс будет включать только идентификаторы и активное состояние пациента. Ресурсы в этом возвращенном ответе meta.tag
будут содержать значение SUBSETTED
, указывающее, что они являются неполным набором результатов.
Модификаторы поиска
:Не
:not
позволяет находить ресурсы, для которых атрибут не имеет значения true. Например, можно искать пациентов, у которых пол не женский:
GET [your-fhir-server]/Patient?gender:not=female
В качестве возвращаемого значения вы получите все записи пациентов, где пол не является женским, включая пустые значения (записи, указанные без пола). Это отличается от поиска пациентов, где пол является мужчиной, так как это не будет включать записи без определенного пола.
:Отсутствует
:missing
Возвращает все ресурсы, не имеющие значения для указанного элемента, если значение равно true
, и возвращает все ресурсы, содержащие указанный элемент, если значение равно false
. Для простых элементов типа данных будет соответствовать для всех ресурсов, где элемент присутствует с расширениями, :missing=true
но имеет пустое значение. Например, если вы хотите найти все Patient
ресурсы, в которых отсутствуют сведения о дате рождения, можно сделать следующее:
GET [your-fhir-server]/Patient?birthdate:missing=true
:Точное
:exact
используется для string
параметров и возвращает результаты, которые точно соответствуют параметру, например в регистре и сцепях символов.
GET [your-fhir-server]/Patient?name:exact=Jon
Этот запрос возвращает Patient
ресурсы, имена которых совпадают Jon
с именем . Если в ресурсе были пациенты с такими именами, как Jonathan
или joN
, поиск будет игнорировать и пропускать ресурс, так как он не совсем соответствует указанному значению.
:Содержит
:contains
используется для string
параметров и ищет ресурсы с частичным совпадением указанного значения в любом месте строки в искомом поле.
contains
не учитывает регистр и допускает объединение символов. Например:
GET [your-fhir-server]/Patient?address:contains=Meadow
Этот запрос вернет все Patient
ресурсы с полями со значениями address
, содержащими строку "Meadow". Это означает, что в результатах поиска могут быть возвращены адреса с такими значениями, как "Meadowers" или "59 Meadow ST".
Поиск в цепочке
Чтобы выполнить ряд операций поиска, охватывающих несколько ссылочных параметров, можно "связать" ряд ссылочных параметров, добавив их в запрос сервера по одному с помощью точки .
. Например, если вы хотите просмотреть все DiagnosticReport
ресурсы со ссылкой subject
на Patient
ресурс, который включает определенный name
:
GET [your-fhir-server]/DiagnosticReport?subject:Patient.name=Sarah
Этот запрос вернет все DiagnosticReport
ресурсы с субъектом пациента с именем "Сара". Период .
после того, как поле Patient
выполняет поиск в цепочке для ссылочного subject
параметра параметра.
Другим распространенным использованием регулярного поиска (а не поиска в цепочке) является поиск всех встреч для конкретного пациента.
Patient
с часто имеет один или несколько Encounter
с субъектом. Поиск всех Encounter
ресурсов для с предоставленным Patient
id
:
GET [your-fhir-server]/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
С помощью цепочки поиска можно найти все Encounter
ресурсы, соответствующие определенному фрагменту Patient
birthdate
информации, например :
GET [your-fhir-server]/Encounter?subject:Patient.birthdate=1987-02-20
Это позволит не только искать Encounter
ресурсы для одного пациента, но и для всех пациентов с указанным значением даты рождения.
Кроме того, поиск в цепочке можно выполнить несколько раз в одном запросе с помощью символа &
, который позволяет искать несколько условий в одном запросе. В таких случаях поиск в цепочке "независимо" выполняет поиск по каждому параметру вместо того, чтобы искать условия, которые удовлетворяют только всем условиям одновременно:
GET [your-fhir-server]/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA
При этом будут возвращены все Patient
ресурсы с "Sarah" в generalPractitioner
качестве и с адресом generalPractitioner
с состоянием WA. Другими словами, если у пациента была Сара из штата Нью-Йорк и Билл из штата WA оба ссылаются в качестве пациента generalPractitioner
, будет возвращен.
Сценарии, в которых поиск должен быть операцией, охватывающей AND
все условия в виде группы, см. в примере составного поиска ниже.
Поиск обратной цепочки
Поиск по цепочке позволяет искать ресурсы на основе свойств ресурсов, на которые они ссылаются. Использование обратного поиска цепочки позволяет сделать это наоборот. Вы можете искать ресурсы на основе свойств ресурсов, которые на них ссылаются, используя _has
параметр . Например, Observation
ресурс имеет параметр patient
поиска, ссылающийся на ресурс Patient. Чтобы найти все ресурсы patient, на которые ссылается Observation
конкретный объект , выполните следующие code
действия:
GET [base]/Patient?_has:Observation:patient:code=527
Этот запрос возвращает ресурсы Patient, на которые ссылается Observation
с помощью кода 527
.
Кроме того, обратный поиск по цепочке может иметь рекурсивную структуру. Например, если вы хотите найти всех пациентов, у которых Observation
в наблюдении есть событие аудита от определенного пользователя janedoe
, можно выполнить следующие действия:
GET [base]/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe
Примечание
В Azure API для FHIR и сервере FHIR с открытым кодом, поддерживаемом Azure Cosmos DB, цепочки поиска и обратные цепочки поиска являются реализацией MVP. Чтобы выполнить поиск по цепочке в Azure Cosmos DB, реализация проходит по выражению поиска и выдает вложенные запросы для разрешения сопоставленных ресурсов. Это делается для каждого уровня выражения. Если какой-либо запрос возвращает более 100 результатов, будет выдана ошибка.
Составной поиск
Для поиска ресурсов, соответствующих нескольким условиям одновременно, используйте составной поиск, который объединяет последовательность значений одного параметра с символом $
. Возвращенным результатом будет пересечение ресурсов, соответствующих всем условиям, заданным параметрами объединяемого поиска. Такие параметры поиска называются параметрами составного поиска и определяют новый параметр, объединяющий несколько параметров во вложенной структуре. Например, если вы хотите найти все DiagnosticReport
ресурсы, содержащие Observation
калий со значением меньше или равным 9,2, выполните следующие действия:
GET [your-fhir-server]/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2
В этом запросе указывается компонент, содержащий код 2823-3
, который в данном случае будет калием. После символа $
он указывает диапазон значений для компонента, используя lt
для параметра "меньше или равно" и 9.2
для диапазона значений калия.
Поиск в следующем наборе записей
Максимальное количество записей, которые могут быть возвращены для одного поискового запроса, составляет 1000. Однако у вас может быть более 1000 записей, соответствующих поисковому запросу, и может потребоваться просмотреть следующий набор записей после первых 1000 записей, которые были возвращены. В этом случае следует использовать значение токена url
продолжения в searchset
, как в приведенном Bundle
ниже результате:
"resourceType": "Bundle",
"id": "98731cb7-3a39-46f3-8a72-afe945741bd9",
"meta": {
"lastUpdated": "2021-04-22T09:58:16.7823171+00:00"
},
"type": "searchset",
"link": [
{
"relation": "next",
"url": "[your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd"
},
{
"relation": "self",
"url": "[your-fhir-server]/Patient?_sort=_lastUpdated"
}
],
И вы выполните запрос GET для предоставленного URL-адреса в поле relation: next
:
GET [your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd
При этом будет возвращен следующий набор записей для результата поиска. — searchset
это полный набор записей результатов поиска, а маркер url
продолжения — это ссылка, предоставляемая сервером для получения записей, которые не отображаются в первом наборе из-за ограничения на максимальное количество записей, возвращаемых для поискового запроса.
Поиск с помощью POST
Все приведенные выше примеры поиска использовали GET
запросы. Операции поиска также можно выполнять с помощью POST
запросов с помощью _search
:
POST [your-fhir-server]/Patient/_search?_id=45
Этот запрос вернет все Patient
ресурсы со значением id
45. Как и в запросах GET, сервер определяет, какой из наборов ресурсов соответствует условиям, и возвращает ресурс пакета в HTTP-ответе.
Еще один пример поиска с помощью POST, где параметры запроса отправляются в виде текста формы:
POST [your-fhir-server]/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
Дальнейшие действия
Из этой статьи вы узнали, как выполнять поиск с помощью различных параметров поиска, модификаторов и средств поиска FHIR. Дополнительные сведения о поиске FHIR см. в разделе
FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.