Elasticsearch na saúde

Na série de artigos, pretendo demonstrar o uso do elasticsearch com PHP na área de saúde em um ambiente de produção.

[ Hits: 4.004 ]

Por: Jackson Veroneze em 15/09/2016 | Blog: https://jacksonveroneze.com


Introdução



Olá galera, a partir de hoje vou fazer uma série de artigos sobre elasticsearch com PHP. Conforme vamos implementando, vou adicionando novos.

A empresa em que trabalho desenvolve sistemas para gestão de saúde (secretarias, assistência social, hospitais entre outros).Recentemente certificamos nosso sistema para secretarias no SBIS (Sociedade Brasileira de Informática em Saúde).

Um dos itens que tivemos que cumprir era poder pesquisar por uma palavra ou nome no sistema e o mesmo ter que retornar todas as ocorrências para o mesmo, por exemplo, se pesquisar por dengue, tem que trazer todos os pacientes com dengue.

Inicialmente, tentamos fazer a busca diretamente como banco relacional (postgres), com poucos dados no banco ficou rápido, porém como temos clientes que tem banco com muitos gigas de dados, ficou extremamente lento.

Foi ai que conhecemos o elasticsearch e depois de algumas pesquisas e leituras, decidimos usá-lo para satisfazer o gargalo do banco de dados relacional.

Dados técnicos da infra:
  • PHP ^5.5
  • Nginx ou apache
  • Postgres 9.4
  • Zend Framework 1.12
  • Doctrine ORM 2.5

Estou usando a imagem para docker nos testes e para escrever o artigo.

Link: https://hub.docker.com/_/elasticsearch/

Instalando o cliente do elasticsearch

Vou partir do ponto que já temos um sistema em produção, portanto configurações de PHP, framework e afins não serão abordadas.

Instalando o cliente para PHP:

Nesta primeira etapa, vou adicionar a dependência do elasticserach ao composer.json. Dentro da sessão require, após suas dependências, adicione a seguinte string.

"elasticsearch/elasticsearch": "~2.0"

Em seguida abra o terminal, navegue até o diretório onde está seu projeto e digite:

# php composer.phar update

Este comando vai fazer o composer atualizar as dependências do projeto e baixar o cliente do elasticsearch.

Obtendo a instância do cliente

Após baixadas as dependências, vou criar uma classe dentro da estrutura do projeto com o objetivo de me devolver a instância do cliente. Vou fazer isso afim de prover um único lugar que instancie o mesmo.

Caso contrário, cada desenvolvedor vai criar a instância como bem entender e vai acabar virando uma bagunça.

Para isso usarei o pattern singleton, a fim de manter a mesma instância para todas as operações.

<?php

namespace CoreElasticsearchClient;

use ElasticsearchClient as ClientElasticsearch;
use ElasticsearchClientBuilder;

class Client
{

    /**
     * Método construtor da classe.
     */
    private function __construct()
    {
        
    }

    /**
     * Método clone do tipo privado previne a clonagem dessa instância da classe
     *
     * @return void
     */
    private function __clone()
    {
        
    }

    /**
     * Método unserialize do tipo privado para prevenir a desserialização da instância dessa classe.
     *
     * @return void
     */
    private function __wakeup()
    {
        
    }

    /**
     * Método responsável por criar a instância.
     * 
     * @return ClientElasticsearch
     */
    public static function getInstance()
    {
        static $instance = null;

        if (null === $instance) {
            // Aqui busco no arquivo de configurações os server que estão rodando elastic.
            // Vou deixar fixo para os testes.
            $hosts = ['172.17.0.1:9200'];

            $clientBuilder = ClientBuilder::create();
            $clientBuilder->setHosts($hosts);
            $instance = $clientBuilder->build();
        }

        return $instance;
    }

}

No próximo artigo, vou abordar o uso de índices e tipos.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

O eeePC e o OS/2 Warp

Paginação de resultados com a classe ADODB

Tutorial Kettle

Exportando e importando confs do Putty em Windows

MySQL + Amarok: dupla poderosa

  
Comentários
[1] Comentário enviado por mm75 em 15/09/2016 - 14:27h

Jackson, muito bom o artigo!
Aguardando os próximos... :D

[2] Comentário enviado por ambrodrigues em 15/09/2016 - 19:18h

Ótimo artigo. Aguardando os próximos para completar o tema.

[3] Comentário enviado por plara em 16/09/2016 - 16:28h

No aguardo. Estou ansioso pra ver os próximos.

[4] Comentário enviado por jacksonveroneze em 19/09/2016 - 07:53h


[1] Comentário enviado por mm75 em 15/09/2016 - 14:27h

Jackson, muito bom o artigo!
Aguardando os próximos... :D


Obrigado Mario, logo sai.

[5] Comentário enviado por jacksonveroneze em 19/09/2016 - 07:53h

[2] Comentário enviado por ambrodrigues em 15/09/2016 - 19:18h

Ótimo artigo. Aguardando os próximos para completar o tema.

Obrigado Alessandro, logo sai.

[6] Comentário enviado por jacksonveroneze em 19/09/2016 - 08:12h


[3] Comentário enviado por plara em 16/09/2016 - 16:28h

No aguardo. Estou ansioso pra ver os próximos.


Obrigado plara, logo sai.

[7] Comentário enviado por robertopc em 22/09/2016 - 14:27h

Estou configurando um servidor com wordpress + elasticsearch... interessado nos próximos artigos.

[8] Comentário enviado por jacksonveroneze em 07/10/2016 - 10:52h


[7] Comentário enviado por robertopc em 22/09/2016 - 14:27h

Estou configurando um servidor com wordpress + elasticsearch... interessado nos próximos artigos.


Logo sai o próximo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts