Architecture – Architecting a universal search for a product with microservices

Architectureelasticsearchsearch-engine

We are building a new product in real estate space and the end users of this product are not so tech savvy. To have better user experience with our product, we want our users to find relevant things quickly and easily. Apart from a simple UI, a universal search bar seems to add value.

The search bar with auto-complete will allow users to find information such as – their billing history (past payments, invoices..), help content, support content from helpdesk tickets, data from chat history and such.

We are going with microservices architecture for our services such as user management, help ticket system, chat, CMS for help content and more. The question is how do we build this central search service that can index and store all user content from all these services that user will be able to search.

Would each service would dump data into elasticsearch to be indexed and made available for search which then a search service than query? Say when a support ticket is open, or a chat conversation is closed would the relevant microservice copy this data into a service like elastic search? Would it be better for the microservices to push such data to a queue which then is consumed into elasticsearch?

I'm open to any ideas and thoughts on how search is architected nad the best practices there of. Happy to provide more information on our service if it helps with a better answer.

UPDATED:

  • There is one DB per microservice
  • Search need not be real time
  • Not too worried about the load and we will go with hosted search – AWS cloudsearch or elasticsearch

Best Answer

I Would avoid a 'Central Service' you can end up with a big blob of unstructured data.

Presumably once the user has found something in there, you will want to do something with the result and this will require structured data.

Each MicroService should be responsible for its own data and supply a search function.

When the user does a global search, you can either hit all the MicroServices, or do some processing to try and narrow down the type first.

Related Topic