FHIR-sökexempel för Azure API för FHIR

Nedan visas några exempel på hur du använder FHIR-sökåtgärder® (Fast Healthcare Interoperability Resources), inklusive sökparametrar och modifierare, sökning i kedja och omvänd kedja, sammansatt sökning, visning av nästa postuppsättning för sökresultat och sökning med en POST begäran. Mer information om sökning finns i Översikt över FHIR-sökning.

Sökresultatparametrar

_Inkluderar

_include söker över resurser efter de som innehåller den angivna parametern för resursen. Du kan till exempel söka bland MedicationRequest resurser för att bara hitta de som innehåller information om recepten för en specifik patient, vilket är parametern referencepatient. I exemplet nedan hämtas alla MedicationRequests och alla patienter som refereras från MedicationRequests:

 GET [your-fhir-server]/MedicationRequest?_include=MedicationRequest:patient

Anteckning

_include och _revinclude är begränsade till 100 objekt.

_revinclude

_revinclude gör att du kan söka i motsatt riktning som _include. Du kan till exempel söka efter patienter och sedan omvänd inkludera alla möten som refererar till patienterna:

GET [your-fhir-server]/Patient?_revinclude=Encounter:subject

_Element

_elements begränsar sökresultatet till en delmängd av fälten för att minska svarsstorleken genom att utelämna onödiga data. Parametern accepterar en kommaavgränsad lista över baselement:

GET [your-fhir-server]/Patient?_elements=identifier,active

I den här begäran får du tillbaka ett paket med patienter, men varje resurs innehåller bara identifierare och patientens aktiva status. Resurser i det här returnerade svaret innehåller värdet meta.tagSUBSETTED för för att indikera att de är en ofullständig uppsättning resultat.

Sökmodifierare

:Inte

:not gör att du kan hitta resurser där ett attribut inte är sant. Du kan till exempel söka efter patienter där könet inte är kvinnligt:

GET [your-fhir-server]/Patient?gender:not=female

Som returvärde får du alla patientposter där könet inte är kvinnligt, inklusive tomma värden (poster som anges utan kön). Detta skiljer sig från att söka efter patienter där kön är man, eftersom det inte skulle inkludera posterna utan ett specifikt kön.

:Saknas

:missing returnerar alla resurser som inte har något värde för det angivna elementet när värdet är trueoch returnerar alla resurser som innehåller det angivna elementet när värdet är false. För enkla datatypselement :missing=true matchar det alla resurser där elementet finns med tillägg men har ett tomt värde. Om du till exempel vill hitta alla Patient resurser som saknar information om födelsedatum kan du göra följande:

GET [your-fhir-server]/Patient?birthdate:missing=true

:Exakta

:exact används för string parametrar och returnerar resultat som matchar parametern exakt, till exempel i hölje och teckensammanfogning.

GET [your-fhir-server]/Patient?name:exact=Jon

Den här begäran returnerar Patient resurser som har namnet exakt samma som Jon. Om resursen hade Patienter med namn som Jonathan eller joNskulle sökningen ignorera och hoppa över resursen eftersom den inte exakt matchar det angivna värdet.

:Innehåller

:contains används för string parametrar och söker efter resurser med partiella matchningar av det angivna värdet var som helst i strängen i fältet som genomsöks. contains är skiftlägesokänsligt och tillåter teckensammanfogning. Exempel:

GET [your-fhir-server]/Patient?address:contains=Meadow

Den här begäran returnerar alla Patient resurser med address fält med värden som innehåller strängen "Meadow". Det innebär att du kan ha adresser som innehåller värden som "Meadowers" eller "59 Meadow ST" som returneras som sökresultat.

Om du vill utföra en serie sökåtgärder som omfattar flera referensparametrar kan du "kedja" serien med referensparametrar genom att lägga till dem i serverbegäran en i taget med hjälp av en punkt .. Om du till exempel vill visa alla DiagnosticReport resurser med en subject referens till en Patient resurs som innehåller en viss name:

 GET [your-fhir-server]/DiagnosticReport?subject:Patient.name=Sarah

Den här begäran returnerar alla DiagnosticReport resurser med ett patientämne med namnet "Sarah". Perioden . efter fältet Patient utför den länkade sökningen på parameterns referensparameter subject .

En annan vanlig användning av en vanlig sökning (inte en länkad sökning) är att hitta alla möten för en specifik patient. Patients har ofta en eller flera Encounters med ett ämne. Så här söker du efter alla Encounter resurser för en Patient med det angivna id:

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

Med hjälp av Patient länkad sökning kan du hitta alla Encounter resurser som matchar en viss information, till exempel birthdate:

GET [your-fhir-server]/Encounter?subject:Patient.birthdate=1987-02-20

Detta skulle göra det möjligt att inte bara söka efter Encounter resurser efter en enskild patient, utan för alla patienter som har det angivna födelsedatumvärdet.

Dessutom kan länkad sökning göras mer än en gång i en begäran med hjälp av symbolen &, vilket gör att du kan söka efter flera villkor i en begäran. I sådana fall söker länkad sökning "oberoende" efter varje parameter, i stället för att söka efter villkor som endast uppfyller alla villkor samtidigt:

GET [your-fhir-server]/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA

Detta returnerar alla Patient resurser som har "Sarah" som generalPractitioner och har en generalPractitioner som har adressen med delstaten WA. Med andra ord, om en patient hade Sarah från delstaten NY och Bill från delstaten WA båda refererade som patientens generalPractitioner, skulle returneras.

Information om scenarier där sökningen måste vara en AND åtgärd som omfattar alla villkor som en grupp finns i det sammansatta sökexemplet nedan.

Med kedjesökning kan du söka efter resurser baserat på egenskaperna för de resurser som de refererar till. Med hjälp av sökning i omvänd kedja kan du göra det tvärtom. Du kan söka efter resurser baserat på egenskaperna för resurser som refererar till dem med hjälp av _has parametern . Resursen har till exempel Observation en sökparameter patient som refererar till en patientresurs. Så här hittar du alla patientresurser som refereras av Observation med en specifik code:

GET [base]/Patient?_has:Observation:patient:code=527

Den här begäran returnerar patientresurser som refereras av Observation med koden 527.

Dessutom kan sökning i omvänd kedja ha en rekursiv struktur. Om du till exempel vill söka efter alla patienter där Observation observationen har en granskningshändelse från en viss användare janedoekan du göra följande:

GET [base]/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe

Anteckning

I Azure API för FHIR och FHIR-servern med öppen källkod som backas upp av Azure Cosmos DB är den länkade sökningen och den omvända länkade sökningen en MVP-implementering. För att utföra länkad sökning i Azure Cosmos DB går implementeringen igenom sökuttrycket och utfärdar underfrågor för att lösa de matchade resurserna. Detta görs för varje nivå i uttrycket. Om någon fråga returnerar fler än 100 resultat utlöses ett fel.

Om du vill söka efter resurser som uppfyller flera villkor samtidigt använder du sammansatt sökning som kopplar en sekvens med enstaka parametervärden med en symbol $. Det returnerade resultatet skulle vara skärningspunkten för de resurser som matchar alla villkor som anges av de anslutna sökparametrarna. Sådana sökparametrar kallas sammansatta sökparametrar och de definierar en ny parameter som kombinerar de flera parametrarna i en kapslad struktur. Om du till exempel vill hitta alla DiagnosticReport resurser som innehåller Observation ett kaliumvärde som är mindre än eller lika med 9,2:

GET [your-fhir-server]/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2

Den här begäran anger komponenten som innehåller en kod för 2823-3, som i det här fallet skulle vara kalium. Efter symbolen $ anger den intervallet för värdet för komponenten som använder lt för "mindre än eller lika med" och 9.2 för kaliumvärdeintervallet.

Sök i nästa postuppsättning

Det maximala antalet poster som kan returneras per en enskild sökfråga är 1 000. Du kan dock ha fler än 1 000 poster som matchar sökfrågan, och du kanske vill se nästa uppsättning poster efter de första 1 000 posterna som returnerades. I så fall använder du värdet för fortsättningstoken url i searchset som i resultatet Bundle nedan:

    "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"
        }
    ],

Och du skulle göra en GET-begäran för den angivna URL:en under fältet relation: next:

GET [your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd

Då returneras nästa uppsättning poster för sökresultatet. searchset är den fullständiga uppsättningen sökresultatposter och fortsättningstoken url är länken som tillhandahålls av servern för att hämta de poster som inte visas i den första uppsättningen eftersom begränsningen för det maximala antalet poster som returneras för en sökfråga.

Sök med POST

Alla sökexempel som nämns ovan har använt GET begäranden. Du kan också utföra sökåtgärder med hjälp av POST begäranden med hjälp av _search:

POST [your-fhir-server]/Patient/_search?_id=45

Den här begäran returnerar alla Patient resurser med id värdet 45. Precis som i GET-begäranden avgör servern vilken av resurserna som uppfyller villkoren och returnerar en samlingsresurs i HTTP-svaret.

Ett annat exempel på sökning med POST där frågeparametrarna skickas som formulärtext är:

POST [your-fhir-server]/Patient/_search
content-type: application/x-www-form-urlencoded

name=John

Nästa steg

I den här artikeln har du lärt dig hur du söker med hjälp av olika sökparametrar, modifierare och FHIR-sökverktyg. Mer information om FHIR-sökning finns i

FHIR® är ett registrerat varumärke som tillhör HL7 och används med tillstånd av HL7.