Skip to content
/ solr Public
forked from ajunior/solr

Manual Colaborativo sobre o Apache Solr.

Notifications You must be signed in to change notification settings

vinnyalvs/solr

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Apache Solr: Manual Colaborativo

"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

Índice

Introdução

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.

Quem está usando Solr

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.

Recursos

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.

Vantagens

Não ter dependências, além do próprio Java, é uma entre as muitas vantagens que o Solr possui.

Alternativas

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.

Licença

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.

Instalação

O Solr pode ser instalado em sistemas GNU/Linux, macOS e Windows.

Instalando o Java

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.

Verificando se o Java já está instalado

$ 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.

Instalando o Java no CentOS

Versão: 7 (1511)

$ sudo yum check-update
$ sudo yum update
$ sudo yum install java-1.8.0-openjdk.x86_64

Instalando o Java no Debian

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"

Instalando o Java no Fedora

Versão: 24 (Server)

$ sudo dnf update
$ sudo dnf upgrade
$ sudo dnf install java-1.8.0-openjdk.x86_64

Instalando o Java no Ubuntu

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

Instalando o Solr

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.

Iniciando o Solr

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

# 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 do Solr

# 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.

Instalando em ambiente de produção

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

Manipulando o serviço

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.

Instalações alternativas

Vagrant

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.

Docker

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

Homebrew

No macOS, uma alternativa bem simpes é instalar o Solr pelo gerenciador de pacotes Homebrew.

$ brew install solr

Painel de Administração

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.

Segurança

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"}]
}}

O que está definido neste exemplo:

A autenticação básica e os plug-ins de autorização baseados em regras estão ativados.

Seção authentication

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.

Seção authorization

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.

Como fazer requisições

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

Atualizando a senha padrão do Solr

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

Terminologia

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.

Cores

# Criando um core

### Alterando

### Removendo

Adicionando Conteúdo

A indexação de conteúdos é feito pelo programa post, que fica localizado no diretório bin, dentro do diterório do Solr.

PDF, DOC

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>

Indexando Site

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

Consultas

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.

Troubleshotting

Firewall

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

Proxy

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>

Sobre esta documentação

É 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.

Como contribuir

É 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.

Referências Bibliográficas

Notas de Copyright

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.

About

Manual Colaborativo sobre o Apache Solr.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML 56.7%
  • CSS 34.6%
  • JavaScript 8.7%