Post: [Elasticsearch no Delphi] Como usar o Elasticsearch no Delphi

Alessandro Medeiros

Fala Radizeiro e Radizeira, tudo bem com vocês?

Passamos essa nossa série mostrando tudo sobre o Elasticsearch.

Agora que você já conhece bem sobre o Elastic, agora iremos conhecer como utilizá-lo no Delphi.

Isso mesmo, é possível integrar o elastic com o Delphi, e você verá o quanto é fácil essa integração.

E eu estive criando uma biblioteca para trabalhar com o elastic, pois não encontrei nenhuma biblioteca que possa fazer esse trabalho para nós.

E por que não tinha?

Porque ele é REST, e trabalhar com REST no Delphi é algo muito simples.

Mas eu achei muito interessante fazer algo que facilitasse, e pudesse olhar a documentação do elastic, onde diz quais a chamada e traduzir para dentro do Delphi.

Eu criei esse framework, e está no meu github(colocar link).

E observe o código de como é simples sua implementação.

Primeira coisa que você tem que entender, é que esse framework trabalha como interface.

Onde você terá que criar uma variável que tenha como tipo a interface iTBGElasticSearch.

private
FElastic : iTBGElasticSearch;

E dentro do create do seu formulário, você simplesmente irá inserir a classe concreta dessa interface.

procedure TForm1.FormCreate(Sender: TObject);
begin
FElastic := TTBGElasticSearch.New
.Host('http://localhost')
.Port(9200)
.Index('passaporte')
._Type('notas')
.DataSet(FDMenTable1);
end;

Observe que ao instanciar eu passei o host, porta, a index, que seria o banco de dados, type(tabela), e seu retorno irá alimentar um Dataset, que nesse caso foi o FDMemTable.

Nesse caso o nosso FDMemtable já encontra-se ligado via livebinding com o stringgrid.

E seu uso é muito simples, na hora que for implementar suas querys dentro dele.

Observe como é realizada a busca, e vamos traduzir aquela busca que fizemos anteriormente.

Essa busca que fizemos no postman, é possível realizar diretamente no componente.

Isso mesmo, essa busca por dois campos.

procedure TForm1.Button5Click(Sender: TObject);
begin
FElastic
._search
.Query
.Bool
.Must
.Match
.AddField('ITENS.DESCRICAO_PRODUTO', 'FILTRO')
.AddField('ITENS.DESCRICAO_PRODUTO','ANEL')
.&End
.&End
.&End
.&End
.Execute;
end;

Simplesmente fizemos a mesma coisa que foi feita na imagem da pesquisa no postman, mas convertendo para a linguagem Delphi.

Peguei o JSON, e traduzi para interface no Delphi para que ele já monta-se a estrutura para nós mais fácil.

O que nós vimos na documentação do elastic, conseguimos traduzir para o Delphi.

Vamos compilar, e observar que o Delphi terá que nos trazer tudo que esteja na condição que acabamos de passar.

Observe que ele trouxe tudo dentro daquela condição.

Só o que acontece aqui, o elastic por padrão, em todas as buscas que você faz com ele, ele traz os 10 primeiros registros.

Nesse caso você pode aumentar e paginar, fazer scroll, tem várias opções para isso.

Se eu quero aumentar minha quantidade de registro na minha busca, dentro da propriedade query eu tenho o Size, onde eu posso definir a quantidade de registro de retorno.

procedure TForm1.Button5Click(Sender: TObject);
begin
FElastic
._search
.Query
.Bool
.Must
.Match
.AddField('ITENS.DESCRICAO_PRODUTO', 'FILTRO')
.AddField('ITENS.DESCRICAO_PRODUTO','ANEL')
.&End
.&End
.&End
.&End
.Size(1000)
.Execute;
end;

Com isso observe que temos um retorno com mais registros.

Ele trouxe os 1000 registros que contêm as condições da pesquisa.

Tudo isso diretamente do Delphi.

E como você deve lembrar, o elastic traz para nós um json cheio de informações, e eu fiz uma tradução melhor para se comportar dentro do dataset.

Dessa forma, ele vem com todos os dados que nós precisamos.

E ainda possuímos outras opções, que é possível ver nos exemplos disponíveis no github.

Como por exemplo o Range, que traz para nós todas as notas, por exemplo, entre 100 e 101 reais.

procedure TForm1.Button4Click(Sender: TObject);
begin
Memo1.Lines.Add(
FElastic
._search
.Query
.Range
.Field('TOTAL')
.gte(100)
.lte(101)
.&End
.&End
.Execute
.asJsonObject.ToString
);
end;

Todas as opções que você tiver numa query do elastic você tem dentro desse framework, e melhorado.

Observe que retornamos todas as notas dentro do período determinado.

E ainda podemos aumentar a paginação como fizemos anteriormente.

Muito legal, não é pessoal?

Isso é muito simples, e o elastic é muito mais rápido e performático do que um banco relacional.

Observe o código abaixo, eu estou utilizando o Should, é como se fosse o and.

Onde possui o nome do comprador “SYSTEMA”, descrição “FILTRO” e a observação da nota tem a “RETIRADA”.

E realizamos um filtro como um termo, porque ele trata como termos exatos.

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Add(
FElastic
._search
.Query
.Bool
.Should
.Match
.AddField('NOME_COMPRADOR','SYSTEMA')
.AddField('ITENS.DESCRICAO','FILTRO')
.AddField('OBS_NF','RETIRADA')
.&End
.&End
.Filter
.Term
.AddField('CFOP','5102')
.&End
.Range
.Field('TOTAL')
.gte(100)
.lte(500)
.&End
.&End
.&End
.&End
.From(0)
.Size(50)
.Execute
.asJsonObject.ToJSON
);
end;

Ele realiza essa busca, que acabamos de criar.

Viu como fica fácil implementar no Delphi, e o legal é que estamos trabalhando com Fluent Interface, onde dá maior legibilidade no seu código.

Esse framework foi feito para facilitar a vida de vocês, mas nada impede de você acessar a documentação e fazer as requisições da chamada rest.

Ele simplesmente trouxe para nós somente notas com CFOP 5102, entre 100 e 500 reais, e a descrição do produto tenha filtro, e dentro do campo comprador tenha systema.

Muito legal, não é pessoal?

É fantástico trabalhar com elástic, e tenho certeza que depois que começar a utilizar, e você não irá querer outra coisa.

E caso você tem interesse de conhecer mais sobre Elasticsearch no Delphi acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI.

Você não terá só conteúdos relacionados ao Elasticsearch, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.

CLIQUE AQUI E SAIBA MAIS SOBRE O CLUBE DOS PROGRAMADORES DELPHI


Faça sua busca

CATEGORIAS

POSTS RECENTES

E caso você tem interesse de conhecer mais sobre [Elasticsearch no Delphi] Como usar o Elasticsearch no Delphi, acesse o nosso portal do CLUBE DE PROGRAMADORES EM DELPHI
Você não terá só conteúdos relacionados ao [Elasticsearch no Delphi] Como usar o Elasticsearch no Delphi, mas uma quantidade enorme de conteúdos que poderá lhe ajudar muito no seu dia a dia, é uma verdadeira NETFLIX para os programadores Delphi.
Gostou?
Compartilhe:

Embarque no foguete com milhares de devs para aprender desenvolvimento, evoluir de forma contínua e se manter relevante no mercado.

Dúvidas
Cadastre-se em nossa lista

Para ter acesso em primeira mão, a tudo que acontece na Academia do Código, basta se cadastrar em nossa lista

Grupo Thulio Bittencourt | Academia do Código

#FaçaPartedaHistória

Copyright © 2024 – Todos os direitos reservados