Distributed search for Patients and Concepts: ElasticSearch or OpenSearch

In order to enable horizontal scaling for OpenMRS as well as take off some load from the OpenMRS instance we need to point Hibernate Search to a distributed search engine instead of the in-built Lucene index that we use right now for the Patients and Concepts search.

I am hoping that we will be able to continue to support the in-built index for implementations that are running on a weaker hardware while bigger implementation would just need to change the configuration once they deploy a new search service.

Hibernate Search supports the built-in Lucene index and OpenSearch or ElasticSearch as distributed backend.

We need to choose between ElasticSearch and OpenSearch. Apparently ElasticSearch can be considered open-source again and OpenSearch definitely is open-source.

Switching to OpenSearch or ElasticSearch does require a bit of changes in openmrs-core and providing a new implementation for queries against the distributed search engine, but it’s not a huge effort. From the perspective of code it doesn’t matter if the backend is OpenSearch or ElasticSearch. Hibernate Search can support both with the same code.

I’m looking for opinions which would be preferred by the community. It’s not a deal breaker since one can still decide which engine to deploy, but our reference setup will include examples and instructions just for one of them.

1 Like

An important consideration would be if large implementations are already running one of them to do some data processing or use them with other tools so please speak up. @grace will you be able to help and reach out to implementations and ask if they have experience with OpenSearch or ElasticSearch and what is their preference?

I would vote ElasticSearch for our reference setup examples, because it has a more mature and bigger documentation. :wink: