Como implementar Full-Text Search em seus sistemas, muito rapido...
Tive oportunidade de ver varias mundancas acontecendo nas formas de trabalho e nas tecnologias em desenvolvimento de sistemas, sou da turma do hands-on e sempre curti avancar na linha do tempo... procurar melhorar meu estilo/forma/ferramentas/conhecimento. É muito bacana criar/tornar real soluções para pessoas.
Hoje, uma feature que agrega muito valor para se colocar em nossos sistemas é o Full-Text Search, em formas gerais, um Google dentro de seu sistema... mas como fazer isso?
Um pouco de historia...
O comeco da busca de dados como conhecemos hoje comecou aqui The Anatomy of a Large-Scale Hypertextual Web Search Engine.
Um ano depois o pessoal open-souce lançava o Lucene e mais tarde com uma serie de features uma plataforma para busca, utilizando o Lucene como nucleo, foi desenvolvido o Solr.
Na epoca nao havia Cloud, um servidor era o valor de um carro... isso era jogo de grandes $$$ empresas...
Mas em 2010 as coisas ja tomavam outros rumos e novos horizontes estavam chegando para a Web... dai Shay Banon comecou a estudar o Lucene e deu inicio ao Elastic Search, um sistema de busca completo com uma relativa facil instalacao, um dashboard de gerenciamento e totalmente voltado para Web... seus endpoints eram todos expostos em http, hoje chamamos isso de REST API. Isso definiu como os sistemas tratariam suas buscas, foi um salto/marco no segmento...
Elastic Search trabalha com o conceito de cluster, shards and replicas e tambem requer um profissional para estar acompanhando a operacao, entao isso é uma questao que pode nao ser resolvida $$$ tão facilmente.
Mas muitas coisas rolaram nesses anos, muitas... Cloud, novos provedores de Cloud, novos conceitos, pessoas com habilidades incriveis trabalhando em um bem comum, um universo de possibilidades...
Hoje, com empenho, uma pessoa ou um grupo pequeno de pessoas conseguem com zero ou pouco dinheiro colocar um sistema inteiro para rodar e expor seus produtos/servicos/ponto de vista e ter um Google em nossos sistemas é uma funcionalidade que agrega muito valor ao usuario.
Eu fiquei batendo a cabeca um tempo nisso e encontrei um caminho viavel para nós com algumas horas de trabalho e pouco dinheiro investido... veja:
Pegamos um provedor de Cloud como o https://www.vultr.com/, la temos maquinas virtuais completas a partir de 3.5 Usd. Configuramos o firewall da nova maquina vistual assim.
Vamos trabalhar com o Typesense para nossa plataforma de busca.
Podemos instalar o docker e subir tudo em um comando:
docker run \
-p 8108:8108 -v/tmp:/data \
typesense/typesense:0.23.1 \
--data-dir /data --api-key=xyz
ou instalador direto em sua maquina virtual:
curl -O https://dl.typesense.org/releases/0.23.1/typesense-server-0.23.1-amd64.deb
apt install ./typesense-server-0.23.1-amd64.deb
feito isso, no onSave de cada registro que vai para o banco de dados, vamos fazer o put no index:
curl "http://localhost:8108/collections" \
-X POST \
-H "X-TYPESENSE-API-KEY: xyz" \
-d '{
"name": "books",
"fields": [
{"name": "title", "type": "string" },
{"name": "author", "type": "string" },
{"name": "ratings", "type": "int32" }
],
"default_sorting_field": "ratings"
}'
curl "http://localhost:8108/collections/books/documents/import" \
-X POST \
-H "X-TYPESENSE-API-KEY: xyz" \
-d '
{"title":"Book 1","author":"Author1","ratings":24}
{"title":"Book 2","author":"Author2","ratings":31}
{"title":"Book 3","author":"Author3","ratings":30}'
Aqui estou colocando os endpoints, em qualquer linguagem conseguimos fazer requisicoes http de uma forma muito rapida. Mas o pessoal do Typesense tem libraries para:
- JavaScript
- PHP
- Python
- Ruby
e agora la em nossa api, no endPoint de busca, isso:
curl "http://localhost:8108/collections/books/documents/search?query_by=title,author&q=boo" \
-H "X-TYPESENSE-API-KEY: xyz"
Fazemos a busca em nosso sistema de busca, retornando o resultado para nosso frontend, simples assim...
Com nem 100 linhas de codigo e mais de 20 anos de historia nossa busca esta bacana!
A documentacao do Typesense é bem pontual mas poderosamente completa.
Bem... espero ter ajudado... se curtirem deem um alo, posso expor mais tricks/algos otimizados que fiu passando e juntando com o tempo.
Ciro
🤗