Melhor maneira de implementar busca baseada em index com Lucene

6 respostas
java
andre_a_s

Bom dia meus amigos.

Cerca de 10 anos atrás precisei implementar uma busca similar ao do google, onde enquanto o usuário vai digitando o sistema vai sugerindo algumas palavras baseado numa busca.
Na época era uma agência de viagens onde as sugestões podiam ser basicamente qualquer coisa: nome de cidade, país, pacote, aeroporto, destino turístico e tal… na época fiz o seguinte:
1 - Criamos um job que executa um select nas tabelas necessarias(TBL_CIDADE, TBL_PACOTE, etc) e pegavamos o resultado desse select e jogamos num arquivo texto CSV.
2 - Usando o lucene, criamos index baseado nesses arquivos texto.
3 - Conforme o usuário digitava, a busca era feita nesse index.

Funcionava bem e muito rápido, esse job de criar os index rodava 1x por hora e era o suficiente.
Hoje preciso desenvolver a mesma rotina, num cenário parecido.

Minha duvida:
Hoje, 10 anos depois, qual é a melhor maneira de se implementar isso ?
Até posso implementar da mesma maneira que fiz antes, mas como estou um tempo fora do mercado gostaria de saber de existe uma maneira mais legal de fazer isso.
A unica diferença é que aqui não poderei rodar o job de 1h em 1h hora, o ideal seria algo real time ou que pelo menos esse job seja apenas incremental a cada 30s ou menos, porque aqui os registros nessas tabelas são inseridos/atualizados a todo momento.

O que me indicam ?

Grande abraço!

6 Respostas

A

Você pode usar o Elasticsearch para isso:

  • Utiliza indices Lucene do mesmo jeito
  • Tem uma API para atualizar indíces em (quase) real-time
andre_a_s

Estou usando o Elasticsearch, bem rapido por sinal!
Qual é essa API que atualiza indices ?

A

Tem bastante documentaçao no site deles.
Aqui tem um tutorial básico, inclusive como adicionar novos items ou atualizar o indíce:

andre_a_s

Valeu!!!

pfk66

Precisa ElasticSearch se 10 anos atrás ele conseguiu implementar o mesmo problema, sem a nuvem?

Sei que tá na moda e tudo mas como a pergunta é “qual a melhor maneira de implementar”, eu fiquei curioso pra saber qual é a vantagem prática de ter uma API REST entre a aplicação e o index nesse caso.

pfk66

Se o programa que você desenvolveu 10 anos atrás ainda existir, ele vai rodar mais rápido hoje num SSD moderno.

Com relação ao ElastisSearch, você pode até dizer que sua solução é à prova de terremoto, mas mais rápida???

Acho que não tem como ser mais rápido que uma solução que não precisa chamar um serviço remoto???

Criado 3 de abril de 2018
Ultima resposta 2 de ago. de 2018
Respostas 6
Participantes 3