Примеры поиска 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) и элемент, связанный valuecodeс . После кода с оператором $ задает 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.