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:
Anteriormente
Busca de texto completoPróximo
Criar um índice