MongoDB Atlas를 사용하여 SNOMED CT 임상 용어를 모델링하고, 검색하고, 내비게이션하고, 기반을 마련하는 방법을 학습합니다.
사용 사례: 상호 운용성
산업: 의료
제품: MongoDB Atlas, MongoDB Search, MongoDB 벡터 검색, Voyage AI
솔루션 개요
의료 애플리케이션은 임상 텍스트를 저장할 뿐만 아니라 임상적 의미를 이해해야 합니다. 의사는 “심부전”, “심장 부전” 또는 “심장 부전증”을 쓰수 있습니다. 다른 단어로 동일한 임상적 의미를 설명할 수 있습니다. 임상 코딩은 애플리케이션에 안정적인 식별자로 의미를 표현할 수 있는 표준적인 방법을 제공합니다.
의료 팀은 다른 목적을 위해 다른 코딩 시스템을 사용합니다. 일부 코딩 시스템은 보고, 통계, 보상 또는 병원 활동 분석을 위해 진단 및 진료를 그룹합니다. SNOMED CT는 건강 기록 내의 임상적 의미에 집중합니다. 문제, 결과, 시술, 신체 구조, 유기체, 물질, 제품 및 기타 많은 임상적 아이디어를 나타낼 수 있습니다. SNOMED CT는 전자 건강 기록에 기록된 임상 사실을 검색, 교환, 분석 또는 추론하는 애플리케이션을 지원합니다.
SNOMED International은 SNOMED CT를 고유한 의미, 공식 정의 및 계층 조직을 가진 개념을 포함하는 임상 용어로 설명합니다.
SNOMED CT는 그래프와 같은 구조를 가집니다. 500,000 개 이상의 임상 개념이 있으며, 각 개념에는 동의어 및 번역을 포함하여 사람이 읽을 수 있는 설명이 여러 개 있을 수 있습니다. 다른 개념에 대한 부모 개념, 하위 개념, 조상 개념 및 공식 관계를 가질 수 있습니다. SNOMED CT는 개념, 설명 및 관계를 통해 다음과 같이 용어 콘텐츠를 나타냅니다.
개념은 임상적 아이디어를 나타냅니다.
설명은 사람이 읽을 수 있는 터밀을 해당 개념에 연결합니다.
관계는 하나의 개념을 다른 개념에 연결합니다.
이러한 구조는 강력하지만 구현 과제를 유발합니다. 애플리케이션 팀에서는 빠른 텀 검색, 다국어 검색, 계층 내비게이션, 하위 확장 및 관계 검사가 필요합니다. 이들은 또한 임상 기록 검토, 문제 목록 생성, 의사 결정 지원, 코호트 발견 및 시맨틱 검색과 같은 워크플로우 내에서 SNOMED의 용어를 사용해야 합니다. 전통적인 구현에서는 이러한 필요사항을 여러 시스템에 분할하는 경우가 많습니다.
용어 파일을 위한 관계형 데이터베이스.
텍스트 검색을 위한 검색 엔진입니다.
계층 탐색을 위한 그래프 데이터베이스입니다.
시맨틱 검색을 위한 벡터 데이터베이스입니다.
이 솔루션은 MongoDB Atlas에서 SNOMED CT를 다음과 같이 운영하는 방법을 보여줍니다.
각 SNOMED 개념을 개념 아이디티, 설명, 관계, 부모, 자식 및 조상 경로를 함께 유지하는 MongoDB 문서로 저장합니다.
MongoDB Search 및 MongoDB 벡터 검색을 위한 하나의 텀 수준 검색 프로젝션을 빌드합니다.
별도의 그래프 데이터베이스 없이 일반적인 계층 구조와 하위 쿼리를 지원하려면 조상 배열과 다중 키 인덱스를 사용합니다.
동일한 용어 서비스를 사용하여 임상 기록을 SNOMED 후보에 기반으로 합니다.
증거, 컨텍스트 및 조상 경로를 포함하여 검토된 코딩을 저장합니다.
예를 들어, 사용자는 "심부전"을 검색하고, 선택한 임상 개념을 검사하고, 부모 및 자식 개념을 확인하고, 공식 관계를 검토하고, 그 아래의 특정 개념을 확장할 수 있습니다. SNOMED CT는 이러한 자손 확장을 표현하기 위해 ECL을 자주 활용합니다. ECL은 SNOMED CT 개념 집합을 설명하는 간결한 쿼리 언어 역할을 합니다. 예를 들어, 표현식 << Heart failure은 "심부전 및 계층 구조에서 그 아래의 모든 개념"을 의미합니다. MongoDB의 스키마 설계에서 이 패턴은 미리 계산된 조상 배열에 대한 쿼리에 자연스럽게 매핑됩니다. SNOMED의 공식 ECL 참조에서는 연산자 <<를 "자손 또는 자신"으로 정의하며, 이는 개념 및 하위 유형을 조회합니다.
그림 1. 부모와 자식의 계층을 갖는 임상 개념
이 해결책은 임상 기록 기준을도 시연합니다. 메모에는 현재 소견, 과거 역사, 가족 역사, 계획된 조치, 불확실한 성명서 및 부정된 소견이 포함될 수 있습니다. 애플리케이션은 후보 임상 터버를 추출하고 MongoDB를 통해 SNOMED CT를 검색하고 후보 개념을 제안하며 확인 후에만 검토된 코딩을 저장합니다. 저장된 코딩은 원본 증거 스팬, 선택한 SNOMED 개념, 주장 문맥, 검토자 상태 및 조상 경로를 유지합니다. 하위 애플리케이션은 정확한 단어뿐 아니라 임상적 의미로 쿼리할 수 있습니다.
다음을 수행해야 할 때 이 해결책을 사용합니다.
임상 텀, 동의어, 번역 및 SNOMED 식별자를 검색합니다.
상위, 하위, 상위 항목, 하위 항목 및 관계 보기를 탐색합니다.
하나의 MongoDB 컬렉션에서 어휘적, 의미론적 및 하이브리드 용어 검색을 지원합니다.
ECL 스타일 계층 표현식(예: "심부전의 모든 후손")을 사용하여 개념 집합을 확장합니다.
지원 범위 및 사람 검토를 통해 SNOMED CT 후보에 대한 기본 임상 기록
인덱스된 하위 쿼리를 위해 조상 경로가 포함된 검토된 SNOMED 코딩을 저장합니다.
이 패턴은 애플리케이션 팀에 용어 데이터, 용어 검색, 의미 검색, 계층 쿼리, 임상 증거 캡처 및 감사 코딩 출력을 위한 하나의 운영 플랫폼을 제공합니다. 문서 저장, 검색, 의미 검색 및 그래프 스타일 내비게이션을 위해 별도 시스템을 실행할 필요성이 줄어듭니다.
SNOMED CT 라이센스 주의: 이 솔루션과 연결된 공개 리포지토리에는 작은 샘플 데이터 세트만 포함됩니다. SNOMED CT에는 적절한 라이센스가 필요합니다.
참조 아키텍처
이 참조 아키텍처는 내비게이션 및 기본 임상 메모 워크플로우로 구성되어 있습니다.
내비게이션은 용어 사용자가 SNOMED CT 개념을 검색하고 검사하고 범위를 지정하는 데 도움을 줍니다. Ground Clinical Note는 기본적으로 결정적 어휘 검색을 사용하여 동일한 용어 검색 계층을 재사용하여 임상 문본에서 SNOMED CT 후보를 제안하고 검토된 코딩만 저장합니다.
아키텍처는 하나의 MongoDB 컬렉션 세트를 사용합니다.
snomed-irbd컬렉션에는 원본 용어 보기가 저장됩니다.snomed-term-search은(는) 고품질 용어 검색을 지원합니다.grounded_notes컬렉션에는 검토된 애플리케이션 출력이 저장되며, 소스 용어 데이터가 아닙니다.
SNOMED CT 콘텐츠는 그래프 형태입니다. 이 아키텍처는 연결된 구조를 MongoDB 문서에 함께 유지하고 검색 프로젝션과 조상 배열을 사용하여 작동하도록 합니다.
아키텍처 개요
이 구현은 JSON 개념 모델로 이미 사용 가능한 승인된 SNOMED CT 콘텐츠 패키지로 시작됩니다. 현재 데모에서 소스 모델은 보건부에서 사용하는 스페인 국민 SNOMED CT 배포에서 오는 것입니다. 공개 리포지토리 에는 샘플 데이터 세트만 포함됩니다. 전체 SNOMED CT 용어를 재배포하지 않습니다.
아키텍처는 소스 형식에 구에 받지 않습니다. 조직이 SNOMED CT를 JSON 형식으로 받으면 해당 모델을 MongoDB에 직접 로드할 수 있습니다.
그림 2. MongoDB를 코드 권한으로 사용하며 선택 사항으로 재한 LLM 게이트웨이를 사용할 수 있습니다.
대상 모델에는 다음과 같은 용어 컬렉션이 있습니다.
snomed-irbd: 각 임상 개념을 설명, 관계, 부모, 자식, 조상, 활성 상태, 릴리스 메타데이터 및 멤버십 메타데이터와 함께 저장합니다. 애플리케이션은 이 컬렉션을 사용하여 개념 검색, 계층 내비게이션, 관계 검사 및 후손 확장을 수행합니다.snomed-term-search: 활성 텀, 언어 및 릴리즈다마 검색 가능한 문서를 하나씩 저장합니다. 애플리케이션은 이 프로젝션을 사용하여 어휘 검색, 시맨틱 검색, 하이브리드 검색, 언어 필터링 및 범위 필터링을 수행합니다.
내비게이션 API는 snomed-term-search를 사용하여 일치하는 개념을 찾습니다. 그 후 snomed-irbd 컬렉션에서 선택된 결과를 강화합니다. 사용자는 “심부전”과 같은 임상 구문을 검색하고, 선택된 개념을 검사하고, 더 넓고 더 구체적인 개념을 보고, 동일한 작업의 API 예시를 열 수 있습니다.
Grounding API는 임상 메모 워크플로 내의 용어 검색 계층을 재사용합니다. Grounding 검색은 기본적으로 결정적 어휘 검색을 사용하고, Navigation은 어휘, 시맨틱 및 하이브리드 모드를 제공합니다. 선택 사항인 LLM 계층은 텍스트를 해석하고 MongoDB에서 제공하는 후보 중에서 선택하는 데 도움을 줄 수 있지만, 새로운 SNOMED CT 식별자를 만들어서는 안 됩니다.
검토 후 애플리케이션은 grounded_notes에 확인된 코딩을 저장합니다. 각 코딩은 선택된 SNOMED CT 개념, 증거 텍스트, 어셔션 컨텍스트, 주제 컨텍스트, 검토자 상태 및 조상 ID를 유지합니다. 하위 애플리케이션은 정확한 단어로 분만 아니라 의미로 검토된 임상 사실을 쿼리할 수 있습니다.
내비게이션 워크플로우
사용자는 “심부전”과 같은 임상 터맘을 검색합니다. 애플리케이션은 텀 검색 프로젝션을 쿼리하고 SNOMED 컨섹으로 그룹화된 컨섹 수준 결과를 반환합니다.
각 결과에는 다음이 표시됩니다.
사용자 쿼리와 일치하는 텀
개념의 기본 표시
공식 임상 이름
SNOMED 식별자
활성 상태
의미론적 카테고리
릴리즈
검색 출처
사용자는 그 다음 개념 집중 보기를 열 수 있습니다. 이 보기에서는 개념 요약, 설명, 부모 개념, 자식 개념, 관계, 후손, 원시 문서 및 API 예시가 표시됩니다.
내비게이션은 다음 검색 모드를 지원합니다.
어휘 검색은 MongoDB Search를 사용하여 정확한 텀, 동의어, 공식 이름, 식별자, 접두사 및 자세한 텍스트를 검색합니다.
시맨틱 검색은 터밀의
embedText필드를 voyage-4 참조 모델로 자동 임베딩하는 MongoDB 벡터 검색을 사용합니다. 따라서 의미별 검색은 별도의 벡터 저장 또는 임베딩 파이프라인이 필요 없이 동일한 컬렉션에서 실행됩니다.하이브리드 검색은 어휘 검색과 벡터 검색을 결합합니다. Voyage 교차 인코더 리랭커가 구성되어 있는 경우 애플리케이션은 결합된 후보 풀을 리랭킵하고, 그렇지 않은 경우 결합 순서로 돌아가답니다.
검색 화면에서도 의미 범위를 지원합니다. 사용자는 결과를 임상 결과, 시술, 신체 구조 또는 물질과 같은 넓은 임상 영역으로 제한할 수 있습니다. 사용자는 << 404684003와 같은 하위 표현식을 사용하여 결과를 개념 및 더 구체적인 개념으로 제한할 수도 있습니다.
그림 3. ECL 범위를 확장한 시맨틱 검색
임상 기본 메모 워크플로
사용자가 임상 노트를 붙여넣습니다. 워크플로는 현재 결과, 부정, 과거력, 가족력, 계획된 조치, 불확실, 일시적인 표현식 등의 임상적 언급과 컨텍스트 단서를 추출합니다.
그 후 워크플로우는 MongoDB를 통해 SNOMED CT 후보를 검색합니다. 증거 스팬과 문맥이 포함된 검토 가능한 후보를 반환합니다. 검토자는 각 후보를 승인하거나 거부하거나 검토용으로 표시할 수 있습니다.
선택 사항인 LLM 계층은 텍스트 해석과 후보 선택에 도움을 줄 수 있습니다. MongoDB에서 반환된 후보 중에서만 선택해야 합니다. 검토 없이 새로운 SNOMED 식별자를 만들거나 코딩을 유지해서는 안 됩니다.
검토 후, 애플리케이션은 확인된 코딩을 grounded_notes에 저장합니다. 각 저장된 코딩에는 증거 스팬, 선택된 SNOMED 개념, 어셔션, 주제, 상태 및 조상 ID가 포함됩니다. 이 패턴을 통해 하위 애플리케이션은 의미를 쿼리할 수 있습니다. 예시를 들어 애플리케이션은 선택된 임상 개념의 승인된 하위 개념을 포함하는 검토된 메모를 찾을 수 있습니다.
그림 4. 임상 기록 인지 시키기 - LLM 프로세스
그림 5. 텀 검색 후 MongoDB로 임상 기록 기반 확립
API 스니펫 예시
이 솔루션은 내비게이션 및 Ground Clinical Note 워크플로우 모두에 대한 API를 제공합니다. 이 스니펫은 코어 요청 패턴을 보여줍니다.
SNOMED 텀 및 개념 검색
이 엔드포인트를 사용하여 텀 수준 프로젝션을 검색합니다. 응답은 일치하는 터버를 SNOMED 개념으로 그룹화합니다. 일치하는 텀, 기본 표시, 시맨틱 카테고리 및 검색 출처가 포함된 개념 수준 결과를 반환합니다.
POST /api/navigator-search { "query": "heart failure", "languageCode": "en", "mode": "lexical", "limit": 24 }
사용자가 알려진 텀, 동의어, 공식 이름 또는 SNOMED 식별자로 검색할 때 어휘 모드를 사용합니다. 데모가 MongoDB 벡터 검색 및 재순위 지정된 경우 API는 시맨틱 및 하이브리드 모드도 지원합니다.
개념 및 하위 개념 확장
이 엔드포인트를 사용하여 개념 세트를 확장합니다. SNOMED CT는 ECL을 사용하여 개념 세트를 설명합니다. 이 예시에서 표현식 << 84114007은 “심부전과 그 아래의 모든 더 구체적인 개념”을 의미합니다.
POST /api/ecl { "expr": "<< 84114007", "languageCode": "en", "limit": 200 }
구현은 MongoDB에서 사전 계산된 조상 배열로 이 표현식을 해결합니다. 이 패턴을 사용하면 데모 아키텍처에 별도의 그래프 데이터베이스가 필요 없이 일반적인 하위 쿼리를 빠르게 수행할 수 있습니다.
SNOMED 후보에 대한 임상 기록 기반
이 엔드포인트를 사용하여 텍스트에서 의심스러운 임상 지시자를 추출하고 MongoDB에서 제한된 SNOMED 후보를 조회합니다. 응답은 검토 가능한 결과를 생성하지만 코드를 자동으로 유지하지는 않습니다.
POST /api/nlp-map { "text": "Patient with chronic systolic heart failure and type 2 diabetes. No evidence of chest pain at present.", "languageCode": "en" }
기반 워크플로우는 부정, 역사, 가족력, 계획 및 시간 표현식과 같은 임상적 언급 및 문맥을 감지합니다. MongoDB는 후보 SNOMED 개념을 제공합니다. 검토자가 최종 코딩을 확인합니다.
검토자 확인 코딩 저장
검토 후에 이 엔드포인트를 사용합니다. 애플리케이션은 확인된 코딩만 저장하고 조상 ID로 강화하여 하위 시맨틱 쿼리를 수행할 수 있도록 합니다.
POST /api/coding-confirm { "text": "Patient with heart failure.", "languageCode": "en", "codings": [ { "mention": "heart failure", "conceptId": "84114007", "displayTerm": "Heart failure", "semanticTag": "disorder", "accepted": true } ] }
저장된 문서에는 선택한 SNOMED 개념, 증거 텍스트, 주장 문맥, 검토자 상태 및 조상 ID가 유지됩니다. 이 스키마를 통해 하위 쿼리는 일반 개념 또는 특정 후손을 통해 메모를 찾을 수 있습니다.
의미로 기반한 메모 쿼리
이 엔드포인트를 사용하여 선택한 SNOMED 개념 또는 임상 하위 개념이 포함된 검토 기록을 조회합니다.
POST /api/grounded-corpus { "conceptId": "84114007", "includeDescendants": true, "limit": 10 }
이 엔드포인트는 검토된 코딩과 함께 조상 ID를 저장할 때의 하위 값을 데모합니다. 애플리케이션은 정확한 단어만 검색하는 대신 임상적 의미를 쿼리할 수 있습니다.
데이터 모델 접근 방식
SNOMED CT는 연결된 데이터를 나타냅니다. 임상 개념에는 사람이 읽을 수 있는 많은 텀, 더 광범위한 개념, 더 구체적인 개념, 및 다른 개념과의 공식적인 관계가 있을 수 있습니다.
MongoDB는 대부분의 운영 애플리케이션에서 개념 중심 보기가 필요하기 때문에 이 패턴에 잘 작동합니다. 사용자가 개념을 열면 애플리케이션에서는 개념 식별자, 표시 텀, 설명, 부모, 자식, 조상 경로, 관계, 활성 상태, 릴리스 메타데이터가 함께 필요합니다.
이 방법은 그래프 구조를 제거하지 않습니다. 관계를 저장하고 일반적인 내비게이션 패턴에 대해 쿼리에 유리한 배열을 추가합니다. 예를 들어 개념 문서는 직계 부모와 조상 경로를 저장할 수 있습니다. 이 패턴을 통해 애플리케이션은 인덱스된 MongoDB 쿼리로 더 넓은 개념, 하위 개념 및 하위 요소를 찾을 수 있게 됩니다.
Why This model Works
아래의 디자인 선택은 특정 운영 요구 사항(빠른 검색, 정확한 검색, 빠른 계층 탐색 및 감사 가능한 코딩)을 청족합니다.
개념 데이터 함께 유지: 용어 애플리케이션에서는 완전한 개념 카드를 렌더링해야 하는 경우가 많습니다. 임베딩 설명, 관계 요약, 부모 ID, 자식 ID 및 조상 ID를 사용하면 가장 유용한 운영 보기를 하나의 문서에 유지할 수 있습니다.
검색을 소스 텀으로지와 분리합니다: 검색은 컨섹 수준이 아닌 텀 수준입니다. 하나의 개념에는 언어와 방언에 걸쳐 많은 설명이 있을 수 있습니다. 텀 수준 프로젝션을 통해 MongoDB Search 및 MongoDB 벡터 검색은 일치한 정확한 텀의 순위를 매길 수 있으면서 여전히 캐노니컬 개념을 반환합니다.
계층 경로 사전 계산: SNOMED CT에는 리치한 계층이 있습니다. 많은 애플리케이션에서는 '이 개념 및 그 아래의 모든 더 구체적인 개념을 찾습니다.'와 같은 빠른 후손 쿼리가 필요합니다. 각 개념과 검토된 각 임상 코딩에 조상 ID를 저장합니다. 그러한 다중 키 인덱스를 사용하여 일반적인 계층 쿼리를 수행합니다.
검토된 코딩으로 증거 저장: 애플리케이션이 원본을 설명할 수 있을 때 코딩의 가치가 더 높아집니다. 선택한 SNOMED 개념을 임상 텍스트 스팬, 어셔션 상태, 주제 컨텍스트 및 검토자 상태와 함께 저장합니다. 이 패턴은 감사, 검토 및 하위 쿼리를 지원합니다.
그림 6. SNOMED CT 메타 모델 및 MongoDB 컬렉션 매핑
SNOMED CT 메타모델 및 MongoDB 컬렉션 매핑
이 해결책은 3개의 용어 컬렉션과 별도의 텔레메트리 컬렉션을 사용합니다. 아래 섹션에서는 문서 모양과 각 문서의 주요 필드를 설명합니다.
snomed-irbd 컬렉션
snomed-irbd를 SNOMED CT 개념의 정확한 보기로 사용합니다. 각 문서는 하나의 릴리스에서 하나의 개념을 나타내며 RF2 설명, 관계 정의, 부모 개념, 자식 개념, 활성 상태, 릴리스 메타데이터 및 계층 및 포함을 제공하는 사전 계산된 조상 폐쇄를 포함합니다.
{ "conceptId": "44054006", "active": true, "effectiveTime": "20020131", "moduleId": "900000000000207008", "definitionStatusId": "900000000000074008", "descriptions": [ { "id": "73465010", "term": "Diabetes mellitus type II", "typeId": "900000000000013009", "languageCode": "en", "acceptabilityMap": { "900000000000509007": "..." } } ], "relationships": [ { "typeId": "116680003", "destinationId": "73211009", "relationshipGroup": "0", "active": "1" } ], "inferredParentIds": ["73211009"], "inferredAncestorIds": ["73211009", "64572001", "138875005"], "inferredChildIds": ["..."], "relationshipAttributeKeys": ["116680003|73211009"], "memberOfRefsetIds": ["..."], "releaseId": "20260601", "releaseDate": "2026-06-01T00:00:00.000Z", "releaseAppliedAt": "2026-07-06T00:00:00.000Z" }
snomed-irdb 에는 다음과 같은 관련 필드가 포함되어 있습니다.
conceptIdSNOMED 식별자(SCTID), 즉 안정적인 개념 식별자를 나타냅니다.descriptions[]: 개념의 사람이 읽을 수 있는 이름을 나타냅니다. 각 이름은 동의어 또는 완전히 지정된 이름(공식 임상 이름)이며, 그 이름의 언어와 해당 언어에서 선호되거나 허용되는지 여부를 기록합니다. 이러한 항목은 SNOMED CT 릴리스 파일의 설명 행에 매핑됩니다.relationships[]: 다른 개념에 대한 개념의 관계를 나타냅니다. "Is a" 관계는 계층을 정의합니다. 속성 관계는 사이트 찾기 또는 원인 에이전트와 같은 임상 속성을 정의합니다.relationshipAttributeKeys[]: 각 속성 관계를 단일 인덱스 값으로 나타냅니다. 이를 통해 애플리케이션은 특정 속성으로 개념을 찾고 전체 스캔 대신 인덱스로 결과를 반환할 수 있습니다.inferredParentIds,ChildIds,AncestorIds: 그래프 트라버설 없이 포함을 위한 범위 지정 사전 계산 폐쇄를 나타냅니다. 하위 개념은 모든 부모 개념에 저장되는 대신{ inferredAncestorIds: conceptId }절로 쿼리됩니다.
snomed-term-search 컬렉션 테스트
snomed-term-search을 검색 프로젝션으로 사용합니다. 각 문서는 MongoDB Search, 범위 필터 및 자동 내장된 MongoDB 벡터 검색을 위해 정규화되지 않은 하나의 언어 및 하나의 릴리스에 있는 하나의 활성화된 설명 터밀을 나타냅니다. 이 구조를 통해 사용자는 동의어, 약어, 현지화된 텀, 공식 임상 이름 또는 자연어 구문을 입력할 수 있습니다.
검색 문서는 각 검색 결과가 자체 포함이 되도록 개념 컨텍스트를 반복합니다. 결과는 모든 후보자에 대해 전체 개념 문서를 가져오지 않고 일치하는 텀, 기본 표시, 의미 카테고리, 활성 상태, 릴리스 및 계층 범위를 표시할 수 있습니다.
{ "conceptId": "44054006", "descriptionId": "116680003", "term": "Type 2 diabetes mellitus", "preferredTerm": "Type 2 diabetes mellitus", "fsn": "Type 2 diabetes mellitus (disorder)", "semanticTag": "disorder", "semanticTagKey":"disorder", "termType": "synonym", "preferred": true, "languageCode": "en", "definitionStatusId": "900000000000074008", "moduleId": "900000000000207008", "effectiveTime": "20020131", "parentIds": ["73211009"], "ancestorIds": ["404684003", "73211009"], "topRoots": ["404684003"], "areaTags": ["disorder"], "releaseId": "20260601", "releaseDate": "2026-06-01T00:00:00.000Z", "embedText": "Type 2 diabetes mellitus | disorder | ..." }
snomed-term-search 컬렉션에는 다음과 같은 관련 필드가 포함되어 있습니다.
conceptId,descriptionId: 개념 및 특정 설명으로 링크됩니다.term,preferredTerm,fsn: 검색 결과가 자체 포함될 수 있도록 일치하는 텀 및 개념 컨텍스트를 제공합니다.semanticTagsemanticTagKeytermTypepreferred필터 및 순위 시그널을 제공합니다.parentIds,ancestorIds,topRoots,areaTags:snomed-irbd에 다시 가입하지 않는 범위 필터.releaseId,releaseDate,effectiveTime: 릴리스 범위 검색 및 릴리스 유지 가시성을 제공합니다.embedText: MongoDB 자동 배포가 벡터 검색에 사용하는 필드가 포함되어 있습니다.
이 스니펫은 가장 중요한 설계 결정인 검색 프로젝션이 텀 수준이라는 점을 설명합니다. 이를 통해 "고혈당" 검색이 여전히 정식 개념인 "당뇨병"을 반환할 수 있는 이유를 알 수 있습니다.
자동 임베딩을 사용하면 사용자는 읽을 수 있는 embedText 필드만 저장하고 MongoDB 벡터 검색은 해당 필드에 대한 임베딩을 자동으로 생성하고 유지합니다. 의미 계층이 동일한 컬렉션에 있기 때문에 별도의 임베딩 파이프라인 또는 벡터 저장소가 필요하지 않습니다.
grounded_notes 컬렉션
검토 후 grounded_notes을(를) 사용하여 애플리케이션 출력을 저장합니다. 이 문서는 소스 용어 데이터가 아닙니다. 각 문서에는 다음 데이터가 저장됩니다.
소스 텍스트
선택한 SNOMED CT 개념
증거 스팬
있거나 없는 것과 같은 어셔션 컨텍스트
환자 또는 가족 노드와 같은 주제 문맥
검토 상태
조상 ID
아래 예시에서 이 모양을 볼 수 있습니다.
{ "tenantId": "demo-hospital", "languageCode": "en", "text": "Patient with type 2 diabetes mellitus.", "codings": [ { "conceptId": "44054006", "system": "http://snomed.info/sct", "display": "Type 2 diabetes mellitus", "semanticTag": "disorder", "role": "principal", "target": "Condition.code", "assertion": "present", "subject": "patient", "status": "accepted", "evidence": { "text": "diabetes mellitus tipo 2" }, "ancestorIds": ["44054006","75934005"] } ], "recordedAt": "2026-07-07T16:22:47.210Z", "createdAt": { "$date": "2026-07-07T16:22:47.210Z" } }
이 디자인은 임상 텍스트를 조회 가능한 임상 의미로 변환합니다. 애플리케이션은 나중에 SNOMED CT 계층에서 개념 또는 그 아래의 더 구체적인 개념을 포함하는 검토 노트를 검색할 수 있습니다. 각 코딩은 증거를 유지하므로 검토자는 모든 코드를 생성한 정확한 텍스트와 컨텍스트로 거슬러 올릴 수 있으며, 이는 감사 및 신뢰할 수 있는 하위 사용을 지원합니다.
원격 분석 컬렉션
검색 이벤트, 계층 요청, 메모 기반 활동, 피드백 및 진단에 대해 별도의 telemetry 컬렉션을 사용합니다. 개념 데이터 모델 외부에 원격 측정 데이터를 유지합니다.
솔루션 빌드
공개 리포지토리 에는 애플리케이션 코드, 스크립트 및 샘플 데이터 세트가 포함됩니다. 라이센스 사용자는 샘플 데이터 세트를 자신의 SNOMED CT 릴리스 파일로 대체할 수 있습니다.
전제 조건
MongoDB Search가 활성화된 MongoDB Atlas 클러스터.
데모 목적으로 라이센스가 부여된 SNOMED CT 릴리스 또는 작은 샘플 데이터 세트에 액세스할 수 있습니다.
데모 애플리케이션의 Node.js 및 npm.
선택 사항: 시맨틱 검색을 위한 MongoDB 벡터 검색 자동 임베딩 구성.
선택 사항: 하이브리드 모드의 Voyage 재순위 키 또는 기타 구성된 재순위.
선택 사항: 범위 추출 및 후보 호확성을 위한 LLM 게이트웨이.
절차
표준 개념 문서 준비
캐노니컬 컬렉션에는 각 개념이 설명, 관계, 부모, 조상 및 계층 정보를 포함하는 개념 중심 문서로 저장됩니다. 이 스키마에는 활성 및 비활성 상태, 릴리스 인식 루그업, 설명 검사 및 관계 내비게이션을 지원하는 소스 메타데이터가 포함되어 있습니다.
컬렉션을 로드한 후 필드를 일관적인 검색을 위해 정규화하고 각 문서에 릴리스 버전을 기록하면 릴리스 간에서 결과를 반복할 수 있도록 할 수 있습니다.
NORMALIZE_APPLY=true npm run model:harden # normalize SCTIDs / strings RELEASE_ID_TARGET=20260601 RELEASE_ID_OVERWRITE=true npm run releaseid:stamp
텀 측면 카트 빌드
캐노니컬 개념 컬렉션에서 snomed-term-search을(를) 생성합니다. 사이드카는 릴리즈, 언어, 설명 및 개념별로 하나의 활성 텀 문서를 저장합니다. 검색 결과가 모든 결과 카드에 대해 개념 컬렉션에 다시 가입할 필요가 없도록 키 개념 컨텍스트를 반복합니다.
# Curated demo branches TERM_PROJECTION_SCOPE=demo npm run terms:rebuild # Full licensed local release TERM_PROJECTION_SCOPE=full npm run terms:rebuild # Replace documents while preserving index definitions when possible npm run terms:rebuild:replace
MongoDB 인덱스 생성
개념 검색 및 계층 확장을 위한 btree 인덱스를 만듭니다. 어휘 용어 검색을 위한 MongoDB Search 인덱스를 만듭니다. 시맨틱 또는 하이브리드 모드를 사용하는 경우 시맨틱 검색을 위한 MongoDB 벡터 검색 인덱스를 만듭니다.
npm run indexes:build
다음의 권장 소스 컬렉션 인덱스를 사용합니다.
db.getCollection("snomed-irbd").createIndex({ releaseId: 1, conceptId: 1 }) db.getCollection("snomed-irbd").createIndex({ releaseId: 1, active: 1, conceptId: 1 }) db.getCollection("snomed-irbd").createIndex({ releaseId: 1, inferredAncestorIds: 1, active: 1 })
시맨틱 검색은 voyage-4를 기본 모델로 사용합는 MongoDB 벡터 검색 자동 임베딩을 사용합니다. 하이브리드 모드에는 Voyage rerank-2.5 순위 재지정이. 자동 임베딩이 없는 클러스터에는 수동 Voyage 임베딩 폴백이 존재합니다.
시맨틱 검색 및 다시 순위 지정
의미 검색과 하이브리드 검색에서는 MongoDB 벡터 검색 자동 임벡딩을 사용합니다. 클러스터에 구성된 임베딩 모델을 사용하여 embedText 필드에 벡터 검색 인덱스를 만듭니다.
하이브리드 모드에는 선택 사항인 Voyage 리러랭커가 추가됩니다. VOYAGE_API_KEY를 설정하여 활성화합니다. 키가 없어도 하이브리드 검색은 여전히 작동하며 퓨전 순서로 복귀됩니다. 리러랭커는 구성된 기본 URL을 시도한 다음 https://ai.mongodb.com/v1에 해당하는 MongoDB 호스팅 Voyage 게이트웨이를 시도하고, 그 다음에는 Voyage의 고유 네이티브 플랫폼 엔드포인트를 시도합니다.
데모 애플리케이션을 실행합니다.
npm install npm run dev
가별운 .env.local 파일을 사용합니다. 작업 기본값은 긴 목록의 환경 변수가 아니라 코드 또는 설정 파일에 있습니다.
MONGODB_URI= MONGODB_DB=terminology VOYAGE_API_KEY= ENABLE_LLM_GROUNDING=false LLM_BASE_URL= LLM_API_KEY= LLM_AUTH_HEADER=api-key LLM_GROUNDING_MODEL=gpt-5.5 # Semantic / hybrid search MONGODB_VECTOR_MODE=autoEmbed MONGODB_VECTOR_INDEX=snomed_voyage_idx MONGODB_VECTOR_AUTO_EMBED_MODEL=voyage-4 VOYAGE_API_KEY= VOYAGE_RERANK_MODEL=rerank-2.5
주요 학습 사항
MongoDB Atlas에서 SNOMED CT 운영화: 검색, 계층, 관계 및 애플리케이션 워크플로우를 지원하는 문서 중심 운영 모델을 통해 그래프 형태의 임상 용어를 제공합니다.
용어 내비게이션 및 시맨틱 검색 통합: MongoDB Search 및 MongoDB 벡터 검색을 사용하여 사용자가 동일한 Atlas 기반 서비스에서 SNOMED CT 개념을 찾고 검사하고 범위를 지정하도록 동움줍니다.
검토된 증거가 있는 기본 임상 텍스트: 용어 서비스를 사용하여 임상 기록에서 SNOMED CT 후보를 제안한 다음 검토된 코딩을 증거, 컨텍스트 및 조상 경로와 함께 저장합니다.
작성자
Francesc Mateu Amengual, MongoDB
Giovanni Rodríguez, MongoDB
Diego Canales, MongoDB
자세히 알아보기
MongoDB Search 개요: MongoDB가 전문 검색, 자동 완성, 필터, 스코링 및 검색 기반 애플리케이션 경험을 지원하는 방법을 학습합니다.
MongoDB Vector Search 개요: MongoDB가 Atlas 내에서 의미론 조회 및 벡터 검색을 지원하는 방법을 학습합니다.
SNOMED CT 가져오기: 조직이 SNOMED CT에 액세스하는 방법 검토 및 해당 국가 또는 지역의 라이센스 경로 이해
SNOMED CT 개념, 설명 및 관계: 이 솔루션이 MongoDB 문서에 매핑되는 기본 SNOMED CT 구성 요소를 학습합니다.