IHTSDO / snowstorm

Scalable SNOMED CT Terminology Server using Elasticsearch
Other
204 stars 80 forks source link

Loading concepts with embedded definitions #448

Open DurandA opened 1 year ago

DurandA commented 1 year ago

Is it possible to search for concepts (/{branch}/concepts?term=searchTerm endpoint) and to embed definitions in returned concepts?

We have a use-case where we need to find concepts according to a search term and to display the first definition. Making subqueries to /{branch}/concepts/{conceptId}/descriptions would be inefficient and too slow for real-time use. We could also do the reverse query and search for descriptions and aggregate by concept. However, the /{branch}/concepts/{conceptId}/descriptions do not offer much flexibility as we need to use an ECL query to filter the result by parent.

kaicode commented 1 year ago

Hi @DurandA, I'm very sorry no one got back to you about your query, I'm not sure how your question got missed.

It sounds like you would like to search SNOMED CT and filter the results by parent. Could I suggest that rather than fetching the definitions of the concept to do the filtering, I recommend using the Expression Constraint Language (ECL). This would allow you to specify a parent filter and text filter at the same time.

For example the ECL query <404684003 |Clinical finding| would filter for all the concepts that are a descendant of Clinical finding. In ECL the term between the pipes is optional so this ECL gives the same results: <404684003.

This can be used when searching concepts using the ecl parameter. For example: /{branch}/concepts?ecl=<404684003&termActive=true&term=searchTerm I have also added the termActive parameter here so that no inactive descriptions are used in the search.

Also, rather than using the native Snowstorm API, it's possible to achieve the same thing using the standardised FHIR Terminology API: https://snowstorm.ihtsdotools.org/fhir/ValueSet/$expand?url=http://snomed.info/sct?fhir_vs=ecl/%3C404684003&filter=asthma

Does that help to answer your question?

Kind regards, Kai Kewley


Please note that the public Snowstorm server is for light use and testing purposes only. If you need a production instance please set up your own Snowstorm instance.