Confira neste Papo Reto, Allan Tavares falando sobre como realizar uma Busca Textual com Hibernate Search.

Problema:

Queremos dar a possibilidade dos usuários do nosso sistema pesquisar produtos a partir de tags associadas a ele. A solução padrão é disponibilizar um campo texto onde o usuário possa inserir as tags para que, com isso, façamos a busca dos produtos associados ao mesmo.

Exemplo:

Imagine que vai chegar em nossa aplicação o seguinte texto que deve ser buscado: “alimento legumes“. Dessa forma, o usuário estará querendo saber quais são os produtos associados as tags alimento ou legumes.

Uma ideia é realizar uma query usando LIKE. O problema é que quando executamos a query só retornamos os produtos que tem exatamente o texto “alimento legumes“. Podemos reescrever nossa consulta, trocando o LIKE por IN e até resolvemos o problema parcialmente, mas ainda teremos outras dificuldades.

Agora e se uma palavra estiver ligeiramente diferente da que consta no banco, qual a relevância para a ordenação? Talvez para o usuário a ordenação pela tag “legumes” é duas vezes mais importante que o alimento Como exprimimos isso na JPQL?

Podemos utilizar o APACHE LUCENE

Um projeto com foco em busca textual, que se propõe a resolver problemas como o que passamos logo acima. O que o Lucene faz é criar uma estrutura de documento, onde cada documento pode ter um ou mais campos, e cada campo tem um valor associado. Dessa forma, o diferencial dele é conseguir realizar pesquisas sobre esses documentos seguindo os critérios desejados, como no nosso exemplo das tags.

Quais são os Contras:

Trabalhar diretamente com a API do Lucene é algo burocrático. Dessa forma, nossa busca considerando 0.5 de grau de similaridade do texto digitado e 2 como multiplicador de relevância, seria: “alimnto~0.5 legumes^2 “

Criamos um help para explicar a sintaxe de busca? Colocamos um link para a página do Lucene com os exemplos de query?

A solução seria utilizar o Hibernate Search. Assim, o projeto que se integra ao Lucene e ao Hibernate, e provê uma série de API’s para fazermos busca textual em alto nível. O Hibernate Search possui a classe QueryBuilder que é o responsável por gerar as querys no Lucene de maneira programática.

Confira a apresentação:

#HibernateSearch #ApacheLucene #PapoReto

Autor

Wilson Souza é Gerente de Marketing da Bluesoft. Formado e pós Graduado pela Instituição Mackenzie, possui também MBA pela FGV. Wilson tem mais de 10 anos de experiência na área de Relacionamento e Marketing, atuando em diversas áreas e segmentos do mercado.

Deixe aqui o seu comentário