Um recurso de pesquisa pode ser modelado como um serviço separado, com responsabilidade separada dos dois serviços mencionados. Portanto, a abordagem aqui pode ser criar um novo serviço ('pesquisa') e armazenar uma cópia dos dados de ambos os serviços em um formato fácil de indexar e pesquisar, possivelmente também desnormalizado para gerar resultados rapidamente. o formato desejado.
Assim, por exemplo, você poderia ter o banco de dados SQL herdado usando, por exemplo, mySql, o outro microsserviço usando, por exemplo, MongoDB, e o novo serviço de pesquisa usando a pesquisa elástica com dados de ambos já colados (desnormalizados) para um acesso mais conveniente. é claro que os detalhes dependerão do tipo de pesquisa que você precisa realizar.
Os dados dos dois serviços seriam melhor transferidos de forma assíncrona para o índice de pesquisa por meio de um barramento de eventos como Kafka ou Hermes, a fim de aumentar a taxa de transferência e reduzir o acoplamento entre os serviços. Uma alteração em qualquer um dos dois serviços enviaria um evento informando o serviço de pesquisa para também atualizar seus dados.
Obviamente, existe o custo de um atraso adicional entre alterações nos serviços e no serviço de pesquisa, mas como os microsserviços são geralmente usados em sistemas distribuídos, alguns atrasos e inconsistências temporárias são inevitáveis. Ter um serviço adicional e usar armazenamento extra para uma cópia dos dados que já estão nos outros dois serviços também é um custo típico de ter um sistema altamente distribuído e escalável usando microsserviços.