terça-feira, 8 de dezembro de 2009

Search engine in Ruby on Rails




Quem não gosta de facilidades no hora de navegar na internet. Uma dessas facilidades pode ser chamada de simple text-full search engine. Em resumo são aqueles campos que aceitam qualquer coisa do usuário e devolve uma lista de possíveis registros procurados. 
Uma vantagem é que se o filtro de busca costuma ser cheio de critérios é só indexar no campo full-text e está resolvido... resolvido para o programador e para o usuário que irá digitar o que sabe no campo (ou seja não existe campo não nulo neste filtro). 


Existem vários exemplos desse campo: Google tem um campo bem grande na sua página inicial; mercado livre; submarino... tem um monte desses sites com essa solução.
O problema na minha empresa não era tão diferente. A gente trabalha num projeto baseado em CRM (Rails and DB2) e os contatos inseridos no banco possuem várias informações, ou seja a tela de pesquisa de um contato específico é possível por várias informações (nome, data de nascimento, e-mail, endereco, cidade, etc...), todas essas informações juntas ou avulsas. Ou seja, se eu fosse fazer um filtro para isso precisaria de um monte de javascript, pois para cada tipo de informação seria apresentado um campo... para data de nascimento um campo data, para código do contato um campo para inserir o codigo e assim por diante. Depois ainda precisaria filtra na controller, na action qual é o tipo da pesquisa se é por cidade, por nome, por data de nasc, por codigo e etc. É um inferno!
O text-full search resolve tudo isso e se pensarmos um pouco ainda adiciona algumas vantagens, uma dela é que eu posso fazer um levantamento facilmente, por exemplo: eu preciso dos aniversariantes do mês ou os aniversariantes do mês que moram em são paulo ou entao os e-mails dos moradores do bairro do Bom Retiro.


É uma soluçao muito legal para os sistemas. Para quem quiser saber mais sobre a tecnologia que utilizamos: Xapian. Existem outras mais: ferret, solr... tem outras é que eu não estou lembrando agora mas se vocês colocarem no google vão achar outras mais. O único problema é que para cada tecnologia você vai ter algumas restrição ou algo que não te deixe contente. Por exemplo tem uma dessas soluções que funciona apenas para alguns bancos de dados, outro exemplo é não conseguir indexar os novos registros inseridos em tempo de execução, ou então não conseguir associar informações de outras tabelas ou não conseguir fazer busca com range (ex. os aniversariantes do dia 1/1/2009 a 1/3/3009).  
Vai de cada um a escolha, vai depender muito do ambiente que se encontram.
É isso... Se alguem tiver alguma dúvida sobre como implementar o xapian para os seus projetos por favor me mande um e-mail Altherlex Alves.
Abraço e até mais.

Um comentário:

  1. Pow, bacana mesmo! a emplementação que voce fez no sistema da sua empresa ficou bem legal.

    abraço.

    ResponderExcluir