Примеры поиска 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 ресурсов для с предоставленным Patientid:

GET [your-fhir-server]/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f

С помощью цепочки поиска можно найти все Encounter ресурсы, соответствующие определенному фрагменту Patientbirthdateинформации, например :

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.