Skip to content

SNOMED CT Vector / Semantic Search — Landscape Review

Researched March 2026. Covers production tools, research models, clinical NLP, and RAG prototypes. Updated as the ecosystem evolves.


TL;DR

No open-source, local-first, single-binary tool combines RF2 ingestion with vector semantic search — until sct. The only production server with genuine vector search is John Snow Labs', which is commercial and cloud-oriented. The research literature has rich embedding models but none are packaged as deployable SNOMED servers.


1. Production Terminology Servers

Snowstorm (SNOMED International)

The flagship open-source SNOMED CT server. Elasticsearch-backed, used by ~14 national editions as their authoritative browser backend.

Search capabilities: Elasticsearch typeahead/prefix/fuzzy, full Expression Constraint Language (ECL), FHIR ValueSet/$expand.

Vector/semantic search: None. The "semantic index" in the Snowstorm changelog refers to the SNOMED CT inferred relationship index (IS-A consistency bookkeeping), not ML embeddings. No movement in this direction as of v10.5.0.

Verdict: Best-in-class for lexical/ECL; zero embedding-based similarity.


Hermes (wardle/hermes — Clojure)

Lightweight SNOMED library and microservice. LMDB storage, Apache Lucene full-text search, no JVM heap tuning required. Imports UK + International in ~5 minutes. Used in NHS production deployments. FHIR facade: Hades.

Vector/semantic search: None. Community interest noted (Clojure Slack, May 2024) but aspirational only.

Verdict: Best lightweight alternative to Snowstorm; no vector capability.


Ontoserver (CSIRO, Australia)

FHIR-native terminology server (Postgres + Lucene). The only server with full SNOMED CT postcoordination support. Used by the Australian Digital Health Agency. Commercial licence required.

Vector/semantic search: None natively. CSIRO's own published research acknowledges that their autocompletion performs poorly when input strings are not partial prefixes and proposes BioBERT-based semantic search as a future extension — but this has not been integrated into the product.

Verdict: Best FHIR-conformance story; no vector capability.


HAPI FHIR JPA Server

Java/Spring open-source FHIR server with Lucene/Hibernate Search for terminology. Snowstorm uses the HAPI FHIR library for its own FHIR layer.

Vector/semantic search: None.


Commercial product embedded in the Spark NLP / John Snow Labs ecosystem.

What it does: - FAISS-backed dense vector search across SNOMED CT, ICD-10, LOINC, RxNorm - Handles synonyms, misspellings, colloquialisms ("woozy" → adverse event code) - Sub-second at millions of concept entries; horizontally scalable - Cross-system semantic matching

Verdict: The only production-grade SNOMED server with genuine semantic search. Closed-source, commercial, cloud/server-oriented.


2. MCP Servers for LLMs

eigenbau/mcp-snomed-ct

Wraps any FHIR R4 server (Snowstorm, Ontoserver, HAPI FHIR) to expose SNOMED lookup tools to LLMs via Model Context Protocol. Supports Claude Desktop, Claude Code. Domain scoping via ECL.

Vector search: None — proxies the underlying server's lexical/ECL search. Semantic reasoning is provided by the LLM, not by embeddings.


SidneyBissoli/medical-terminologies-mcp

MCP server with 27 tools spanning ICD-11, SNOMED CT, LOINC, RxNorm, MeSH via public NLM/WHO APIs. No vector search.


3. Research Embedding Models

These are model weights, not packaged servers. They require you to build your own embedding + index pipeline.

SapBERT (Cambridge, NAACL 2021 — dominant 2024–2026)

Self-alignment pre-training on UMLS synonyms using metric learning. Clusters synonyms of the same concept close together in 768-dim space. The most widely adopted backbone for SNOMED concept normalization.

HuggingFace models: - cambridgeltl/SapBERT-from-PubMedBERT-fulltext — English, 768-dim - cambridgeltl/SapBERT-from-PubMedBERT-fulltext-mean-token — used by SNOBERT - cambridgeltl/SapBERT-UMLS-2020AB-all-lang-from-XLMR — multilingual (XLM-R Large)

2024 result (Abdulnazar et al., Digital Health): Unsupervised SNOMED CT annotation in English and German using SapBERT + FAISS. English F1: 0.765 unsupervised.

Note for sct: SapBERT would likely produce significantly better SNOMED embeddings than a general model like nomic-embed-text, since it was specifically trained on biomedical concept synonymy. Worth supporting as an --model option in sct embed.


CODER / CODER++ (GanjinZero, JBI + ACL-BioNLP 2022)

Contrastive learning over UMLS knowledge graph (terms + relation triplets). Cross-lingual support. Hard negative sampling in CODER++.

HuggingFace: GanjinZero/coder_eng, GanjinZero/coder_eng_pp

Licence: MIT


HiT-MiniLM-L12-SnomedCT (Oxford, NeurIPS 2024)

Fine-tuned from all-MiniLM-L12-v2 on SNOMED CT's is-a hierarchy using hyperbolic geometry losses (Hyperbolic Clustering + Hyperbolic Centripetal). Optimised for predicting subsumption (is-a), not for free-text → concept similarity.

HuggingFace: Hierarchy-Transformers/HiT-MiniLM-L12-SnomedCT

Use case: Ontology alignment / hierarchy transfer, not clinical NLP search.


SNOBERT (Kulyabin et al., arXiv 2405.16115, 2024)

Benchmark + pipeline for clinical note entity linking to SNOMED CT. Two-stage: (1) BERT NER, (2) SapBERT-embedded FAISS index (~200k concept IDs) for candidate matching.

GitHub: MikhailKulyabin/SNOBERT (MIT)


Snomed2Vec (arXiv 1907.08650)

Random walk + Poincaré embeddings on the SNOMED CT knowledge graph. 5–6× improvement on concept similarity vs prior embeddings. Older codebase, not actively maintained.

GitHub: NachusS/Snomed2Vec


BioWordVec (NCBI)

Word2Vec trained on PubMed + MIMIC-III. MeSH-trained, not SNOMED-specific, but widely used as a biomedical embedding baseline. 200-dim, 13 GB binary.

Download: NCBI FTP (BioWordVec_PubMed_MIMICIII_d200.vec.bin)


4. Clinical NLP Tools

These are annotation tools (free text → SNOMED concept ID), not search tools (query → ranked SNOMED concepts). Different problem, but relevant context.

MedCAT v2 (CogStack — Apache 2.0)

Self-supervised NER + linking. Learns contextual concept embeddings from clinical text; resolves ambiguous mentions via cosine similarity to learnt concept centroids.

SNOMED models available (2025): - UK Clinical Edition 39.0 (Oct 2024) + UK Drug Extension, trained on MIMIC-IV - UK Clinical Edition 40.2 (Jun 2025) + UK Drug Extension 40.3

Deployed at UCLH and multiple NHS trusts. Models require NIH/UMLS licence.

v2.0.0 released August 2025: Modular architecture, optional spaCy, reduced core dependencies. Repo: CogStack/cogstack-nlp.


scispaCy (Allen AI)

Biomedical NLP with spaCy models. Entity linking to UMLS via TF-IDF approximate nearest neighbour (not dense vectors). SNOMED codes obtained via UMLS crosswalk.


DrivenData SNOMED CT Entity Linking Challenge (2024)

Open challenge with open-source winning solutions: - BERT NER + FAISS vector search against SapBERT-embedded SNOMED index - LoRA fine-tuned LLM + FAISS retrieval + LLM reranking - Embedding model fine-tuned on SNOMED synonym pairs

GitHub: drivendataorg/snomed-ct-entity-linking (MIT)


5. RAG / LLM-Native Prototypes

OntologyRAG (IQVIA, arXiv 2502.18992, February 2025)

Three-stage pipeline: SNOMED CT + other ontologies → RDF knowledge graph → NL2SPARQL retrieval → LLM reasoning. Demonstrates ICD-10 → ICD-11 mapping with proximity levels and interpretable rationale. SNOMED CT support included.

GitHub: iqvianlp/ontologyRAG

Status: Research prototype.


django-snomed-ct + OgbujiPT (Chimezie Ogbuji, 2023)

Proof-of-concept: CNL sentences extracted from SNOMED CT concepts, embedded, stored in in-memory Qdrant, used for RAG-based clinical Q&A. Not a packaged tool.


HengJay/snomed-ct-assistant (HuggingFace Space)

Pre-built ChromaDB vector database of 634k SNOMED CT concepts with a simple chat interface. Embeddings + ChromaDB index files included.

Status: Demo/prototype. Requires SNOMED CT licence.


Biomedical Text Normalization (medRxiv 2024)

Benchmarked four LLM strategies for SNOMED term normalization. RAG achieved 88.31% accuracy (domain-specific) and 79.97% (broad medical). No released tool.


6. Pre-Computed Embeddings (Downloadable)

All datasets derived from SNOMED CT require a valid SNOMED CT licence (free for most countries via MLDS or national licence).

Resource Type Dimensions Licence
cambridgeltl/SapBERT-from-PubMedBERT-fulltext-mean-token Model (generate yourself) 768 Apache 2.0
GanjinZero/coder_eng_pp Model (generate yourself) 768 MIT
Hierarchy-Transformers/HiT-MiniLM-L12-SnomedCT Hierarchy-aware model 384 Apache 2.0
xlreator/biosyn-biobert-snomed BioBERT sentence embedding model 768
FremyCompany/AGCT-Dataset Pre-computed ADAv2 embeddings (Parquet) 1536 + SNOMED licence
HengJay/snomed-ct-assistant 634k concepts, ChromaDB index + SNOMED licence
dchang56/snomed_kge 5 KGE checkpoints (TransE, RotatE, etc.) 200 Research
justin13601/loinc_snomed_embeddings SNOMED + LOINC, ADAv2, Parquet 1536 + SNOMED + LOINC licences
BioWordVec (NCBI FTP) PubMed + MIMIC-III word vectors 200 Open (MeSH-trained)

7. Capability Comparison

Capability Snowstorm Hermes Ontoserver MedCAT JSL Server sct
Local / offline, no server No No No Partial No Yes
Single binary, zero deps No No (JVM) No No No Yes
RF2 → queryable artefact Hours ~5 min No No No ~30 s
Lexical / FTS search Yes Yes Yes No Yes Yes (SQLite FTS5)
Vector / semantic search No No No Partial Yes (commercial) Yes (Ollama)
MCP server for LLMs No No No No No Yes
Parquet / DuckDB export No No No No No Yes
Per-concept Markdown (RAG) No No No No No Yes
Open source + permissive Yes Yes No Yes No Yes
Production terminology server Yes Yes Yes No Yes Not goal

8. Implications for sct

  1. The gap is real. No open-source tool currently combines offline RF2 ingestion with vector semantic search end-to-end. sct fills this gap.

  2. Consider SapBERT as a recommended embedding model. nomic-embed-text is a good general-purpose baseline, but SapBERT-from-PubMedBERT-fulltext-mean-token (Apache 2.0, HuggingFace) was specifically trained on biomedical concept synonymy and would likely produce substantially better results for clinical queries. It can be run via Ollama once a compatible GGUF is available, or called directly via the HuggingFace Transformers API.

  3. Pre-built embedding artefacts are a distribution opportunity. Several datasets on HuggingFace provide pre-computed SNOMED embeddings. sct could publish an official pre-built .arrow embeddings file alongside each NDJSON release (for distributions where SNOMED CT licensing permits), saving users the Ollama step entirely. See specs/roadmap.md — IPS Free Set bundling is already flagged as a future item.

  4. MedCAT v2 is complementary, not competing. MedCAT maps free clinical text → SNOMED concept IDs. sct mcp maps a clinical question → ranked SNOMED concepts. These are different stages of a clinical NLP pipeline and could be used together.


Sources: Snowstorm changelog, Hermes README, Ontoserver PMC 8861757, SapBERT NAACL 2021, CODER JBI 2022, HiT NeurIPS 2024, SNOBERT arXiv 2405.16115, MedCAT CogStack Discourse, DrivenData 2024, OntologyRAG arXiv 2502.18992, JMIR scoping review PMC 11494256, John Snow Labs product docs, medRxiv 2024 normalization benchmark.