Desde o surgimento de buscadores da internet, como o Yahoo e principalmente após o surgimento do Google, os usuários de sistemas corporativos cada vez mais sentiram a necessidade de obter informações de maneira rápida e eficiente. Usar mecanismos de indexação e full text search passa a ser necessário a partir deste momento, pois com um volume maior de informações geradas e armazenadas dentro das empresas, torna-se imprescindível a busca de informações de maneira rápida e eficiente.
Conhecer as principais tecnologias de indexação e de full text search disponíveis no mercado ajuda na tomada de decisão sobre qual tecnologia utilizar, de acordo com o contexto da corporação e com os requisitos funcionais e não funcionais. Este mecanismo só será relevante quando houver informações textuais de grande volume, como conteúdo de livros, documentos, emails enfim, tudo que possua texto e que o usuário deseje encontrar alguma informação contida neste texto.
Existem hoje no mercado inúmeras soluções, bibliotecas e componentes de full text search auxiliando na criação de projetos que contenham tais requisitos. Há soluções proprietárias, open sources e dos mais variados tipos, de maneira que cabe ao arquiteto do projeto escolher qual delas se encaixará melhor nos requisitos do sistema. A seguir, tem-se algumas das principais tecnologias de full text search existentes e utilizadas no mercado.
São soluções que são incluídas pelos fabricantes de banco de dados como Oracle, PostgreSQL, MySQL, entre outros. Possibilita a indexação dos dados armazenados no banco de dados, deixando o gerenciamento do índice (inserção, atualização e exclusão) a cargo do banco de dados.
Vantagens:
Desvantagens:
São mais indicados:
São soluções dedicadas de full text search, usado, por exemplo, para indexar conteúdo de sites, intranet entre outros. Graças a seu foco, possui uma grande performance tanto para indexação quanto para processar consultas.
Exemplos: Google Search Appliance
Funcionalidades que geralmente possuem:
Vantagens:
Desvantagens:
Observações: O Preço pode variar de acordo com o tamanho do índice ou pelo número de documentos indexados.
São mais indicados: Quando se deseja indexar todos os documentos já produzidos pela organização e que estejam em uma intranet, páginas, banco de dados, entre outros e que não se tenha a necessidade de alterar a maneira como está sendo feita a indexação.
São full text engines que você pode adicionar e usar na sua aplicação. Comparada com as outras soluções, é a mais flexível das apresentadas. O desenvolvedor pode escolher quais dados serão indexados, quais serão pesquisados por full text search e quais serão pesquisados normalmente, ou seja, quais informações estarão no índice e quais estarão no banco de dados.
O desenvolvedor é livre para manipular os dados antes da indexação e é livre para decidir como o usuário irá expressar a sua consulta. O Desenvolvedor só precisa ter autonomia para tomar esta decisão no projeto. (Se for um projeto onde ele não pode alterar o fonte, esta solução não é indicada)
Entre as bibliotecas disponíveis há o Apache Lucene e o Hibernate Search .O Lucene é o core do Hibernate Search e é usado por vários servidores de busca.
O Hibernate Search veio para unir o potencial do Lucene com o potencial do Hibernate Core, resolvendo assim a defasagem que há entre o mundo dos flat text e dos objetos (mundo OO). Com ele é possível mapear os objetos usando as anotações do JPA ou do próprio Hibernate e acrescentar as anotações do Hibernate Search que informará que o objeto terá campos indexados. Segue abaixo um exemplo:
@Entity
@Indexed
public class Item {
@Id @GeneratedValue
@DocumentId
private Integer id;
@Field
private String title;
…
}
Como visto no exemplo, basta anotar a entidade com a annotation @Indexed, descrever qual será o identificador único deste documento quando o Hibernate Search for indexar usando a annotation @DocumentId e depois descrever quais são os campos indexáveis desta classe usando o @Field.
Para pesquisar os objetos indexados usando full text search, usa-se a sintaxe do Lucene para realizar a consulta, como segue:
…
luceneQuery=”title:casmurro”
FullTextSession ftSession = Search.getFullTextSession(session);
org.hibernate.Query query = ftSession.createFullTextQuery(
luceneQuery,
Item.class);
List results = query.getResultList();
…
Como observado, é uma consulta similar as consultas feitas usando JPA(JPQL), com a vantagem de se usar um recurso mais eficiente de busca.
Vantagens:
Desvantagens:
São mais indicados: Quando se deseja customizar a indexação ou a full text search para atender a requisitos específicos de negócio da corporação.
São servidores dedicados para operações de indexação e de consulta usando full text. São, em sua maioria, soluções híbridas entre apliance solutions e bibliotecas pois além de serem servidores dedicados, permitem a alteração do mecanismo de busca ou de indexação.
São exemplos destes servidores o Microsoft Search Server e o SOLR. O SOLR é um servidor de busca dedicado feito em java que usa por baixo o Apache Lucene. É open source e permite que seja alterada a maneira de como as informações serão indexadas, fornece uma API de suporte (a SolrJ) aos desenvolvedores para utilizarem em seus projetos.
O SOLR possui mecanismo de clusterização, replicação e é extremamente eficiente sendo usado hoje por inúmeras empresas como AOL, NASA, CISCO entre outras.
Vantagens:
Desvantagens:
Conclui-se que dependendo da situação de cada organização, cada solução de full text search deve ser avaliada, pois cada organização possui seus requisitos próprios. Hoje há diversas soluções open-source que atendem perfeitamente a maioria dos requisitos funcionais e não funcionais. Cabe ao arquiteto do projeto de software, escolher a melhor solução para o seu cenário considerando sempre as vantagens e a desvantagens de cada solução.
Anderson Vasconcelos – Dextra Sistema
1 Comentário
Marlon Azevedo
abril 3rd, 2012 @ 15:52
1Voce ja fez comparativo de full text search entre os Bancos existentes?
RSS dos comentários deste post · TrackBack URI
Comente