Skip to content

Commit ee08fca

Browse files
author
alex-omophub
committed
Refactor search examples to streamline API response handling
- Updated `basic_search`, `filtered_search`, and `bulk_lexical_search` functions to directly access results from the `client.search` methods, simplifying the code structure. - Enhanced comments to clarify the response formats and improve documentation for better user understanding.
1 parent c80ff44 commit ee08fca

1 file changed

Lines changed: 13 additions & 17 deletions

File tree

examples/search_concepts.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@ def basic_search() -> None:
1616
"""Demonstrate basic concept search."""
1717
print("=== Basic Search ===")
1818

19-
# ``search.basic`` returns a dict with a ``concepts`` list plus pagination
20-
# metadata - read the list from ``result["concepts"]``.
21-
result = client.search.basic("heart attack")
22-
concepts = result["concepts"]
19+
# Simple text search - returns a flat list of concept dicts
20+
concepts = client.search.basic("heart attack")
2321
print(f"Found {len(concepts)} concepts for 'heart attack'")
2422

2523
for c in concepts[:3]:
@@ -30,15 +28,14 @@ def filtered_search() -> None:
3028
"""Demonstrate search with filters."""
3129
print("\n=== Filtered Search ===")
3230

33-
# Search in specific vocabularies. Same dict-shaped response as above.
34-
result = client.search.basic(
31+
# Search in specific vocabularies
32+
concepts = client.search.basic(
3533
"myocardial infarction",
3634
vocabulary_ids=["SNOMED", "ICD10CM"],
3735
domain_ids=["Condition"],
3836
standard_concept="S", # Only standard concepts
3937
page_size=10,
4038
)
41-
concepts = result["concepts"]
4239
print(f"Found {len(concepts)} standard condition concepts")
4340

4441
for c in concepts[:5]:
@@ -48,15 +45,14 @@ def filtered_search() -> None:
4845
def bulk_lexical_search() -> None:
4946
"""Demonstrate bulk lexical search — multiple queries in one call.
5047
51-
``bulk_basic`` returns a dict with a ``results`` list (plus
52-
``total_searches`` / ``completed_searches`` / ``failed_searches``
53-
counts). Each item in ``results`` has ``search_id``, ``query``,
54-
``results`` (a nested list of concepts), ``status``, and ``duration``.
48+
``bulk_basic`` returns a list of per-query result objects. Each item
49+
has ``search_id``, ``query``, ``results`` (a nested list), ``status``,
50+
and ``duration``.
5551
"""
5652
print("\n=== Bulk Lexical Search ===")
5753

5854
# Search for multiple terms at once (up to 50)
59-
response = client.search.bulk_basic(
55+
items = client.search.bulk_basic(
6056
[
6157
{"search_id": "q1", "query": "diabetes mellitus"},
6258
{"search_id": "q2", "query": "hypertension"},
@@ -65,13 +61,13 @@ def bulk_lexical_search() -> None:
6561
defaults={"vocabulary_ids": ["SNOMED"], "page_size": 5},
6662
)
6763

68-
for item in response["results"]:
64+
for item in items:
6965
print(
7066
f" {item['search_id']}: {len(item['results'])} results ({item['status']})"
7167
)
7268

7369
# Per-query overrides — different domains per query
74-
response = client.search.bulk_basic(
70+
items = client.search.bulk_basic(
7571
[
7672
{
7773
"search_id": "conditions",
@@ -84,7 +80,7 @@ def bulk_lexical_search() -> None:
8480
)
8581

8682
print("\n Per-query domain overrides:")
87-
for item in response["results"]:
83+
for item in items:
8884
print(f" {item['search_id']}:")
8985
for c in item["results"][:3]:
9086
print(f" {c['concept_name']} ({c['vocabulary_id']}/{c['domain_id']})")
@@ -128,8 +124,8 @@ def bulk_semantic_search() -> None:
128124
def autocomplete_example() -> None:
129125
"""Demonstrate autocomplete suggestions.
130126
131-
``concepts.suggest`` returns its own response shape (distinct from
132-
``search.basic``); read suggestion fields off each item directly.
127+
``concepts.suggest`` returns a flat list of concept dicts - the same
128+
shape as ``search.basic`` - so you read ``concept_name`` directly.
133129
"""
134130
print("\n=== Autocomplete ===")
135131

0 commit comments

Comments
 (0)