Примеры поиска FHIR
Ниже приведены некоторые примеры вызовов API поиска ресурсов быстрого взаимодействия в сфере здравоохранения (FHIR®), в которых представлены различные параметры поиска, модификаторы, цепочки и обратные цепочки поиска, составной поиск, POST
поисковые запросы и многое другое. Общие сведения об основных понятиях поиска FHIR см. в статье Обзор поиска FHIR.
Параметры результата поиска
_include
_include
позволяет выполнять поиск экземпляров ресурсов и включать в результаты другие ресурсы, на которые ссылаются экземпляры целевых ресурсов. Например, можно использовать для _include
запроса MedicationRequest
ресурсов и ограничения поиска рецептами для конкретного пациента. Затем служба FHIR вернет ресурсы, MedicationRequest
а также указанный Patient
ресурс. В приведенном ниже примере запрос извлекает все MedicationRequest
экземпляры ресурсов в базе данных и всех пациентов, на которые ссылаются MedicationRequest
экземпляры:
GET {{FHIR_URL}}/MedicationRequest?_include=MedicationRequest:patient
Примечание
Служба FHIR в службах azure Health Data Services ограничивает поиск с _include
и _revinclude
для возврата не более 100 элементов.
_revinclude
_revinclude
позволяет выполнять поиск экземпляров ресурсов и включать в результаты другие ресурсы, ссылающиеся на экземпляры целевых ресурсов. Например, можно искать пациентов, а затем обратно включать все встречи, ссылающиеся на пациентов:
GET {{FHIR_URL}}/Patient?_revinclude=Encounter:subject
_elements
_elements
сужает сведения в результатах поиска до подмножества элементов, определенных для типа ресурса. Параметр _elements
принимает разделенный запятыми список базовых элементов:
GET {{FHIR_URL}}/Patient?_elements=identifier,active
В приведенном выше запросе вы получите набор пациентов, но каждая запись будет включать только идентификаторы и активное состояние пациента. Записи в ответе будут содержать meta.tag
значение SUBSETTED
, указывающее, что включены не все элементы, определенные для ресурса.
Модификаторы поиска
:not
:not
позволяет находить ресурсы с элементом, который не имеет заданного значения. Например, можно найти пациентов, которые не являются женщинами:
GET {{FHIR_URL}}/Patient?gender:not=female
Взамен вы получите все Patient
ресурсы, значение элемента которых gender
не female
равно , включая пациентов без указанного значения пола. Это отличается от поиска Patient
ресурсов с гендерным значением male
, так как это будет игнорировать пациентов без указанного пола.
:missing
:missing
возвращает все ресурсы, которые не имеют значения для указанного элемента при :missing=true
. Кроме того, возвращает все ресурсы, :missing
содержащие указанный элемент, если .:missing=false
Для простых элементов типа данных будет соответствовать для всех ресурсов, где элемент присутствует, :missing=true
но имеет пустое значение. Например, если вы хотите найти все Patient
ресурсы, в которых отсутствуют сведения birthdate
, можно вызвать:
GET {{FHIR_URL}}/Patient?birthdate:missing=true
:exact
:exact
используется для поиска элементов с типами string
данных и возвращает положительное значение, если значение параметра точно соответствует регистру и полной последовательности символов значения элемента.
GET {{FHIR_URL}}/Patient?name:exact=Jon
Этот запрос возвращает Patient
ресурсы с given
именем Jon
или family
. Если бы были пациенты с такими именами, как Jonathan
или JON
, поиск будет игнорировать эти ресурсы, так как их имена не соответствуют точно указанному значению.
:contains
:contains
используется для string
запроса элементов типа и допускает совпадения с указанным значением в любом месте поля. contains
не учитывает регистр и распознает совпадающие строки, объединенные с другими символами. Например:
GET {{FHIR_URL}}/Patient?address:contains=Meadow
Этот запрос вернет все Patient
ресурсы с полями address
элементов, содержащими строку "Meadow" (без учета регистра). Это означает, что у вас могут быть адреса с такими значениями, как "Meadows Lane", "Pinemeadow Place" или "Meadowlark St", которые возвращают положительные совпадения.
Поиск в цепочке
Для выполнения операций поиска, охватывающих элементы, содержащиеся в ресурсе, на который указывает ссылка, можно "связать" ряд параметров вместе с .
. Например, если вы хотите просмотреть все DiagnosticReport
ресурсы со ссылкой subject
на пациента, указанного в :name
GET {{FHIR_URL}}/DiagnosticReport?subject:Patient.name=Sarah
Этот запрос вернет все DiagnosticReport
ресурсы с пациентом с именем "Сара". Указывает .
при поиске в цепочке name
на элемент в ресурсе, на который ссылается Patient
ссылка.
Еще одним распространенным использованием поиска FHIR является поиск всех встреч для конкретного пациента. Выполнение обычного (без цепного) поиска Encounter
ресурсов, ссылающихся на Patient
с помощью заданного id
:
GET {{FHIR_URL}}/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
С помощью цепочки поиска можно найти все Encounter
ресурсы, которые ссылаются на пациентов, сведения которых соответствуют параметру поиска. В приведенном ниже примере показано, как искать встречи, ссылающиеся на пациентов, суженных с помощью birthdate
:
GET {{FHIR_URL}}/Encounter?subject:Patient.birthdate=1987-02-20
При этом будут возвращены все Encounter
экземпляры, ссылающиеся на пациентов с указанным birthdate
значением.
Кроме того, можно инициировать несколько цепочек поиска с помощью &
оператора , который позволяет выполнять поиск по нескольким ссылкам в одном запросе. В таких случаях с &
последовательной поиск "независимо" сканирует каждое значение элемента:
GET {{FHIR_URL}}/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA
Это вернет все Patient
ресурсы, которые имеют ссылку на "Сара" в качестве generalPractitioner
ссылки на generalPractitioner
, которая имеет адрес в штате Вашингтон. Другими словами, если бы у пациента была generalPractitioner
по имени Сара из штата Нью-йорк и другой generalPractitioner
названный Билл из штата Вашингтон, это соответствовало бы условиям для положительного совпадения при выполнении этого поиска.
Сценарии, в которых для поиска требуется логическое условие AND, которое строго проверяет значения парных элементов, см. в примерах составного поиска ниже.
Поиск в обратной цепочке
Использование обратного цепочки поиска в FHIR позволяет искать экземпляры целевых ресурсов, на которые ссылаются другие ресурсы. Иными словами, можно искать ресурсы на основе свойств ресурсов, которые на них ссылаются. Для этого используется _has
параметр . Например, Observation
ресурс имеет параметр patient
поиска, который проверяет наличие ссылки на Patient
ресурс. Чтобы найти все Patient
ресурсы, на которые ссылается объект Observation
с определенным code
:
GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527
Этот запрос возвращает Patient
ресурсы, на которые ссылаются Observation
ресурсы с помощью кода 527
.
Кроме того, обратный цепной поиск может иметь рекурсивную структуру. Например, если вы хотите найти всех пациентов, на которые Observation
ссылается объект , где на наблюдение ссылается конкретный практикующий AuditEvent
специалист с именем janedoe
:
GET {{FHIR_URL}}/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe
Составной поиск
Для поиска ресурсов, содержащих элементы, сгруппированные в виде логически связанных пар, FHIR определяет составной поиск, который объединяет значения одного параметра вместе с $
оператором , формируя связанную пару параметров. В составном поиске положительное совпадение происходит, когда пересечение значений элементов удовлетворяет всем условиям, заданным в параметрах парного поиска. Например, если требуется найти все DiagnosticReport
ресурсы, содержащие значение калия меньше 9.2
:
GET {{FHIR_URL}}/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2
В этом случае парными элементами будут code
элемент (из Observation
ресурса, на который ссылается как result
) и элемент, связанный value
code
с . После кода с оператором $
задает value
условие lt
как (для "меньше") 9.2
(для значения калия ммоль/l).
Параметры составного поиска также можно использовать для фильтрации нескольких значений кода компонента с помощью логического ИЛИ. Например, для запроса на наблюдения с диастолическим АД больше 90 ИЛИ систолическим ад. давление больше 140:
GET {{FHIR_URL}}/Observation?component-code-value-quantity=http://loinc.org|8462-4$gt90,http://loinc.org|8480-6$gt140
Обратите внимание, как ,
работает как логический оператор OR между двумя условиями.
Просмотр следующего набора записей
Максимальное количество ресурсов, которые могут быть возвращены одновременно из поискового запроса, составляет 1000. Однако у вас может быть более 1000 экземпляров ресурсов, соответствующих поисковому запросу, и вы хотите получить следующий набор результатов после первых 1000 записей. В таком случае следует использовать значение токена url
продолжения (т. е. "next"
) в пакетеsearchset
, возвращенном из поиска:
"resourceType": "Bundle",
"id": "98731cb7-3a39-46f3-8a72-afe945741bd9",
"meta": {
"lastUpdated": "2021-04-22T09:58:16.7823171+00:00"
},
"type": "searchset",
"link": [
{
"relation": "next",
"url": "{{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd"
},
{
"relation": "self",
"url": "{{FHIR_URL}}/Patient?_sort=_lastUpdated"
}
],
Вы выполните GET
запрос на указанный URL-адрес:
GET {{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd
При этом будет возвращен следующий набор записей для результатов поиска. Пакет searchset
— это полный набор записей результатов поиска, а маркер url
продолжения — это ссылка, предоставляемая службой FHIR для получения записей, которые не помещаются в первое подмножество (из-за ограничения на максимальное количество записей, возвращаемых для одной страницы).
Поиск с помощью POST
Все приведенные выше примеры поиска используют GET
запросы. Однако можно также выполнять вызовы API поиска FHIR, используя POST
с параметром _search
:
POST {{FHIR_URL}}/Patient/_search?_id=45
Этот запрос вернет Patient
экземпляр ресурса с заданным id
значением. Как и в случае с GET
запросами, сервер определяет, какие экземпляры ресурсов удовлетворяют условиям, и возвращает пакет в ОТВЕТе HTTP.
Еще одна функция поиска с POST
помощью позволяет отправлять параметры запроса в виде текста формы:
POST {{FHIR_URL}}/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
Дальнейшие действия
В этой статье вы узнали о поиске в FHIR с помощью параметров поиска, модификаторов и других методов. Дополнительные сведения о поиске FHIR см. в разделе
FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.