Configurar o cliente Python do Elasticsearch

Nesta seção, você instalará a biblioteca cliente do Elasticsearch para Python e a utilizará para se conectar ao serviço Elasticsearch.

Instalação

A biblioteca cliente Elasticsearch é um pacote Python que é instalado com pip. Certifique-se de que o ambiente virtual que você criou anteriormente esteja ativado e, em seguida, execute o seguinte comando para instalar o cliente:

Para evitar possíveis incompatibilidades, certifique-se de que a versão da biblioteca cliente do Elasticsearch que você instalar corresponda à versão do Elasticsearch Stack que você está usando.

É sempre recomendável manter o arquivo requirements.txt atualizado com todas as suas dependências, portanto, este é um bom momento para atualizar esse arquivo e incluir o pacote recém-instalado. Execute o seguinte comando no seu terminal:

Conectar-se ao Elasticsearch

Para criar uma conexão com o seu serviço Elasticsearch, um objeto Elasticsearch deve ser criado com as opções de conexão apropriadas.

Crie um novo arquivo search.py no seu editor de código, localizado no diretório search-tutorial . O arquivo search.py será onde todas as funções de busca serão definidas. A ideia de ter um arquivo separado para a funcionalidade de busca é facilitar a extração desse arquivo e sua adição aos seus projetos posteriormente.

Insira o seguinte código em search.py para adicionar uma classe Search :

Há muita coisa para analisar aqui. A função load_dotenv() que é chamada logo após as importações vem do pacote python-dotenv . Este pacote sabe como trabalhar com arquivos .env. arquivos, que são usados para armazenar variáveis de configuração, como senhas e chaves. A função load_dotenv() lê as variáveis que estão armazenadas no arquivo .env. O arquivo é importado para o processo Python como variáveis de ambiente.

A classe Search possui um construtor que cria uma instância da classe cliente Elasticsearch . É aqui que reside toda a lógica do cliente para se comunicar com o serviço Elasticsearch. Observe que esta linha está incompleta, pois é necessário incluir opções de conexão adequadas ao seu serviço. Abaixo, você encontrará informações sobre as opções aplicáveis ao seu caso. Uma vez criado, o objeto Elasticsearch é então armazenado em uma variável de instância chamada self.es.

Para garantir que o objeto cliente possa se comunicar com sua implantação do Elastic Cloud, o método info() é invocado. Este método faz uma chamada ao serviço solicitando informações básicas. Se essa chamada for bem-sucedida, você pode presumir que possui uma conexão válida com o serviço.

O método imprime uma mensagem de status indicando que a conexão foi estabelecida e, em seguida, usa a função pprint do Python para exibir as informações que o serviço retornou em um formato fácil de ler.

NOTA: Você pode ter notado que o pacote json da biblioteca padrão do Python é importado neste arquivo, mas não é usado. Não remova esta importação, pois este pacote será usado posteriormente.

Para completar o construtor da classe Search , o objeto Elasticsearch precisa receber opções de conexão apropriadas. As subseções a seguir explicarão quais opções você precisa para os métodos de instalação do Elastic Cloud e do Docker.

Conectar-se a uma implantação na Elastic Cloud

Se você seguiu as instruções para criar uma implantação no Elastic Cloud, precisará saber o ID da nuvem da implantação e sua chave de API. Como esses são valores sensíveis, não é uma boa ideia incluí-los diretamente no código do aplicativo. Em vez disso, crie um arquivo .env. Arquivo (pronuncia-se ponto-env) no qual esses segredos podem ser armazenados com segurança.

Abra seu editor de código favorito e crie um novo arquivo no diretório do projeto search-tutorial com o nome .env. (Não se esqueça do ponto inicial). Insira o seguinte conteúdo neste arquivo:

NOTA: Se você pretende adicionar este projeto a um repositório de controle de versão, certifique-se de não incluir o seu arquivo .env. arquivo, para evitar que as credenciais da sua conta Elastic sejam comprometidas.

Se estiver usando o Git, adicione a seguinte linha ao final do seu arquivo .gitignore. arquivo (ou crie um novo arquivo se ainda não houver um):

Depois de inserir suas credenciais no arquivo .env No arquivo search.py , volte ao construtor da classe Search e edite a primeira linha da seguinte forma:

Os valores para os argumentos cloud_id e api_key são extraídos do ambiente, que o Python mantém no dicionário os.environ . Essas variáveis são lidas do arquivo .env. arquivo e armazenado neste dicionário pela função load_dotenv() .

Conecte-se a um contêiner Docker do Elasticsearch auto-hospedado.

Se você optou por executar um serviço Elasticsearch hospedado localmente usando o Docker, a única opção de conexão necessária é o endpoint de conexão. Edite a primeira linha do construtor da classe Search em search.py da seguinte forma:

Nesta versão do construtor, o objeto Elasticsearch é instanciado com a URL do endpoint de nível superior do serviço Elasticsearch, que normalmente é http://localhost:9200. Lembre-se de que as instruções do Docker desativam explicitamente a criptografia e a autenticação, portanto, por esse motivo, não é necessário fornecer nenhuma credencial.

Teste a conexão

Neste ponto, você está pronto para se conectar ao seu serviço Elasticsearch. Para fazer isso, certifique-se de que seu ambiente virtual Python esteja ativado e digite python para iniciar uma sessão interativa do Python. Você deverá ver o prompt familiar >>> , no qual você pode inserir instruções Python.

Importe a classe Search da seguinte forma:

Em seguida, instancie a nova classe:

Você deverá ver uma mensagem de conexão, seguida pelas informações retornadas pelo método info() do cliente. Exceto por diferenças nos identificadores e números de versão, a saída deverá ser semelhante à seguinte:

Se você receber erros, verifique se inseriu as credenciais corretas no arquivo .env. arquivo se você estiver usando uma implantação do Elastic Cloud ou, no caso de uma implantação auto-hospedada, que você esteja executando o contêiner Docker do Elasticsearch em seu computador conforme as instruções.

Integre o Elasticsearch com a aplicação Flask.

O passo final desta seção é integrar o trabalho realizado até agora na pequena aplicação Flask que você instalou anteriormente. O objetivo é que o aplicativo crie automaticamente uma conexão com o Elasticsearch ao ser iniciado.

Para fazer isso, abra o arquivo app.py no seu editor de código. Adicione uma declaração de importação para o módulo search.py abaixo das únicas importações existentes:

Em seguida, encontre a linha em que a variável app é criada e, logo depois, crie a instância da nova classe Search :

É isso! Agora o aplicativo possui um objeto es para usar quando necessário. Se você ainda estiver executando o aplicativo Flask em um terminal, deverá ver o aplicativo recarregar assim que salvar o arquivo. Como resultado da recarga, as informações de conexão impressas pelo construtor da classe Search devem aparecer e continuarão a aparecer sempre que o aplicativo for reiniciado a partir de agora.

Se você não estiver executando o aplicativo Flask, agora é um bom momento para iniciá-lo. Em uma janela de terminal, acesse o diretório do projeto, ative o ambiente virtual do Python e inicie o aplicativo com o seguinte comando:

Para ajudar na resolução de problemas caso você encontre erros, aqui está uma cópia completa do arquivo app.py com o cliente Elasticsearch integrado:

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)