"Those that know, do. Those that understand, teach." -- Aristotle
"It is not only one person's work, it's really a partnership and collaboration during all these years." -- Christo
O Apache Solr (se pronuncia Solar), segundo a definição constante no site oficial do projeto, é uma plataforma open source de busca textual, muito popular, desenvolvida sob a biblioteca Apache Lucene. Em outras palavras, é uma ferramenta de indexação de documentos e pesquisa de dados.
Basicamente, o Solr permite a indexação de documentos que podem ser encontrados mediante a correspondência com uma busca textual, ou como o Guia de Referência diz "O Solr foi criado para localizar documentos que correspondem a consultas." Entre os documentos que podem ser indexados, estão: xml, json, csv, pdf, doc, docx, ppt, pptx, xls, xlsx, odt, odp, ods, ott, otp, ots, rtf, htm, html, txt e log.
Solr é desenvolvida em Java e está em sua versão 6.3.0, que foi lançada em 8 de novembro de 2016, conforme a nota de lançamento publicada no site do projeto.
O Solr é responsável por potencializar o mecanismo de buscas de muitos dos maiores sites da Internet. Diversas empresas usam o Solr para indexar seus conteúdos, provendo uma poderosa ferramenta de busca aos usuários.
Entre essas empresas estão gigantes como a Apple, Netflix, Disney, AT&T, CNET, Cisco, AOL, NASA, MTV, Goldman Sachs, Cloudspace, Sears, GameSpot, eHarmony, TicketMaster, The Guardian, eBay, StubHub, IBM, Adobe, Best Buy, DuckDuckGo, Instagram e a Casa Branca (sede do governo dos EUA). No Brasil, podemos destacar o Apontador, contando com 12 milhões de documentos e aproximadamente 5.5 milhões de requisições por dia, distribuído em 4 servidores.
- Veja a lista de sites que usam Solr.
Os principais recursos do Solr, incluem: busca textual, hit highlighting, busca facetada e analitica, rich document parsing, busca geoespacial, extensive REST APIs as well as parallel SQL. Solr is enterprise grade, seguro e altamente escalável, providing fault tolerant distributed search and indexing.
Não ter dependências, além do próprio Java, é uma entre as muitas vantagens que o Solr possui.
Existem algumas alternativas ao Solr, como o SphinX e o Elasticsearch. Cada um tem suas vantagens e desvantages em relação aos outros, mas todos são excelentes opções de servidores de busca.
O Solr é regido pela Licença Apache 2.0, que resumidamente permite o livre uso, redistribuição e alteração sem exigência de reciprocidade.
O Solr pode ser instalado em sistemas GNU/Linux, macOS e Windows.
Como é desenvolvido em Java, será preciso instalar o Ambiente de Exucação Java (JRE ou Java Runtime Environment) 1.8 ou superior. A instalação do Solr é bem simples, mas em algumas distribuições GNU/Linux instalar o Java pode ser um pouco trabalhoso, portanto, será mostrando como proceder a instalação dessa dependência em 4 distribuições: CentOS, Debian, Fedora e Ubuntu. Pela facilidade, o processo de instalação para Windows e macOS não serão demonstrados neste documento.
$ java -version
Se a versão instalada do Java for igual ou superior a versão mínima exigida, avance para a seção Instalando o Solr, caso contrário, siga os passos abaixo para instalação do Java, de acordo com a sua distribuição GNU/Linux.
Versão: 7 (1511)
$ sudo yum check-update
$ sudo yum update
$ sudo yum install java-1.8.0-openjdk.x86_64
Versão: 8.6 (Jessie)
$ su -c "apt-get update && apt-get upgrade"
$ su -c "echo \"deb http://ftp.br.debian.org/debian jessie-backports main\" >> /etc/apt/sources.list"
$ su -c "apt-get update"
$ su -c "apt-get install openjdk-8-jre"
Versão: 24 (Server)
$ sudo dnf update
$ sudo dnf upgrade
$ sudo dnf install java-1.8.0-openjdk.x86_64
Versão: 16.10 (Yakkety Yak) e 16.04.1 LTS (Xenial Xerus)
$ sudo apt-get update && apt-get upgrade
$ sudo apt-get install default-jre
O procedimento de instalação do Solr detalhado a seguir, é aplicável a sistemas Unix-like e, basicamente, se resume a baixar e descompactar o Solr. No entanto, há outras maneiras mais intuitivas de proceder a instalação, que também serão demonstradas, neste documento, posteriormente.
# Baixando o Solr
$ sudo wget http://ftp.unicamp.br/pub/apache/lucene/solr/6.3.0/solr-6.3.0.tgz -O /tmp/solr-6.3.0.tgz
# Descompactando
$ tar xzf /tmp/solr-6.3.0.tgz
Pode-se escolher baixar o Solr de outra fonte, veja a lista completa de espelhos da Apache Software Foudation.
OBS: Se você deseja instalar o Solr em um ambiente de produção, veja a seção Instalando o Solr em ambiente de produção.
Terminada a descompactação, vá para o diretório onde o Solr foi descompactado e siga as instruções a seguir.
# Iniciando o Solr
$ bin/solr start
# Iniciando o Solr numa porta especifica
$ bin/solr start -p <porta>
# Reiniciando o Solr
$ bin/solr restart
# Reiniciando a execução de uma instância rodando em uma porta específica
$ bin/solr restart -p <porta>
# Parando a execução de uma instância rodando na porta padrão
$ bin/solr stop
# Parando a execução de uma instância rodando em uma porta específica
$ bin/solr stop -p 8983
Por padrão, o Solr utiliza a porta 8983, no entanto, pode-se especificar uma outra porta usando o parametro -p
na inicialização.
Para testar se o Solr está funcionando, acesse o endereço http://localhost:8983/solr/admin/ping
.
Para facilitar a vida dos Administradores de Sistemas, o Solr vem com um script que procede a instalação dele como um serviço. Após baixar o Solr, descompacte o script instalador e o execute.
$ sudo wget http://ftp.unicamp.br/pub/apache/lucene/solr/6.3.0/solr-6.3.0.tgz -O /tmp/solr-6.3.0.tgz
$ tar xzf /tmp/solr-6.3.0.tgz solr-6.3.0/bin/install_solr_service.sh --strip-components=2
$ sudo ./install_solr_service.sh /tmp/solr-6.3.0.tgz
OBS: Se estiver instalando o Solr no Fedora ou no CentOS, certifique-se de ter o pacote lsof instalado antes de executar o script de instalação. Para verificar se o lsof
já está instalado use o comando lsof -v
. Caso precise instalar o pacote, use $ sudo yum install lsof
para instalá-lo no CentOS ou $ sudo dnf install lsof
para instalá-lo no Fedora.
No caso deste tipo de instalação, após a conclusão pode-se excluir o arquivo baixado e a pasta criada pelo processo de descompactação.
$ rm /tmp/solr-6.3.0.tgz
$ rm -rf /tmp/solr-6.3.0.tgz
Uma vez que foi instalado como um serviço, você pode manipular a execução do Solr, pelo terminal, como qualquer outro serviço, podendo iniciar, parar, reinicar e verificar seu status, conforme os comandos abaixo relacionados:
Comando | Descrição |
---|---|
service solr start | Iniciar o serviço. |
service solr stop | Parar o serviço. |
service solr restart | Reiniciar o serviço. |
service solr status | Verificar o status do serviço. |
Para abstrair o processo de instalação e partir direto para prática, você pode criar uma Máquina Virtual com o Vagrant, usando esse Vangrantfile, que resultará numa instalação automatizada de um sistema GNU/Linux (Ubuntu 16.04 - Xenial Xerus) com a versão mais recente do Solr devidamente instalada e pronta pra uso.
OBS: É preciso ter o VirtualBox instalado.
Finalizado a instalação, acesse a interface web de administração do Solr, pelo endereço http://localhost:8983/solr, de qualquer navegador web.
https://github.com/docker-solr/docker-solr
Rodando o Solr no Docker:
Imagem Oficial: https://hub.docker.com/_/solr/ Para criar container:
docker run --name my_solr -d -p 8983:8983 -t solr
Explicando o comando: docker run cria um container docker a partir de uma imagem (local ou não)
--name my_solr -> define nome do container -d -> executa o container in detached mode (para o container rodar no background) -p 8983:8983 -> define o mapeamento de porta portaLocal:portaExpostanoContainer -t solr -> da o tag em uma imagem e salva ela localmente
Configurações para Solr
Definir o CORE docker exec -it --user=solr my_solr bin/solr create_core -c NOME_CORE
Para carregar um arquivo: docker exec -it --user=solr my_solr bin/post -c NOME_CORE example/exampledocs/manufacturers.xml
Definir configureset para usar em produção
No macOS, uma alternativa bem simpes é instalar o Solr pelo gerenciador de pacotes Homebrew.
$ brew install solr
O Solr possui um Painel de Administração, acessível via web. Concluída a instalação, acesse de qualquer navegador o endereço http://localhost:8983/solr
ou http://<ip ou domínio>:8983/solr
se for acessar remotamente o servidor que está hospedando o Solr.
Por padrão, o acesso ao Painel de Administração não é protegido por senha, mas você pode configurar isso seguindo os passos a seguir. Os passos a seguir são para a versão standalone do Solr e não apra o Solr Cloud.
Para definir uma segurança padrão no solr é bem simples, na pasta /data
basta colocar um arquivo security.json
{
"authentication":{
"class":"solr.BasicAuthPlugin",
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="},
"blockUnknown":"true"
},
"authorization":{
"class":"solr.RuleBasedAuthorizationPlugin",
"user-role":{"solr":"admin"},
"permissions":[{"name":"security-edit",
"role":"admin"}]
}}
A autenticação básica e os plug-ins de autorização baseados em regras estão ativados.
Um usuário chamado solr, com a senha SolrRocks foi definido.
Devido ao parametro blockUnknown estar definido como true, todas as solicitações sem credenciais serão rejeitadas com um erro 401.
Ao definir 'blockUnknown' como false (ou remover) é possível realizar requisições sem autenfificação. No entanto, se um determinado recurso for protegido por uma regra, eles serão rejeitados com um erro 401.
O usuário 'solr' foi definido para a função 'admin'.
A função 'admin' foi definida e tem permissão para editar as configurações de segurança.
Após definir as configurações de segurança será necessário enviar o usuário e senha ao fazer requesições. Aqui está um exemplo usando curl.
Exemplo:
curl --user solr:SolrRocks http://localhost:8983/solr/CoreName/select?q=query
Após colocar o arquivo security.json é preciso alterar as permissões do arquivo
chmod 660 /var/solr/data/security.json
chown solr /var/solr/data/security.json
Se estiver no docker, é importante entrar no container como usuário root, só assim irá funcionar os comandos:
curl --user solr:SolrRocks http://localhost:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-user": {"solr":"iamadmin"}}'
Nesse exemplo, iamadmin
é a nova senha
O Solr traz consigo alguns termos desconhecidos para quem não está habituado com ferramentas de indexação e pesquisa de dados. Por isso, é necessário entender esses termos antes de prosseguir com as configurações, indexação de documentos e realização de consultas.
- Indexing (Indexação)
- É um dos processos mais básicos e importantes do Solr. Indexar é o processo de adicionar conteúdo ao Solr, tornando-o pesquisável.
- Query (Consulta)
- ...
- Hit highlighting
- ...
- Faceting Search (Busca Facetada)
- É o número de vezes que um termo aparece em um documento.
- Relevance (Relevância)
- Determina o nível de satisfação do resultado de uma consulta, para o usuário.
# Criando um core
### Alterando
### Removendo
A indexação de conteúdos é feito pelo programa post
, que fica localizado no diretório bin
, dentro do diterório do Solr.
A indexação de documentos de formato rico, tais como PDF, RTF, DOC etc, o Solr utiliza outra ferramenta da Apache Software Foundation, o Tika. Indexando um PDF específico:
$ bin/post -c <nome_do_core> <documento>
Você também pode indexar todos os documentos contidos em um diretório:
$ bin/post -c <nome_do_core> <diretório>
Uma das habilidades do Solr é indexar sites.
$ sudo su - solr -c "/opt/solr/bin/solr create -c <nome_do_core> -n data_driven_schema_configs"
$ bin/post -c <nome_do_core> <url> -recursive 2 -delay 5
O Solr permite o uso de filtros avançados de buscas, permitindo a utilização de filtros condicionais, wildcards, pesquisa por proximidade e operadores booleanos.
O Fedora vem com o FirewallD ativado por padrão, então, caso você não consiga acesso externo ao painel de administração, verifique se o firewall está ativado. Se for o caso, você pode desativá-lo ou adicionar excessão(ões) as regras do firewall.
sudo systemctl stop firewalld
Caso esteja usando Proxy, talvez seja necessário configurar as informações referentes ao proxy nos arquivos de configuração do gerenciador de pacotes
e do wget
. Veja abaixo onde encontrar esses arquivos.
- apt -
/etc/apt/apt.conf
- dnf -
/etc/dnf/dnf.conf
- wget -
/etc/wgetrc
- yum -
/etc/yum.conf
$ export http_proxy=<ip>:<porta>
$ export https_proxy=<ip>:<porta>
$ export ftp_proxy=<ip>:<porta>
É importante ressaltar que esta não é uma documentação oficial sobre o Apache Solr e nem intenciona ser.
Ao me deparar, na instituição pública na qual estou estagiando, com a tarefa de implemntar o Apache Solr para melhorar as bucas no site e documentos gerados pela instituição, como Diário Oficial Eletrônico e Atos Normativos, comecei a pesquisar pelo termo, que até então desconhecia. Tudo que eu achava pertinente, seja teórico ou prático, durante meu aprendizado, fui anotando para não me perder em meio a tantas fontes de informações. Então, diante da realidade que há pouquissíma documentação sobre o Solr em Português e da elevada quantidade de material que eu tinha escrito, resolvi reescrever esse conteúdo de forma organizada e disponibilizá-lo no meu GitHub, pois pode vir a contribuir para o aprendizado de outros interessados.
É de grande valia qualquer contribuição que possa tornar esse manual melhor. Então, se você tem algum conhecimento teórico ou prático que possa enriquecer essa documentação ou quer corrigir alguma informação incorreta, não se acanhe, fork este repositório, faça as devidas alterações e mande um Pull Request, que eu vou analisar e, se possível, aceitá-lo. Correções ortográficas ou outras correções menores, bem como dúvidas e sugestões, devem ser enviadas via issue track.
- Solr Reference Guide 6.3
- How to install and configure Solr 6 on Ubuntu 16.04
- Solr and web site indexing to create a site search
- Apache Solr Ref. Guide (Unreleased Guide for Apache Solr 6.4)
- Apache Solr by Ryan Wright
- StackOverflow: How to set Apache solr admin password
- Solr Glossary
Copyright (c) 2016-2017, Adjamilton Junior. Essa documentação é regida sob a licença GPLv3.
Lucene é marca registrada da Apache Foundation. Java é marca registrada da Oracle Inc. macOs e Windows são marcas registradas de seus respectivos proprietários.