Autor: Marco Antonio RochaSolr: Indexação e Buscas de Alta Performance usando Software Open Source
Postado em: 20 de agosto de 2012 Tecnologia
Solr é um projeto Open Source de um servidor de buscas de alta performance do projeto Apache Lucene. É desenvolvido em Java e utiliza o Lucene Core como base para indexação e busca, além de fornecer APIs baseadas em REST o que lhe permite ser integrado a praticamente qualquer linguagem de programação.
Principais características
- Altamente escalável através da replicação de dados para outros servidores;
- Fácil configuração através de configuração XML, sem necessidade de codificação;
- Fácil extensão através de plugins;
- Otimizado para alto volume de tráfego;
- Interfaces padrão de integração: XML, JSON e HTTP;
- Ferramenta de administração de fácil compreensão;
- Estatísticas providas via JMX para monitoramento;
Principais recursos
- Busca Textual;
- Busca Geoespacial;
- Destaque de Termos;
- Busca facetada;
- Integração com Banco de Dados;
- Manipulação de rich documents como PDFs ou DOCs;
Dentre os principais recursos, alguns serão detalhados posteriormente.
Destaque de Termos
Permite destacar o termo buscado dentro do documento encontrado, como pode ser visto na imagem a seguir, onde simulamos o funcionamento do recurso buscando pelo termo Solr no seu site oficial:
Busca Facetadas
Permite agrupar os resultados de acordo com qualquer atributo publicado. O exemplo mais comum que podemos citar sobre o uso desse recurso é a contagem e agrupamento de produtos por categorias, características ou fabricantes existente em sites de compras.
Funcionamento Básico
Instalação
O procedimento de instalação do Solr varia de acordo com o ambiente desejado, mas pode ser instalado como uma aplicação web convencional em um Servlet Container como o Tomcat.
O processo detalhado pode ser visto diretamente na Solr Wiki. Além disso é possível executar uma versão standalone apenas executando os scripts contidos no pacote obtido durante o download.
Configuração
O processo de configuração consiste em configurar o schema utilizado de modo a refletir o modelo de dados que se deseja indexar. Dessa maneira é necessário configurar e, se necessário, criar types e fields.
Types
Através da configuração de tipos é possível determinar o tipo de cada dado (int, float, char, etc) e seus atributos (classe, precisão, etc).
Para tipos textuais é possível configurar analisadores e filtros de modo a customizar o comportamento de acordo com especificidades do idioma com, por exemplo, busca fonética.
Abaixo segue exemplo de configuração básica de tipos:
[xml]<types>
<fieldType name=”boolean” class=”solr.BoolField” sortMissingLast=”true”/>
<fieldType name=”float” class=”solr.TrieFloatField” precisionStep=”0″ omitNorms=”true” positionIncrementGap=”0″/>
<fieldType name=”long” class=”solr.TrieLongField” precisionStep=”0″ omitNorms=”true” positionIncrementGap=”0″/>
<fieldType name=”string” class=”solr.TextField” omitNorms=”true”/>
<fieldType name=”date” class=”solr.DateField” omitNorms=”true”/><fieldType name=”text” class=”solr.TextField” omitNorms=”false”>
<analyzer>
<tokenizer class=”solr.StandardTokenizerFactory”/>
<charFilter class=”solr.HTMLStripCharFilterFactory”/>
<filter class=”solr.LowerCaseFilterFactory”/>
<filter class=”solr.BrazilianStemFilterFactory”/>
</analyzer>
</fieldType></types>[/xml]
Fields
Através da configuração de campos é possível definir o modelo de dados utilizado. O schema é flexível o suficiente para configurar campos obrigatórios, opcionais, dinâmicos e calculados.
Abaixo segue exemplo de configuração básica de campos, mostrando campos obrigatórios, opcionais e multivalorados:
[xml]<fields>
<field name=”id” type=”long” indexed=”true” stored=”true” required=”true”/>
<field name=”nome” type=”text” indexed=”true” stored=”true” required=”true”/>
<field name=”descricao” type=”text” indexed=”true” stored=”true” required=”false” />
<field name=”preco” type=”float” indexed=”true” stored=”true” required=”true” />
<field name=”categoria” type=”long” indexed=”true” stored=”true” multiValued=”true” required=”false” />
<field name=”fabricante” type=”long” indexed=”true” stored=”true” multiValued=”false” required=”true” /></fields>[/xml]
Campos Dinâmicos
Campos dinâmicos são campos criados quando não se precisa criar um conjunto de campos seguindo determinado padrão mas não é possível determinar esse padrão em tempo de configuração, dessa maneira cria-se um campo dinâmico e utiliza-se o caracter coringa (*);
Abaixo segue exemplo de configuração de um campo dinâmico que permite que sejam publicados campos chamados ordem_1, ordem_2, ordem_3 e assim por diante:
[xml]<fields>
…
<dynamicField name=”ordem_*” type=”long” indexed=”true” stored=”true”/>
…
</fields>[/xml]Campos Calculados
Campos calculados são campos criados a partir de um processamento (cópia, cálculos matemáticos, etc) realizado nos valores de outros campos e campos opcionais.
Abaixo segue exemplo de configuração de um campo calculado (texto) criado a partir da cópia do conteúdo de dois outros campos (nome e descricao):
[xml]<fields>
…
<field name=”texto” type=”text” indexed=”true” stored=”false” multiValued=”true”/>
…
</fields>
…
<copyField source=”nome” dest=”texto”/>
<copyField source=”descricao” dest=”texto”/>[/xml]Administração
O Solr fornece uma interface de administração Web, onde pode-se verificar a configuração realizada e realizar operações administrativas como alteração de nível de logging, testes de queries e análise de estatísticas.
Segue abaixo a tela inicial da ferramenta de administração:
Publicação
A publicação de conteúdo deve seguir o modelo definido previamente na configuração do schema. É possível publicar conteúdo através de requisições HTTP ou usando a API fornecida diretamente para cada linguagem. Em Java é possível utilizar a API Solrj.
Busca
A busca é realizada usando a sintaxe já definida pela ferramenta semelhante à sintaxe utilizada pelo Lucene. Assim como a publicação, as buscas podem ser realizadas através de requisições HTTP ou das APIs fornecidas.
Referências
Comentários