SlideShare uma empresa Scribd logo
1 de 32
Apache Solr
Uma Visão Geral

Francisco Späth
Agenda
●

Introdução;

●

Propriedades a Serem Exploradas;

●

Instalação;

●

Modelos de Documentos (Schema);

●

Adicionar, Buscar e Remover Documentos;

●

Utilizando Java com Solr (Solrj)

●

Utilizando PHP com Solr;

●

Scaling, Limitações e Alternativas.
O que é Solr?
●

●

Solr é uma plataforma de busca open source do
projeto Lucene;
Solr usa Lucene;
–

Lucene (http://lucene.apache.org/core/): Engenharia de
busca textual de alta performance escrito inteiramente em
Java.

●

Escrito em Java;

●

Interface HTTP – XML, JSON e outros formatos;
Quem está Usando?
●
●

●
●

●
●

Netflix – para otimizar seu sistema de busca;
AOL – para otimizar seus canais (Música, Esportes,
Carros etc.);
Instagram – utiliza para otimizar buscas geoespacial;
Casa Branca – para buscas com agrupamento e
destaque de termos de busca;
Sears – auto-suggest e navegação por agrupamentos;
Uma lista completa por ser encontrada em:
http://wiki.apache.org/solr/PublicServers
Porque utilizar Solr?
●
●

●

( - ) A criação de índices é um processo demorado;
( - ) Visibilidade das mudanças não é imediata
(NRT);
( - ) Geralmente requer re-indexação quando
modificado o modelo de dados;
Porque utilizar Solr?
●

( + ) Busca textual sofisticada com uma variedade de
parâmetros possíveis;
–

Sugestões;

–

Boosting;

–

Aproximação;

–

Dependente de Idioma.

●

( + ) Suporte a Faceting e Pivot;

●

( + ) Baseado nas tecnologias Web.
Requirementos
●

Solr distribution:
http://lucene.apache.org/solr/

●

Java >= 1.5 (Java 1.6 for Solr > 4);

●

Servlet container (Tomcat, Glassfish, Jetty …);
Introdução
●

Para os exemplos aqui demonstrados a seguinte lista
de recursos foi empregada:
–

Solr 4.4 - Indexing http://lucene.apache.org/solr/downloads.html

–

Eclipse – Java Dev - http://www.springsource.org/sts

–

Maven – Gerenciamento de Dependência
http://maven.apache.org/
Propriedades a Serem Exploradas
●

●
●

Interface HTTP – XML, JSON, PHP, Velocity, Ruby
e outros formatos são suportados;
Fulltext Search – busca textual;
Faceting – capacidade de executar agrupamento de
dados com contagem;

●

Pivot – visão de dados em cubo;

●

Expressões de busca grifadas;
Faceting
Dia da Semana

Pivot Faceting

Hora do Dia
Instalação
●

●

Diferentes guias de instalação para cada container
podem ser encontrados aqui:
http://wiki.apache.org/solr/SolrInstall
Para fins da apresentação utilizaremos a instalação
de exemplo distribuída com o próprio pacote Solr
para uma abordagem mais pragmática:
–

java -Dsolr.solr.home=/some/dir -jar start.jar
●

http://localhost:8983/solr/
Instalação
Schema
●

●

Definição de um modelo para os documentos a
serem armazenados.
Schema.xml
–

Configuração de campos;

–

Configuração de tipos de dados;

–

Cópia de valores para campos tipo “catch all”;
Definição de um Schema
●

Propriedades básicas para declaração de campos:
–

name;

–

type (string, int, float, text_general ...);

–

indexed;

–

stored;

–

multiValued;

<field name="title" type="text_general"
indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_s" type="string"
indexed="true" stored="true" />
Armazenar Documentos
●

Interface Web
–

curl: curl http://localhost:8983/solr/update?
commit=true -H "Content-Type: text/xml"
--data-binary '
<add>
<doc>
<field name="id">testdoc</field>
</doc>
</add>'
Excluir Documentos
●

curl: curl

●

curl: curl

http://localhost:8983/solr/update?
commit=true -H "Content-Type: text/xml" --databinary '
<delete>
<id>my-id</id>
</delete>'
http://localhost:8983/solr/update?
commit=true -H "Content-Type: text/xml" --databinary '
<delete>
<query>field:value</query>
</delete>'
Busca de Documentos
●

Conceito de queries:
–

Baseado em Lucene Queries: field : value

–

Wildcard Search: * e ?

–

Fuzzy Search: “termo”~[similaridade entre 0 e 1]

–

Busca por Proximidade (posição): “termos”~[número de palavras]

–

Busca por Faixa: [, ], { e }

–

Boosting (peso): “termo”^[peso]

–

Requer e Proíbe: +field:value -field:value

–

Operadores Lógicos: AND &&, OR || e NOT !

–

Agrupamento: ( )
Mão na Massa
Novo Core

●

Quando criar um novo core?

●

Criando um Novo Core
–
–

●

cp solr/collection1 solr/{new_core_name}
edit solr/{new_core_name}/core.properties

solr/{new_core_name}/conf/schema.xml
Java e Solr
(Solrj)
Dependências
Documentos
●

Java:
–

Utilizando Beans:
●

–

public class JamendoSolrDocument {
@Field
private String id;
@Field
private Integer artistId;
…
}

Utilizando Mapas:
●

SolrDocument doc = new SolrDocument();
doc.setField(“id”, “itm145”);
doc.setField(“artistId”, 12);
Inserindo Documentos
●

Um exemplo complete utilizando java:
–

MyAnnBean bean = new MyAnnBean();
bean.setSomeProperty("my value");
SolrServer solrServer = new
HttpSolrServer("http://localhost:8983/solr/
{core}");
solrServer.addBean(bean);
solrServer.commit();
Excluindo Documentos
SolrServer solrServer = new
HttpSolrServer("http://localhost:8983/solr/
{core}");
solrServer.deleteById(Arrays.asList("id-01",
"id-02"));
solrServer.deleteById("id-03");
solrServer.commit();
Buscando Documentos
SolrServer solrServer = new
HttpSolrServer("http://localhost:8983/solr/
{core}");
SolrQuery query = new SolrQuery(
"value_t:(other^2 another)");
QueryResponse response =
solrServer.query(query);
List<MyBean> rs =
response.getBeans(MyBean.class);
Teste Unitário
●

CoreContainer container = new
CoreContainer("./solr");
container.load();
EmbeddedSolrServer server = new
EmbeddedSolrServer(container, "collection1");
QueryResponse qResp = server.query(new
SolrQuery("*:*"));
SolrDocumentList docList = qResp.getResults();
System.out.println(docList.getNumFound());
server.shutdown();
PHP + Solr?
●

●

Instalação:
http://php.net/manual/en/book.solr.php
$client = new SolrClient($options);
$query = new SolrQuery();
$query->setQuery('*:*');
$query->addField('*')->addField('score');
$query_response = $client->query($query);
$res = $query_response->getResponse();
Scaling

http://www.memonic.com/user/silvan/folder/search/id/1pbBa
Limitações

●

Near Real Time Search

●

Expressividade Queries;

●

Joins;

●

Documentos planos;
Alternativas

●

ElasticSearch – similar a Solr;
–

Suporte a Documentos Estruturados;

–

Expressividade na Elaboração de Queries;

–

Não possui suporte a pivot;
Perguntas?

Mais conteúdo relacionado

Destaque

Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextFull Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextRodrigo Urubatan
 
Rodando um Recomendador no Hadoop usando Mahout
Rodando um Recomendador no Hadoop usando MahoutRodando um Recomendador no Hadoop usando Mahout
Rodando um Recomendador no Hadoop usando MahoutIvanilton Polato
 
Pesquisando bilhões de documentos em milésimos de segundo
Pesquisando bilhões de documentos em milésimos de segundoPesquisando bilhões de documentos em milésimos de segundo
Pesquisando bilhões de documentos em milésimos de segundoHermano Soares
 
Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...
Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...
Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...André Ricardo Barreto de Oliveira
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horasSamanta Cicilia
 
Mineração de Dados com Apache Mahout
Mineração de Dados com Apache MahoutMineração de Dados com Apache Mahout
Mineração de Dados com Apache MahoutFabíola Fernandes
 
SAPO Broker
SAPO BrokerSAPO Broker
SAPO Brokercodebits
 
OS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATAOS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATALeonardo Dias
 

Destaque (10)

Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full TextFull Text Search com Solr, MySQL Full text e PostgreSQL Full Text
Full Text Search com Solr, MySQL Full text e PostgreSQL Full Text
 
Rodando um Recomendador no Hadoop usando Mahout
Rodando um Recomendador no Hadoop usando MahoutRodando um Recomendador no Hadoop usando Mahout
Rodando um Recomendador no Hadoop usando Mahout
 
Cafe & Open Source
Cafe & Open SourceCafe & Open Source
Cafe & Open Source
 
Pesquisando bilhões de documentos em milésimos de segundo
Pesquisando bilhões de documentos em milésimos de segundoPesquisando bilhões de documentos em milésimos de segundo
Pesquisando bilhões de documentos em milésimos de segundo
 
Curriculo_Anderson_Bezerra
Curriculo_Anderson_BezerraCurriculo_Anderson_Bezerra
Curriculo_Anderson_Bezerra
 
Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...
Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...
Search: Explorando Todo O Poder das Buscas - Liferay Symposium Brasil 2015, S...
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Mineração de Dados com Apache Mahout
Mineração de Dados com Apache MahoutMineração de Dados com Apache Mahout
Mineração de Dados com Apache Mahout
 
SAPO Broker
SAPO BrokerSAPO Broker
SAPO Broker
 
OS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATAOS CINCO Vs DO BIG DATA
OS CINCO Vs DO BIG DATA
 

Semelhante a Presentation

Solr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open SourceSolr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open SourceMarcelo Rodrigues
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...tdc-globalcode
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Thiago Barradas
 
Buscas Poderosas Com Solr
Buscas Poderosas Com SolrBuscas Poderosas Com Solr
Buscas Poderosas Com Solralmeidaricardo
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaCésar Araújo
 
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Thiago Barradas
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistenciaRoberson Alves
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarTiago Antônio da Silva
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Javaalexmacedo
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 

Semelhante a Presentation (20)

Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
Solr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open SourceSolr - Indexação e Busca com ferramenta Open Source
Solr - Indexação e Busca com ferramenta Open Source
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
 
Buscas Poderosas Com Solr
Buscas Poderosas Com SolrBuscas Poderosas Com Solr
Buscas Poderosas Com Solr
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibana
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017Palestra Elasticsearch - The Developers Conference - Floripa - 2017
Palestra Elasticsearch - The Developers Conference - Floripa - 2017
 
Ferramentas open-source
Ferramentas open-sourceFerramentas open-source
Ferramentas open-source
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
LDAP
LDAPLDAP
LDAP
 
Aula05 android persistencia
Aula05 android persistenciaAula05 android persistencia
Aula05 android persistencia
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 
WebService Restful em Java
WebService Restful em JavaWebService Restful em Java
WebService Restful em Java
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 

Mais de Marcondes Maçaneiro

Mais de Marcondes Maçaneiro (11)

TDC2014 - Arduino Legacy
TDC2014 - Arduino LegacyTDC2014 - Arduino Legacy
TDC2014 - Arduino Legacy
 
Palestra Computer on the Beatch 2014
Palestra Computer on the Beatch 2014Palestra Computer on the Beatch 2014
Palestra Computer on the Beatch 2014
 
Apresentação sbseg
Apresentação sbsegApresentação sbseg
Apresentação sbseg
 
JAVAle - Open-IdentityStack
JAVAle - Open-IdentityStackJAVAle - Open-IdentityStack
JAVAle - Open-IdentityStack
 
Apresentação cloud computing para sistemas de informação
Apresentação cloud computing para sistemas de informaçãoApresentação cloud computing para sistemas de informação
Apresentação cloud computing para sistemas de informação
 
Automação na nuvem java, cloud e integração contínua
Automação na nuvem  java, cloud e integração contínuaAutomação na nuvem  java, cloud e integração contínua
Automação na nuvem java, cloud e integração contínua
 
Apresentação da JAVale para o NIAVI
Apresentação da JAVale para o NIAVIApresentação da JAVale para o NIAVI
Apresentação da JAVale para o NIAVI
 
Apresentação educar reitoria
Apresentação educar reitoriaApresentação educar reitoria
Apresentação educar reitoria
 
Tdc2013 trilha cloud
Tdc2013   trilha cloudTdc2013   trilha cloud
Tdc2013 trilha cloud
 
Tdc2013 trilha arduino
Tdc2013   trilha arduinoTdc2013   trilha arduino
Tdc2013 trilha arduino
 
Protocolo Http
Protocolo HttpProtocolo Http
Protocolo Http
 

Presentation

  • 1. Apache Solr Uma Visão Geral Francisco Späth
  • 2. Agenda ● Introdução; ● Propriedades a Serem Exploradas; ● Instalação; ● Modelos de Documentos (Schema); ● Adicionar, Buscar e Remover Documentos; ● Utilizando Java com Solr (Solrj) ● Utilizando PHP com Solr; ● Scaling, Limitações e Alternativas.
  • 3. O que é Solr? ● ● Solr é uma plataforma de busca open source do projeto Lucene; Solr usa Lucene; – Lucene (http://lucene.apache.org/core/): Engenharia de busca textual de alta performance escrito inteiramente em Java. ● Escrito em Java; ● Interface HTTP – XML, JSON e outros formatos;
  • 4. Quem está Usando? ● ● ● ● ● ● Netflix – para otimizar seu sistema de busca; AOL – para otimizar seus canais (Música, Esportes, Carros etc.); Instagram – utiliza para otimizar buscas geoespacial; Casa Branca – para buscas com agrupamento e destaque de termos de busca; Sears – auto-suggest e navegação por agrupamentos; Uma lista completa por ser encontrada em: http://wiki.apache.org/solr/PublicServers
  • 5. Porque utilizar Solr? ● ● ● ( - ) A criação de índices é um processo demorado; ( - ) Visibilidade das mudanças não é imediata (NRT); ( - ) Geralmente requer re-indexação quando modificado o modelo de dados;
  • 6. Porque utilizar Solr? ● ( + ) Busca textual sofisticada com uma variedade de parâmetros possíveis; – Sugestões; – Boosting; – Aproximação; – Dependente de Idioma. ● ( + ) Suporte a Faceting e Pivot; ● ( + ) Baseado nas tecnologias Web.
  • 7. Requirementos ● Solr distribution: http://lucene.apache.org/solr/ ● Java >= 1.5 (Java 1.6 for Solr > 4); ● Servlet container (Tomcat, Glassfish, Jetty …);
  • 8. Introdução ● Para os exemplos aqui demonstrados a seguinte lista de recursos foi empregada: – Solr 4.4 - Indexing http://lucene.apache.org/solr/downloads.html – Eclipse – Java Dev - http://www.springsource.org/sts – Maven – Gerenciamento de Dependência http://maven.apache.org/
  • 9. Propriedades a Serem Exploradas ● ● ● Interface HTTP – XML, JSON, PHP, Velocity, Ruby e outros formatos são suportados; Fulltext Search – busca textual; Faceting – capacidade de executar agrupamento de dados com contagem; ● Pivot – visão de dados em cubo; ● Expressões de busca grifadas;
  • 11. Dia da Semana Pivot Faceting Hora do Dia
  • 12. Instalação ● ● Diferentes guias de instalação para cada container podem ser encontrados aqui: http://wiki.apache.org/solr/SolrInstall Para fins da apresentação utilizaremos a instalação de exemplo distribuída com o próprio pacote Solr para uma abordagem mais pragmática: – java -Dsolr.solr.home=/some/dir -jar start.jar ● http://localhost:8983/solr/
  • 14. Schema ● ● Definição de um modelo para os documentos a serem armazenados. Schema.xml – Configuração de campos; – Configuração de tipos de dados; – Cópia de valores para campos tipo “catch all”;
  • 15. Definição de um Schema ● Propriedades básicas para declaração de campos: – name; – type (string, int, float, text_general ...); – indexed; – stored; – multiValued; <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> <dynamicField name="*_s" type="string" indexed="true" stored="true" />
  • 16. Armazenar Documentos ● Interface Web – curl: curl http://localhost:8983/solr/update? commit=true -H "Content-Type: text/xml" --data-binary ' <add> <doc> <field name="id">testdoc</field> </doc> </add>'
  • 17. Excluir Documentos ● curl: curl ● curl: curl http://localhost:8983/solr/update? commit=true -H "Content-Type: text/xml" --databinary ' <delete> <id>my-id</id> </delete>' http://localhost:8983/solr/update? commit=true -H "Content-Type: text/xml" --databinary ' <delete> <query>field:value</query> </delete>'
  • 18. Busca de Documentos ● Conceito de queries: – Baseado em Lucene Queries: field : value – Wildcard Search: * e ? – Fuzzy Search: “termo”~[similaridade entre 0 e 1] – Busca por Proximidade (posição): “termos”~[número de palavras] – Busca por Faixa: [, ], { e } – Boosting (peso): “termo”^[peso] – Requer e Proíbe: +field:value -field:value – Operadores Lógicos: AND &&, OR || e NOT ! – Agrupamento: ( )
  • 20. Novo Core ● Quando criar um novo core? ● Criando um Novo Core – – ● cp solr/collection1 solr/{new_core_name} edit solr/{new_core_name}/core.properties solr/{new_core_name}/conf/schema.xml
  • 23. Documentos ● Java: – Utilizando Beans: ● – public class JamendoSolrDocument { @Field private String id; @Field private Integer artistId; … } Utilizando Mapas: ● SolrDocument doc = new SolrDocument(); doc.setField(“id”, “itm145”); doc.setField(“artistId”, 12);
  • 24. Inserindo Documentos ● Um exemplo complete utilizando java: – MyAnnBean bean = new MyAnnBean(); bean.setSomeProperty("my value"); SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/ {core}"); solrServer.addBean(bean); solrServer.commit();
  • 25. Excluindo Documentos SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/ {core}"); solrServer.deleteById(Arrays.asList("id-01", "id-02")); solrServer.deleteById("id-03"); solrServer.commit();
  • 26. Buscando Documentos SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/ {core}"); SolrQuery query = new SolrQuery( "value_t:(other^2 another)"); QueryResponse response = solrServer.query(query); List<MyBean> rs = response.getBeans(MyBean.class);
  • 27. Teste Unitário ● CoreContainer container = new CoreContainer("./solr"); container.load(); EmbeddedSolrServer server = new EmbeddedSolrServer(container, "collection1"); QueryResponse qResp = server.query(new SolrQuery("*:*")); SolrDocumentList docList = qResp.getResults(); System.out.println(docList.getNumFound()); server.shutdown();
  • 28. PHP + Solr? ● ● Instalação: http://php.net/manual/en/book.solr.php $client = new SolrClient($options); $query = new SolrQuery(); $query->setQuery('*:*'); $query->addField('*')->addField('score'); $query_response = $client->query($query); $res = $query_response->getResponse();
  • 30. Limitações ● Near Real Time Search ● Expressividade Queries; ● Joins; ● Documentos planos;
  • 31. Alternativas ● ElasticSearch – similar a Solr; – Suporte a Documentos Estruturados; – Expressividade na Elaboração de Queries; – Não possui suporte a pivot;