Skip to main content
Search for concepts by text:
results <- client$search$basic("diabetes mellitus", page_size = 20)
for (concept in results$data) {
  cat(sprintf("%s: %s\n", concept$concept_id, concept$concept_name))
}

Parameters

ParameterTypeDefaultDescription
querycharacterrequiredSearch query string
vocabulary_idscharacterNULLFilter by vocabulary IDs
domain_idscharacterNULLFilter by domain IDs
concept_class_idscharacterNULLFilter by concept class IDs
standard_conceptcharacterNULLFilter by standard concept (“S”, “C”, or NULL)
include_synonymslogicalFALSESearch in synonyms
include_invalidlogicalTRUEInclude invalid concepts
min_scorenumericNULLMinimum relevance score (0.0-1.0)
exact_matchlogicalFALSERequire exact match
pageinteger1Page number (1-based)
page_sizeinteger20Results per page
sort_bycharacterNULLSort field
sort_ordercharacterNULLSort order (“asc” or “desc”)

Filter by Vocabulary

Restrict search to specific vocabularies:
results <- client$search$basic(
  "heart attack",
  vocabulary_ids = "SNOMED"
)

# Multiple vocabularies
results <- client$search$basic(
  "heart attack",
  vocabulary_ids = c("SNOMED", "ICD10CM")
)

Filter by Domain

Search within specific domains:
results <- client$search$basic(
  "aspirin",
  domain_ids = "Drug",
  page_size = 10
)

Filter by Concept Class

Search for specific concept classes:
results <- client$search$basic(
  "aspirin",
  concept_class_ids = c("Clinical Drug", "Ingredient"),
  page_size = 10
)

Standard Concepts Only

Filter to standard concepts:
results <- client$search$basic(
  "diabetes",
  standard_concept = "S",  # "S" = Standard, "C" = Classification
  vocabulary_ids = "SNOMED"
)

Search with Synonyms

Include concept synonyms in search:
results <- client$search$basic(
  "heart attack",
  include_synonyms = TRUE,
  vocabulary_ids = "SNOMED"
)

Combined Filters

results <- client$search$basic(
  "myocardial infarction",
  vocabulary_ids = "SNOMED",
  domain_ids = "Condition",
  standard_concept = "S",
  include_synonyms = TRUE,
  min_score = 0.5,
  page_size = 20
)

Autocomplete

Get suggestions as the user types:
result <- client$search$autocomplete("diab", page_size = 10)
for (suggestion in result$suggestions) {
  print(suggestion$suggestion)
}

# With vocabulary and domain filters
result <- client$search$autocomplete(
  "diab",
  vocabulary_ids = c("SNOMED"),
  domains = c("Condition"),
  page_size = 10
)

Pagination

Manual Pagination

# Get first page
results <- client$search$basic("diabetes", page = 1, page_size = 50)

# Access pagination metadata
pagination <- results$meta
cat(sprintf("Total: %d\n", pagination$total_items))
cat(sprintf("Pages: %d\n", pagination$total_pages))
cat(sprintf("Has next: %s\n", pagination$has_next))

# Get next page
if (isTRUE(pagination$has_next)) {
  results <- client$search$basic("diabetes", page = 2, page_size = 50)
}

Auto-Pagination with basic_all()

Fetch all results automatically and return as a tibble:
# Fetch up to 5 pages of results
all_results <- client$search$basic_all(
  "diabetes",
  page_size = 100,
  max_pages = 5,
  progress = TRUE  # Show progress bar
)

# Results are returned as a tibble
print(nrow(all_results))
print(names(all_results))

# Use with dplyr
library(dplyr)
all_results %>%
  filter(vocabulary_id == "SNOMED") %>%
  select(concept_id, concept_name, domain_id)
The basic_all() method returns a tibble, making it easy to integrate with tidyverse workflows.
Use advanced search with additional filtering options and facets:
results <- client$search$advanced(
  "diabetes",
  vocabulary_ids = c("SNOMED", "ICD10CM"),
  domain_ids = "Condition",
  standard_concepts_only = TRUE,
  page_size = 50
)

# Access results
for (concept in results$data) {
  cat(sprintf("%s: %s\n", concept$concept_id, concept$concept_name))
}

# Access pagination
cat(sprintf("Total: %d\n", results$meta$pagination$total_items))

Advanced Search Parameters

ParameterTypeDefaultDescription
querycharacterrequiredSearch query string
vocabulary_idscharacterNULLFilter by vocabulary IDs
domain_idscharacterNULLFilter by domain IDs
concept_class_idscharacterNULLFilter by concept class IDs
standard_concepts_onlylogicalFALSEOnly return standard concepts
include_invalidlogicalTRUEInclude invalid concepts
relationship_filterslistNULLRelationship-based filters
pageinteger1Page number (1-based)
page_sizeinteger20Results per page

Relationship Filters

Apply relationship-based filtering:
results <- client$search$advanced(
  "diabetes",
  relationship_filters = list(
    list(relationship_id = "Is a", concept_id = 4116142)  # Has parent concept
  ),
  standard_concepts_only = TRUE
)
Search for concepts using natural language with neural embeddings. Semantic search understands meaning, not just keywords.
# Basic semantic search
results <- client$search$semantic("heart attack", page_size = 10)

# With filters
results <- client$search$semantic(
  "diabetes mellitus",
  vocabulary_ids = "SNOMED",
  domain_ids = "Condition",
  threshold = 0.5,  # Higher = more similar
  page_size = 20
)

# Access results with similarity scores
for (concept in results$data$results) {
  cat(sprintf("%s: %.2f\n", concept$concept_name, concept$similarity_score))
}

Semantic Search Parameters

ParameterTypeDefaultDescription
querycharacterrequiredNatural language search query
vocabulary_idscharacterNULLFilter by vocabulary IDs
domain_idscharacterNULLFilter by domain IDs
standard_concept”S” | “C”NULLFilter by standard concept flag
concept_class_idcharacterNULLFilter by concept class
thresholdnumeric0.5Minimum similarity (0.0-1.0)
pageinteger1Page number
page_sizeinteger20Results per page (max 100)

Auto-Pagination with semantic_all()

Fetch all semantic search results automatically and return as a tibble:
# Fetch all results as tibble
all_results <- client$search$semantic_all(
  "diabetes",
  page_size = 100,
  max_pages = 5,
  progress = TRUE
)

# Returns tibble with concept_id, similarity_score, etc.
print(all_results)

# Use with dplyr
library(dplyr)
all_results %>%
  filter(similarity_score > 0.6) %>%
  select(concept_id, concept_name, similarity_score)

# With filters
all_results <- client$search$semantic_all(
  "heart failure",
  vocabulary_ids = "SNOMED",
  threshold = 0.4,
  page_size = 50
)
The semantic_all() method returns a tibble, making it easy to integrate with tidyverse workflows.

Find Similar Concepts

Find concepts similar to a reference concept or query. Provide exactly one of: concept_id, concept_name, or query.
# By concept ID
similar <- client$search$similar(concept_id = 4329847)  # MI

# By concept name
similar <- client$search$similar(concept_name = "Type 2 diabetes mellitus")

# By natural language query
similar <- client$search$similar(query = "elevated blood sugar")

# With all options
similar <- client$search$similar(
  concept_id = 4329847,
  algorithm = "semantic",  # or "lexical", "hybrid"
  similarity_threshold = 0.7,
  page_size = 50,
  vocabulary_ids = "SNOMED",
  domain_ids = "Condition",
  include_scores = TRUE,
  include_explanations = TRUE
)

# Access results
for (concept in similar$similar_concepts) {
  cat(sprintf("%s: %.2f\n", concept$concept_name, concept$similarity_score))
}

Similar Concepts Parameters

ParameterTypeDefaultDescription
concept_idintegerNULLSource concept ID
concept_namecharacterNULLSource concept name
querycharacterNULLNatural language query
algorithmcharacter”hybrid""semantic”, “lexical”, or “hybrid”
similarity_thresholdnumeric0.7Minimum similarity (0.0-1.0)
page_sizeinteger20Max results (max 1000)
vocabulary_idscharacterNULLFilter by vocabulary
domain_idscharacterNULLFilter by domain
standard_conceptcharacterNULL”S”, “C”, or “N”
include_invalidlogicalNULLInclude invalid/deprecated concepts
include_scoreslogicalNULLInclude detailed scores
include_explanationslogicalNULLInclude similarity explanations

Algorithm Comparison

AlgorithmBest ForSpeed
semanticMeaning-based similaritySlower
lexicalText/string similarityFaster
hybridBalanced approachMedium