- we want to allow people to share concepts from their data dictionaries in a central repository
- you can download other people's concepts, but that really means making your own copy of someone else's concept. (Your new copy is then shared, so there are two copies of the concept in the repository.)
- the server will use a "wisdom of crowds" approach to sorting search results, so if I search for "weight" and 20 people have shared identical weight concepts, that will be the top hit.
(Because of the way that multiple copies of concepts get stored on the server, we eventually need to be able to handle 1 million-plus concepts.)
We have an existing codebase for this, but we have concerns about its scalability and maintainability. We want to look at the feasibility of re-implementing that server component in a tool built for that purpose (Apache Solr) rather than writing document management, indexing, etc, ourselves.
Things we need to spike on:
- Export a concept from OpenMRS as XML and store that document in Solr. (Sample XML for OpenMRS 1.6 and 1.7 is in a comment on
OCC-56. Use the 1.7 example.)
- Example of leveraging Solr to query for "concepts that are structured in a similar way, and match a search term"
- Handle the fact that different versions of OpenMRS have changes to the data model for Concept, so the XML isn't quite the same - e.g., defining a schema within SOLR that is a superset of all versions or otherwise allows for the variability between versions.
- Extra credit: Demonstrate how the server can manage part of the schema (e.g., tags, lookup terms, and/or lists of linkages) to better organize concept documents in the OCC and allow for additional search options without exposing OCC clients to these extra metadata. For example: add an occ-tags field to hide concepts from searches when "hide" is added and/or add an occ-links that can contain UUIDs of other concepts in the OCC