Manipulating FHIR Resource: Search

SIL-Thailand
SIL-Thailand
Published in
3 min readApr 2, 2020

การค้นหา FHIR Resource. Using the REST paradigm, Search parameters and Returned results.

แต่ละ resource จะมีรายการ Search parameters ที่ถูกกำหนดไว้ในข้อกำหนด ซึ่งมักจะอยู่ด้านล่างๆ ของหน้าที่อธิบายรายละเอียดของแต่ละ resource

ตัวอย่าง Search parameters ของ Patient resource

FHIR server ไม่จำเป็นต้องสนับสนุน Search parameters เหล่านี้ทั้งหมดและ server สามารถกำหนด parameter การค้นหาของตนเองได้ รายการเหล่านี้เป็นรายการที่พบเห็นได้บ่อยหรือชัดเจนที่สุดซึ่งรวบรวมโดยคณะกรรมการที่จัดทำ resource

FHIR server สามารถระบุใน Conformance resource ว่าสนับสนุน Search parameters ใดบ้างสำหรับแต่ละ resource

การค้นหาขั้นพื้นฐานโดยใช้ GET method

มีรูปแบบ ดังนี้:

GET [host]/[resourceType]/_search?[parameters]&_format=[mime-type]

หรือ

GET [host]/[resourceType]?[parameters]&_format=[mime-type]

ตัวอย่าง

GET http://hapi.fhir.org/baseR4/Patient?name=Edward จะได้ Bundle ที่เป็นรายการ Patient resource ที่มีส่วนของ name (ชื่อ) มีตัวอักษร ‘Edward’

GET http://hapi.fhir.org/baseR4/Patient?name=Edward&_format=xml จะได้ bundle ที่เป็นรายการ Patient resource ที่มีส่วนของ name (ชื่อ) มีตัวอักษร ‘Edward’ เช่นเดิม แต่ส่งกลับมาในรูปแบบ XML

GET http://hapi.fhir.org/baseR4/Condition?subject=921009

จะได้ bundle ที่เป็นรายการ Condition resource ทั้งหมดสำหรับ Patient resource ที่ id=921009 ซึ่งก็คือ Problem list ของผู้ป่วยรายนี้นั่นเอง

Parameters มาตรฐาน

Parameters มาตรฐาน สำหรับทุก resource ได้แก่

_content, _has, _id, _lastupdated, _list, _profile, _security, _tag, _text, _type

นอกจากนี้ยังมี Search parameters พิเศษ คือ _query และ _filter ที่อนุญาตให้ค้นหาโดยใช้วิธีการอื่นที่แตกต่างไป และ _format และ _pretty ที่กำหนดไว้สำหรับ interaction ทั้งหมด

_id จะอ้างถึง logical id ของ resource และสามารถใช้เมื่อการค้นหาระบุชนิดของ resource

GET [host]/Patient?_id=921009

การค้นหานี้จะหา Patient resource ที่มี id ตรงกับที่ให้ไป เหมือนกับกระบวนการ Read GET [host]/Patient/921009 อย่างไรก็ตามการค้นหาด้วย parameter _id จะส่งคืนผลลัพธ์เป็น bundle ของ resource แทนที่จะได้กลับมาเป็น resource นั้นแบบกระบวนการ Read

Modifiers

เสมือนเป็นคำต่อท้าย (Suffixes) ของ Parameters คั่นด้วยเครื่องหมาย : (colon)

  • :missing ใช้ได้กับทุก parameters เช่น gender:missing=true จะส่งผลลัพธ์กลับมาเป็น resource ทั้งหมดที่ไม่ได้ระบุ gender เอาไว้
  • :exact, :contain ใช้กับ parameters จำพวก string, :exact จะต้องตรงกันทุกตัวอักษรพอดี และ case-sensitive ในขณะที่ :contain ไม่ต้องตรงกันทุกตัวอักษรพอดี อาจจะมีอักษรเกินมาด้านหน้าหรือท้ายคำก็ได้และไม่ case-sensitive (Default ในการค้นหา string จะค้นหา string ใดก็ตามที่ขึ้นต้นด้วย string ที่ระบุ และไม่ case-sensitive เช่น name=eve จะ match ทั้ง “Eve”, “Evelyn”)
  • สำหรับ parameters จำพวก token, :text จะค้นหาบางส่วนในส่วน text ของชนิดข้อมูล CodeableConcept หรือส่วน display ของชนิดข้อมูล Coding (แทนการค้นหา default เริ่มต้นซึ่งค้นหาในส่วนที่เป็น code) เช่น GET [base]/Condition?code:text=headache จะค้นหา Condition ที่ code มีส่วน text หรือ display ของ code มีคำว่า headache อยู่ในนั้น
  • Modifiers อื่น ของ parameters ที่เป็น token คือ :in, :not-in, :above, :below สำหรับค้นหากับ code ใน ValueSet
  • :type ใช้กับ parameters จำพวก reference เพื่อระบุชื่อ resource ที่ต้องการค้นหาของ reference นั้น
  • สำหรับ parameters จำพวก uri, modifiers :below และ :above สามารถใช้ระบุว่าใช้การค้นหาที่ตรงกันเพียงบางส่วน ตัวอย่างเช่น:
GET [base]/ValueSet?url:below=http://acme.org/fhir/
GET [base]/ValueSet?url:above=http://acme.org/fhir/ValueSet/123/_history/5

บรรทัดแรก การค้นหาจะส่งคืน ValueSet ใด ๆ ที่มี URL ที่ขึ้นต้นด้วย “http://acme.org/fhir/" ในขณะที่บรรทัดที่สอง จะค้นหา ValueSet ใด ๆ จาก URL ที่ระบุและจาก URL ที่เหนือขึ้นไป แต่ยังอยู่ใน http://acme.org/fhir/ValueSet/123 สังเกตว่ามีกรณีการใช้งานไม่มากที่ modifier :above มีประโยชน์เมื่อเทียบกับ :below

Prefixes

คำนำหน้า (Prefixes) ของ parameters value ใช้เพื่อควบคุมลักษณะของการค้นหา parameters จำพวกที่สามารถเรียงลำดับได้ ได้แก่ number, date และ quantity

  • eq Equal, ne Not equal
  • gt Greater than, lt Lesser than
  • ge Greater or equal, le Lesser or equal
  • sa Start after, eb End before ไม่ใช้กับค่าที่เป็นจำนวนเต็ม แต่ใช้กับค่าที่เป็นทศนิยม
  • ap Approximately อยู่ในช่วง 10% ของค่าที่ระบุไป (แต่สามารถเลือกตั้งค่าประมาณอื่นที่คิดว่าเหมาะสมแทนให้ระบบได้)

ตัวอย่าง:

GET [base]/Encounter?length=gt20 ค้นหา Encounter ใดๆ ที่อยู่นานเกิน 20 วัน

GET [base]/Patient/23/Procedure?date=ge2010–01–01&date=le2011–12–31 ค้นหา Procedure ของ Patient resource id=23 ที่ทำระหว่างวันที่ 1 ม.ค. 2010 ถึง 31 ธ.ค. 2011 (2 ปี)

รายละเอียดของ FHIR Search สามารถศึกษาเพิ่มเติมได้ใน FHIR Specification https://www.hl7.org/fhir/search.html

--

--